Autor Tema: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0  (Leído 6140 veces)

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

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Hola que tal primero que nada quiero agradecer al foro que me ha ayudado mucho en la programación de pic y me ha sacado de muchas dudas.

El problema que tengo es que si logro comunicar el programa que hice en visual basic 6.0 con el pic16f877a  y  me muestra en el Lcd de 16x2 el dato. El problema es que si escribo la palabra hola en el  programa y  lo envió al pic, el lcd solo me muestra (hol) o si escribo 1234 en el textbox y lo envió al micro me sale solo (123) no se que este fallando tengo la misma velocidad en los dos como quiera adjunto el programa del micro (uso el pic basic del pic simulador ide)  y del de visual
Antemano muchas gracias y espero respuestas o sugerencias de que podría tener mal.

aqui les dejo el link del video de youtube de donde ise el programa de visual
« Última modificación: 16 de Julio de 2011, 09:05:08 por dogflu66 »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0
« Respuesta #1 en: 16 de Julio de 2011, 10:54:54 »
Hola, si, el problema que tienes es el tipico de pensar que el módulo usart del pic funciona de una forma determinada cuando en realidad funciona de otra. El modulo serie tiene 2 bytes de bufer de entrada, y si no se extraen antes que entre el tercero byte se bloquea y, deja de recibir datos hasta que se gestione el código de error que genera. Si no recuerdo mal la función del sistema hserin queda parada a la espera de recibir el byte de entrada, o más bytes si su variable de entrada es de mayor longitud, por lo que el waitms sobra en el programa que es el que bloquea el módulo.

En el índice de este hilo tienes toda la información para trabajar con el módulo usart del pic, no es para el pic que usas pero el módulo funciona igual.

http://www.todopic.com.ar/foros/index.php?topic=14917.msg186133#new

2ª Otra posibilidad es que se bloquea el puerto USART de la placa en modo Rx y por lo tanto no recibe ningún tipo de dato más. Esto sucede si la UAR recibe los datos más rápido de lo que se extraen, entonces activa el flag de error y queda bloqueada la UAR en modo Rx hasta que se desbloquee mediante una rutina especial que tenemos que implementar en nuestro programa que es activada al verificar el flag de error UAR.

PD. En el índice hay varios ejemplos relacionados con WDT y USART con su control de errores más comunes.
      WDT = Watchdog

http://www.todopic.com.ar/foros/index.php?topic=14917.680

Este código funciona en el simulador, pero que funcione en un simulador no quiere decir que funcione en la realidad.

Código: [Seleccionar]
AllDigital
Define LCD_BITS = 4
Define LCD_DREG = PORTB
Define LCD_DBIT = 4
Define LCD_RSREG = PORTB
Define LCD_RSBIT = 0
Define LCD_EREG = PORTB
Define LCD_EBIT = 2
Define LCD_RWREG = PORTB
Define LCD_RWBIT = 1
Lcdinit 2

Dim i As Byte

Hseropen 9600

inicio:

While PIR1.RCIF = 1  'Espera hasta que entren datos al bufer serie.
Hserget i  'Hserget solo puede leer un byte.
Lcdout i
Wend

Goto inicio

'Recuerda que escribir en el display es una operación muy lenta por lo
'que no se pueden utilizar velocidades muy elevadas de lectura del puerto serie.
Saludos desde Granada, España.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0
« Respuesta #2 en: 17 de Julio de 2011, 15:19:31 »
Hola que tal dogflu66 pase a darle otra leída al manual y a los links que me mandaste pero quería ver según hserin cuando lo ejecutas siempre está parado hay esperándole las ordenes y si no llegan este puede bloquearse a eso te refieres

En cambio hserget este espera los datos pero si no llegan dichos datos él lo tomo como si fuera un 0 ese dato.

Esto fue de lo que entendí con lo que mandaste y con lo que e leído peo mi duda es que en mi ejemplo tendría que cambiar hserin por haserget o cómo? disculpa mis preguntas tontas eso me pasa cuando empiezo con algo que no entiendo.

Y sobre tu ejemplo no supe como simularlo en el compilador, entre ala pagina del pic simulador oshon software y vi los ejemplos que usan de usart y más o menos entendí pero ellos solo transmiten datos del pic al puerto serial y no al revés
Espero y no lo tomes a mal por mi terquedad
Desde Tamaulipas mexica saludos.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0
« Respuesta #3 en: 17 de Julio de 2011, 16:12:32 »
Hserget es una función creada especialmente para lo que quieres hacer. Ésta función no para el programa, si no hay dato en el búfer devuelve cero. Para que esto no ocurra lo que se hace es supervisar el bit RCIF del registro PIR1, este bit o flag nos indica que hay dato en el búfer mientras RCIF = 1. Te pongo el mismo ejemplo expresado de otra manera, puede que sea más fácil de comprender.

De esta manera puedes seguir ejecutando otro código mientras esperas a recibir los datos por el puerto serie.

Código: [Seleccionar]
AllDigital
Define LCD_BITS = 4
Define LCD_DREG = PORTB
Define LCD_DBIT = 4
Define LCD_RSREG = PORTB
Define LCD_RSBIT = 0
Define LCD_EREG = PORTB
Define LCD_EBIT = 2
Define LCD_RWREG = PORTB
Define LCD_RWBIT = 1
Lcdinit 2

Dim i As Byte
Dim xy As Byte  'Controla el cursor en el LCD 2x16 caracteres.

Hseropen 9600
xy = 0
inicio:

If PIR1.RCIF = 1 Then  'Si hay datos en el búfer serie leo el primer byte.
Hserget i  'Hserget solo puede leer un byte cada vez.
Lcdout i
xy = xy + 1 'Incrementa la posición del cursor
If xy = 0 Then Lcdcmdout LcdLine1Home  'Inicio linea superior
If xy = 16 Then Lcdcmdout LcdLine2Home  'Fin de linea, incio linea inferior
If xy = 32 Then Lcdcmdout LcdLine1Home  'Fin de linea, inicio linea superior
If xy = 32 Then xy = 0 'Cursor al principio linea 1
Endif

Goto inicio

'Recuerda que escribir en el display es una operación muy lenta por lo
'que no se pueden utilizar velocidades muy elevadas de lectura del puerto serie.

Simulación:

« Última modificación: 17 de Julio de 2011, 16:51:38 por dogflu66 »
Saludos desde Granada, España.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0
« Respuesta #4 en: 17 de Julio de 2011, 18:42:50 »
Como siempre amigo Carlos  (dogflu66) tenias razón sobre lo del  programa y lo del video fue un gran detalle te lo agradezco mucho.

Pero te quería pedir un favor, he estado leyendo sobre PIR1.RCIF = 1 según entendí es como un tipo de interrupción del (usart) o algo así, le di una checada al datashet del pic y encontré una tabla pero no entiendo ni papas de esa tabla.

De antemano gracias por echarme la mano para entender mas este tipo de instrucciones, y seguiré leyendo para ahora mandar de vuelta el dato y que me aparezca en la PC.

Y espero no tener más problemas ahora con mandar datos del pic  ala PC
Saludos desde Tamaulipas mexica.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0
« Respuesta #5 en: 18 de Julio de 2011, 16:55:48 »
RCIF=1 sino están activadas las interrupciones que es el caso en el que estamos trabajando, pues solo sirve para indicar que hay datos en el búfer de la uart y por lo tanto podemos extraerlos. Sin embargo, si activamos los bit (son tres bit) correspondientes de control de las interrupciones globales, periféricos y el especifico de la uart, cuando RCIF=1 entonces el microcontrolador deja lo que esté haciendo (siempre terminará antes la instrucción maquina que haya comenzado) y salta a una parte de nuestro código prefijado por el programador para gestionar los datos del búfer de la uart. Esta rutina puede ser por ejemplo un búfer por software que añada 80bytes más al búfer de la uart para de esta forma poder trabajar con el puerto serie de una forma más cómoda y despreocupada.

Aunque hay mucha información sobre interrupciones de los pic en el foro, puede que aquí te sea más fácil comprender el funcionamiento de las interrupciones, y todos no son especificos para el modulo uart pero el funcionamiento es prácticamente el mismo.

Por ejemplo todos los proyectos sobre radio utilizan la uart

http://www.pickey.es/proyectos.html

De todas formas por si te encuentras perdido te recomiendo que leas este tema sobre el modulo convertidor analógico, puede que te aclare algo.

http://www.pickey.es/uso_practico_del_pic12f675_viii.html
« Última modificación: 18 de Julio de 2011, 16:58:52 por dogflu66 »
Saludos desde Granada, España.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0
« Respuesta #6 en: 21 de Julio de 2011, 13:04:33 »
Hola dogflu66 leí los links que me pasaste bueno el del convertidor adc el otro no cupe si te referías a los rf o a otro tipo y bueno creo que a leer este articulo adc me perdí mas  de lo que esperaba tal vez sea porque estoy muy novato en esto de los pic encontré una página que habla sobre las interrupciones del usart.

http://www.cursomicros.com/mod2/c07_14_interrupciones_usart.html

Te la adjunto por si quieres echarle una mirada, tal vez ha eso te refieras de las interrupciones espero tengas tiempo y le des una mirada ,deja lo termino de leer y haber si entiendo algo de lo que explican ya que no me puedo basarme a los ejemplos que postean ya que no entiendo mucho por que usan otro tipo de lenguaje y algunas cosas que no ce.
A otra cosa que te quería pregunta es que el programa que me ayudaste a hacer bueno que insiste tu en el simulador de pic simulador si funciona bien al escribir todo las letras que quiera pero al pasarlo al pic solo puedo escribir como 18 letras con espacios a que ce debe eso a lo que me avías dicho que al no extraer los datos del búfer se me bloquea el usart del pic y no recibe más datos.

Antemano te agradezco el tiempo que me has dedicado y ejemplos y demás cosas que me has pasado para tratar de entender estos módulos del pic.
saludos

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Ayuda con comunicacion serial de pc a pic usando un max232 y visual basic 6.0
« Respuesta #7 en: 24 de Julio de 2011, 17:26:12 »
Antes de nada te recomiendo que le des una leída al datasheets del micro en cuestión sobre el módulo uart, aunque no se entienda todo suele ser bastante interesante y resuelve dudas.

De todas maneras recuerda que toda la información que hay en internet es extraida de los datasheet, no hay mejor información que la del fabricante de los microcontroladores.
Saludos desde Granada, España.


 

anything