Autor Tema: programacion basic para conexion serie con hyperterminal  (Leído 22063 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado barrabaixa

  • PIC12
  • **
  • Mensajes: 50
programacion basic para conexion serie con hyperterminal
« en: 04 de Julio de 2008, 14:07:32 »
Buenas,

Estoy programando con el BASIC compiler del PIC Simulator IDE, ya que no me entiendo con ensamblador ni otros lenguajes. Lo que quiero es hacer pruevas de transmision de datos entre el PC i el PIC. Lo tengo todo bien conectado y con salidas a led's para ir experimentando.

Este código seria para que depende del número que introduzca, si es más grande de 5 o más pequeño, se encienda un led u otro. Es correcto?

AllDigital 

TRISA = %00011111
TRISB = %01000000

Dim i As Byte
i = 1
Hseropen 9600
loop:
   Hserin i
      If i > 5 Then
      PORTA.1 = 1
      PORTA.2 = 0
      Endif
      If i < 5 Then
      PORTA.2 = 1
      PORTA.1 = 0
      Endif
Goto loop

Pero no sé por qué el Hyperterminal no me deja poner números ni letras, no escribe nada, o sólo carácteres estraños, por qué?

Gracias por todo

PD: las estructuras del BASIc estan aquí http://www.oshonsoft.com/picbasiccompiler.html#11
« Última modificación: 04 de Julio de 2008, 14:14:06 por barrabaixa »

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #1 en: 04 de Julio de 2008, 14:29:41 »
Saludos barrabaixa!
Bueno según ese código, sólo estás recibiendo un valor, o sea que no vas a ver nada en el hyperterminal, aunque él realmente lo está enviando. Si deseas ver el valor recibido, deberías introducir algo así como:

Código: [Seleccionar]
AllDigital

TRISA = %00011111
TRISB = %01000000

Dim i As Byte
i = 1
Hseropen 9600
loop:
   Hserin i
   Hserout #i
      If i > 5 Then
      PORTA.1 = 1
      PORTA.2 = 0
      Endif
      If i < 5 Then
      PORTA.2 = 1
      PORTA.1 = 0
      Endif
Goto loop


Nota el "Hserout" que coloqué... es para que puedas ver lo que estás recibiendo. Por otro lado, fíjate bien que la tasa de baudios del hyperterminal sea igual a la que estás configurando en el programa. No sé qué micro estás usando, pero con las instrucciones Hserout y Hserin estás usando el hard del micro, así que presta atención a que estés usando los pines correctos. Y por supuesto has de estar usando un max232 u otro inversor TTL/RS232 verdad?
Ok nos leemos!
« Última modificación: 04 de Julio de 2008, 14:31:58 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado barrabaixa

  • PIC12
  • **
  • Mensajes: 50
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #2 en: 04 de Julio de 2008, 14:34:53 »
Hola firepic, la cosa está en que el hypterminal no me deja enviar información (por eso ya no probaba ni de recibirla), es que no sé cómo va mucho el Hypterminal, pero ayer estuve experimentando y me funcionó con otra práctica.

Efectivamente lo tengo conectado con un max232.

Voy a probar con tu código a ver si al menos recibo algo.

En el hypterminal cómo veo lo que mando y lo que recibo, en pantallas distintas?

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #3 en: 04 de Julio de 2008, 14:45:03 »
Si estás dando tus primeros pasos con el hyperterminal, yo te recomendaría que hicieras un programa más sencillo, sin condicionales ni nada, que simplemente envíe una cadena de texto...como la conocida "Hola mundo"....
También fíjate en que estés haciendo correctamente las conexiones en el db9. Recuerda que 5 va a masa, 2 es transmisión y 3 recepción. Esos pines son los que necesitas.
La cuestión con el hyperterminal es así:
1- Lo abres, te pregunta si quieres hacerlo predeterminado, contestas,
2- Luego llegas a la pantalla de "Nueva conexión"... eliges el puerto serial que estés usando.. COM1, COM2, etc...
3- Te aparece la ventana "Propiedades de COMx"... allí colocas la velocidad de transmisió... donde dice "bits por segundo"... lo demás lo dejas así.
4- Sale una ventanita con un campo en blanco... allí se mostrarán los datos que recibas (los que recibas, no los que envíes; como te dije, a penas pulses una tecla, el hyperterminal enviará serialmente el valor correspondiente, sin mostrar nada).

Entonces haz el código que te digo, simplemente abres el puerto y luego un lazo enviando una cadena de texto, si quieres le pones un delay para visualizar mejor.
En lo que tengas eso posteas los resultados obtenidos. Si quieres también puedes colocar el esquemático de lo que tienes conectado, a ver si está todo correcto. No te preocupes que esto de la transmisión serial al principio es posible que cueste un poco, pero no es nada del otro mundo, ya verás que funcionará.

Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado barrabaixa

  • PIC12
  • **
  • Mensajes: 50
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #4 en: 04 de Julio de 2008, 15:06:15 »
A ver, vamos a ir paso a paso.

En la ventana de propiedades pongo 9600 bits por segundo y hasta ahora en control de flujo ponia ninguno, dejo hardware?

Entonces me aparece la ventana con el recuadro en blanco.

El programa que he hecho y programado es el siguiente ( pregunta: los puertos que no utilizo cómo los declaro, 1 o 0, entrada o salida?):

Código: [Seleccionar]
AllDigital  '0 = SORTIDA

TRISA = %00011111
TRISB = %01000000

Hseropen 9600
Hserout "h"
WaitMs 500
Hserout "o"
WaitMs 500
Hserout "l"
WaitMs 500
Hserout "a"
WaitMs 500

Voy a hacer un esquema de las conexiones del circuito, pero con qué programa lo hago para poder colocar pic's, max232, conexion serie?

Mi objetivo final (que debo alcanzar para final de año) es construir un control numérico, pero de momento voy haciendo progresos poco a poco, así que muchas gracias.




Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #5 en: 04 de Julio de 2008, 15:39:35 »
Sobre lo de control de flujo, yo siempre lo dejo "hardware" y funciona al pelo. Ahora, con "ninguno" también debería funcionar. La cosa es que yo prácticamente no uso el hyperterminal para este tipo de cosas, uso un programita que me parece más simpático, que se llama Tera Term Pro, es gratuito y para mí es fabuloso. Usando este soft, por defecto el control de flujo es "ninguno" y también funciona. En eso me baso para decirte que debe funcionar de ambas maneras.

Los puertos que no usas los puedes colocar como entradas o salidas, no hay problema. Yo suelo colocarlos como salida, pero cada quien tiene sus gustos.  :D

Respecto al programa que hiciste, bueno no más una observación: no hace falta que escribas un Hserout por cada byte, puedes colocar la cadena de texto completa. Algo así:
Código: [Seleccionar]
Hserout "Hola",CrLf
El CrLf es retorno de carro y salto de línea.
Te recomiendo que consultes el manual. Los manuales son el eterno aliado de cualquier programador.
En esta página lo puedes conseguir, con ejemplos muy ilustrativos:
http://www.oshonsoft.com/picbasiccompiler.html

Para hacer el esquemático, puedes usar cualquier programa editor de circuitos. Particularmente me gusta hacer esquemas con el eagle, ese soft tiene una versión demo gratuita, la puedes descargar de su web:
http://www.cadsoft.de/download.htm

Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado barrabaixa

  • PIC12
  • **
  • Mensajes: 50
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #6 en: 04 de Julio de 2008, 16:25:45 »
Gracias firepic,

El Tera Term ya me lo instalé y con este programa me va igual que con el Hyperterminal, o sea, no me va.

cuando dices que el CrLf es el retorno de carro y salto de línea, a qué te refieres? (he estado buscando y no encuentro su función)

Voy a hacer el esquema y lo subo.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #7 en: 04 de Julio de 2008, 16:47:08 »
Retorno de carro es que vuelva al inicio de la línea. Y salto de línea es justamente eso, otra línea.
Un ejemplo.
Si no colocas el retorno de carro y salto de línea, verás algo así:

Citar
HolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHolaHola

Si colocas el retorno de carro y el salto de línea aparecerá de esta forma:

Citar
Hola
Hola
Hola
Hola
Hola

Si colocas el salto de línea pero no el retorno de carro, aparecerá así:

Citar
Hola
       Hola
               Hola
                       Hola
                                Hola

O sea, salta de línea, pero no vuelve al principio (eso es lo que hace el retorno de carro).
Si colocas el retorno de carro sin el salto de línea, verás siempre lo mismo:

Citar
Hola

Porque retornará al principio y sobreescribirá sobre lo anterior.
Espero con esto te haya quedado claro. Entonces con el soft que estás usando, al colocar la frase CrLf es ambas cosas, retorno de carro y salto de línea, a la vez. Es un detalle pero así vez mejor los datos.

Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado barrabaixa

  • PIC12
  • **
  • Mensajes: 50
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #8 en: 04 de Julio de 2008, 18:35:16 »
Me ha quedado más que claro, una explicación muy ilustrativa;)

Aún no he hecho el esquema pero las conexiones estan bien porque ahora ya recibo "cosas", pero no lo he esperado. Recibo carácteres así:

×ÖÑ·´±Ô÷×ÖÑÔ·´±ô·´±ô·´±Ô·¶±



Por qué recibo esto?

Gracias

PD: No lo he dicho pero estoy trabajando con un pic 16F628A, con la conexion RX y TX des de el MAX232, de manera que el PORTB.1 = ENTRADA y PORTB.2 = SALIDA. Está bien definido esto en el código?
« Última modificación: 04 de Julio de 2008, 18:42:28 por barrabaixa »

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #9 en: 04 de Julio de 2008, 18:55:40 »
Pues pareciera que el hyperterminal estuviera diciendo puras groserías  :D
La conexión que tienes de pines está correcta.

Mira viejo, cuando eso sucede podría ser por:
1- La tasa de baudios que tiene configurado el hyperterminal no es igual a la tasa con la cual está enviando el micro. En tu caso no creo que sea eso, pues dices que lo estás configurando bien.
2- El hard está mal.

Me parece más posible la segunda opción. Trata de colgar el esquemático de lo que estás montando, sobre todo la conexión con el max232 al pic y a la pc.
Otra cosa, no has intentado simular el código? Yo generalmente simulo en proteus ese tipo de circuitos antes de montarlo, así me ahorro tiempo.

Ok saludos, nos leemos!  :mrgreen:

P.D. La imagen que colocaste se ve demasiado pequeña, no se distingue nada. Cuando cargues imágenes en el imageshack, fíjate en la opción de "resize"... yo generalmente la coloco a tamaño de 17" o 19" para que se aprecie bien, o la dejas a tamaño real.
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #10 en: 04 de Julio de 2008, 19:21:42 »
Hola, no he utilizado nunca el modulo usart sin interrupciones y en este ordenador no tengo instalado el compilador.

Aparte de lo que te dijeron los compañeros pueden salir caracteres raros o basura por dos motivos mas.

Si usas oscilador interno puede que tengas que calibrarlo, el valor de calibración lo facilita el fabricante en la ultima posición de memoria flash del PIC. Normalmente este valor se pierde al programar el PIC si no se tuvo esto en cuenta.

Otro problema puede ser que el % de error del BIT RATE sea muy grande mayor al 2% para la velocidad que usas. Esto si lo puedes ver cargando el código compilado en el editor de assembler del PSI y buscando la cabecera del HSEROPEN, en las primeras líneas el compilador Basic inserta el error del BIT rate en forma de comentario, tanto en % como el numero de bit de error que equivale.

Esta es la configuracion del hyperterminal (llego tarde ya te funciona):

'programar el hyperterminal del Windows:
'Bits por segundo: 9600
'Bits de datos: 8
'Paridad: Ninguno
'Bit de parada: 1
'Control de flujo: Ninguno

Aqui te dejo unos ejemplos, son un poco avanzandos pero ahi quedan.

http://www.todopic.com.ar/foros/index.php?topic=14917.0
Busca "COMUNICACION CON EL PC"

PD: Lo siento, pero no estoy de acuerdo con la opinion de que un simulador ahorra tiempo.
« Última modificación: 04 de Julio de 2008, 19:36:07 por dogflu66 »
Saludos desde Granada, España.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #11 en: 04 de Julio de 2008, 19:54:43 »
PD: Lo siento, pero no estoy de acuerdo con la opinion de que un simulador ahorra tiempo.

Maestro dogflu, no es que trabajar con simulador ahorre tiempo, yo dije "me ahorra tiempo". O sea, en mi caso particular. Porque es que no tengo headers como para programar y de una vez probar... entonces tengo que sacar el pic del circuito, grabarlo, volver a colocarlo en el circuito...
En cambio en proteus puedo simular el código, hay muchos errores de programación que logro depurar antes de grabar al circuito final. Otra cosa es que no tengo osciloscopio... entonces en proteus puedo ver con el "analizador digital" las salidas del micro... por ejemplo he estado trabajando con interfaz spi y allí puedo ver su compartamiento. Creo que gran porcentaje de los errores por código pueden ser resueltos usando el proteus. Y luego que funciona allí, pues se tiene mayor certeza que el programa está bien, y si no funciona en físico, se duda más del hardware.
En verdad a mí me es una ventaja grandísima. 
Pero por supuesto es sólo mi opinión, entiendo que somos personas diferentes y tenemos modos diferentes de trabajar.  :lol:

Un cordial saludo, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado barrabaixa

  • PIC12
  • **
  • Mensajes: 50
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #12 en: 06 de Julio de 2008, 12:38:32 »
El problema de baudios no puede ser porque los dos estan a 9600, y las conexiones las he revisado a fondo y estan todas OK. He simulado el código y el problema no está en eso, pues funciona bien.

Veo probable el tema del oscilador interno, ya que no he tenido en cuenta el valor de calibración. Ahora no dispongo de PIC's nuevos para comprobar este valor, pero cómo lo puedo calibrar? (Puede ser que ésta también sea la causa por la que el WinPic no me reconozca los PICs?)

dogflu66, los ejemplos que me pasas los vi pero para son demasiado avanzados para mi nivel, quizá dentro de un tiempo sea capaz de entenderlos.

Saludos y gracias


Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #13 en: 06 de Julio de 2008, 19:01:31 »
A veces no solo es el oscilador interno si no la manera en que envias los datos, aunque esten a 9600 baudios no quiere decir que ambos los tengas en modo TRUE o modo INV. deberias checar por ese lado y un consejo la simulacion se queda en eso, la practica siempre  le gana a la teoria y com esta vez a la simulacion.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: programacion basic para conexion serie con hyperterminal
« Respuesta #14 en: 07 de Julio de 2008, 12:16:05 »
Con eso sí estoy de acuerdo maestro navaismo, la práctica siempre le gana a la simulación... sin duda alguna.  :lol:
Ahora bien, no creo que el problema sea tenerlo en modo TRUE o INV, porque él está usando el comando HSEROUT, que usa el hard del micro, y por tanto siempre está en modo TRUE. Que yo recuerde (corrígeme si estoy equivocado) la forma INV se puede habilitar cuando estás trabajando con el comando SEROUT.
Yo le aconsejaría a barrabaixa que coloque un cristal oscilador y haga la prueba, así puede saber si es el oscilador o no.
Un cordial saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything