Problema con USART en PIC16F628A PicBasic

Saludos, estoy tratando de comunicarme por RF usando el USART del 16f628 y tengo problemas, espero que me puedan ayudar. El asunto es que cuando envío el dato, el recepctir funciona pero, !UNA SOLA VEZ!, tengo que desenergizar todo el receptor para ue nuevamente responda. He hecho varios cambios pero no logro encontrar dónde esta la falla. Espero sus colaboraciones. Gracias.
para el transmisor:
Código:
define osc 4
;@ device xt_osc ; oscilador externo XT 
@ DEVICE PIC16F628A, WDT_OFF 
@ DEVICE PIC16F628A, PWRT_OFF
@ DEVICE PIC16F628A, BOD_OFF 
@ DEVICE PIC16F628A, PROTECT_OFF 
@ DEVICE PIC16F628A, CPD_OFF
@ DEVICE pic16f628A, LVP_OFF 
@ DEVICE PIC16F628A, MCLR_OFF
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT 
;=====Configuración del USART
RX VAR PORTB.1 : TRISB.1=1 ;Rx
TX VAR PORTB.2 : TRISB.2=0 ;Tx
DEFINE HSER_RCSTA 90H
DEFINE HSER_TXSTA 24H
DEFINE HSER_BAUD 2400
DEFINE HSER_SPBRG 103 ;4Mhz/(2400*16)-1=103
;============================
botonA var portb.0
trisb.0=1
transmitir:
if botonA=0 then envio1
goto transmitir
envio1:
;pause 50
Hserout ["A"]
pause 500
goto transmitir
end
Para el receptor:
Código:
define osc 4
;@ device xt_osc ; oscilador externo XT 
@ DEVICE PIC16F628A, WDT_OFF 
@ DEVICE PIC16F628A, PWRT_OFF
@ DEVICE PIC16F628A, BOD_OFF 
@ DEVICE PIC16F628A, PROTECT_OFF 
@ DEVICE PIC16F628A, CPD_OFF
@ DEVICE pic16f628A, LVP_OFF 
@ DEVICE PIC16F628A, MCLR_OFF
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT
;=====Configuración del USART
RX VAR PORTB.1 : TRISB.1=1 ;Rx
TX VAR PORTB.2 : TRISB.2=0 ;Tx
DEFINE HSER_RCSTA 90H
DEFINE HSER_TXSTA 24H
DEFINE HSER_BAUD 2400
DEFINE HSER_SPBRG 103 ;4Mhz/(2400*16)-1=103
;============================ 
portb.0=0
ledR var portb.0

datos var byte
high portB.7
pause 300
low portB.7

recibir:
;high ledR
Hserin [datos]
if datos="A" then high ledR : pause 500
low ledR
; pause 500
goto recibir
end
Terminator.
 
Última edición por un moderador:
Saludos, estoy tratando de comunicarme por RF usando el USART del 16f628 y tengo problemas, espero que me puedan ayudar. El asunto es que cuando envío el dato, el recepctir funciona pero, !UNA SOLA VEZ!, tengo que desenergizar todo el receptor para ue nuevamente responda. He hecho varios cambios pero no logro encontrar dónde esta la falla. Espero sus colaboraciones. Gracias.
Saludos terminator.
El uso de retardos en la comunicación hace que se desincronice, y puede llegar a provocar fallos.
Adjunto un ejemplo de comunicación usando el módulo USART a 2400bps.
En el ejemplo se muestra como el receptor al recibir el dato, reenvía una confirmación.

PD. El sistema está probado.

Espero te sirva.

Suerte.
 

Adjuntos

  • RX_TX.rar
    17.1 KB · Visitas: 55
Saludos terminator.
El uso de retardos en la comunicación hace que se desincronice, y puede llegar a provocar fallos.
Adjunto un ejemplo de comunicación usando el módulo USART a 2400bps.
En el ejemplo se muestra como el receptor al recibir el dato, reenvía una confirmación.

PD. El sistema está probado.

Espero te sirva.

Suerte.
Hola D@rkbytes, estoy muy agradecido por tu invalorable ayuda. Mañana a primera hora lo pruebo, (ahora estoy en mi chamba). Te comentaré los resultados.

Terminator
 
Saludos terminator.
El uso de retardos en la comunicación hace que se desincronice, y puede llegar a provocar fallos.
Adjunto un ejemplo de comunicación usando el módulo USART a 2400bps.
En el ejemplo se muestra como el receptor al recibir el dato, reenvía una confirmación.

PD. El sistema está probado.

Espero te sirva.

Suerte.

Hola amigo D@rkbytes, te agradezco muchísimo el ejemplo que me has enviado. Funciona muy bien, ahora me queda analizarlo bien y tratar de entenderlo, para asi ampliar mis conocimientos. Hoy en la mañana lo probé y con mucha alegría lo ví funcionar. Te comento como anécdota que me deseperaba por que no se encendía el led de respuesta del dato recibido y finalmente me dí cuenta que esta respuesta nunca iba a llegar por que sólo he implementado la transmisión en un sólo sentido!!!.jajaja, bueno, asi se aprende. Gracias nuevamente.
 
Saludos terminator.
El uso de retardos en la comunicación hace que se desincronice, y puede llegar a provocar fallos.
Adjunto un ejemplo de comunicación usando el módulo USART a 2400bps.
En el ejemplo se muestra como el receptor al recibir el dato, reenvía una confirmación.

PD. El sistema está probado.

Espero te sirva.

Suerte.

Hola amigo D@rkbytes, he implemenatdo el proyecto que generosamente me enviaste y todo funciona bien. Peor hay un detalle que aún no lo puedo corregir. Y es que me di cuenta que cuando desenergizé el lado transmisor (por que uso dos fuentes) el receptor se lanzó; es decir, se activo el led comlo si yo hubiera activado el lado tx. Al principio no le di importancia por que siempre lo hacia asi cuando apagaba las fuentes terminando mi trabajo, pero cuando ya lo utilizaba en "caliente", o sea en el campo. cuando desconectaba la batería del tx !se activa el receptor!. Y como este proyecto lo quiero para justamente para activar un relé, entonces al momento de apagar el tx se lanzaba el relé. Muchas gracias por tu apoyo.

Terminator.
 
cuando desconectaba la batería del tx !se activa el receptor!.
Saludos.
Prueba cambiando el fuse BOD_OFF por BOD_ON en el transmisor, y nos comentas.
Esta acción generara un reset por bajo voltaje de alimentación en el PIC.

Otra opción sería implementando un filtro por software en el receptor...

HSERIN 100,NoDatos,[wait("$"),Datos]

En donde se espera primero recibir el símbolo $
Y lo que llegue después de $, será el dato a validar.

Suerte.
 
Hola D@rkbytes, te comento con pena que no me sale. Con el BOD_ON sigue igual. Con el "wait" no se enciende nada. Pero seguire intentando. Gracias.
Terminator.
 
Atrás
Arriba