Hola a todos,
He comunicado dos PIC's por cable usando el protocolo RS232 y una vez he comprobado que funcionaba he pasado a los módulos de RF de la marca Telecontrolli.
Cuando envío un byte del emisor al receptor, este último lo recibe perfectamente, activando así una salida del mismo.
Pero de ahí me surgen varios problemas.
Uno de ellos es que cuando el emisor no tiene corriente, al receptor le entra mucho ruido y cuando le entra el byte que espera para activar la salida, hace eso precisamente, la activa aún cuando el emisor, como he dicho, está apagado y no le ha enviado nada.
Por ejemplo, programo el receptor para que cuando reciba el byte 7F active su salida RB0.
Si el emisor está encendido y no le envío nada aún, no activa RB0.
Si el emisor está encendido y le envío 7F activa RB0.
PROBLEMA: El emisor está apagado y mirando con el osciloscopio en la entrada del PIC receptor hay un montón de ruido, por lo que en algún momento le llega 7F y acaba activando RB0.
Debo decir también que cuando el emisor está encendido, aunque no envíe nada, mirando con el osciloscopio en la entrada del PIC receptor no hay nada de ruido, se mantiene a cero.
La posible solución que he pensado ha sido enviarle más de un byte, a modo de clave, y he hecho lo siguiente:
EN EL EMISOR:
;---------------------------------------------------------------------------------------------------
Envia_Clave
movlw 0x01
call RS232_EnviaDato
call Retardo_1s ;Pausa de 1 seg. para poder ver señales
;en el osciloscopio
movlw 0x02
call RS232_EnviaDato
call Retardo_1s
movlw 0x07
call RS232_EnviaDato
call Retardo_1s
movlw 0x06
call RS232_EnviaDato
call Retardo_1s
fin goto fin
;---------------------------------------------------------------------------------------------------
EN EL RECEPTOR:
;---------------------------------------------------------------------------------------------------
Lee_Clave
call RS232_LeeDato
sublw 0x01
btfss STATUS,Z
goto Principal
call RS232_LeeDato
sublw 0x02
btfss STATUS,Z
goto Principal
call RS232_LeeDato
sublw 0x07
btfss STATUS,Z
goto Principal
call RS232_LeeDato
sublw 0x06
btfss STATUS,Z
goto Principal
bsf PORTB,0
fin goto fin
;---------------------------------------------------------------------------------------------------
Lo más curioso es que cuando lo hago comunicando los dos PIC's mediante un cable, funciona!!!
Pero cuando quito el cable y lo hago por RF no...
Vuelvo a mirar con el osciloscopio por si entra algún dato en medio de la trama que envío pero no entra nada.....
Alguien se ha encontrado con algún problema parecido y puede ayudarme a solucionarlo???
Muchas gracias a tod@s!!!
He comunicado dos PIC's por cable usando el protocolo RS232 y una vez he comprobado que funcionaba he pasado a los módulos de RF de la marca Telecontrolli.
Cuando envío un byte del emisor al receptor, este último lo recibe perfectamente, activando así una salida del mismo.
Pero de ahí me surgen varios problemas.
Uno de ellos es que cuando el emisor no tiene corriente, al receptor le entra mucho ruido y cuando le entra el byte que espera para activar la salida, hace eso precisamente, la activa aún cuando el emisor, como he dicho, está apagado y no le ha enviado nada.
Por ejemplo, programo el receptor para que cuando reciba el byte 7F active su salida RB0.
Si el emisor está encendido y no le envío nada aún, no activa RB0.
Si el emisor está encendido y le envío 7F activa RB0.
PROBLEMA: El emisor está apagado y mirando con el osciloscopio en la entrada del PIC receptor hay un montón de ruido, por lo que en algún momento le llega 7F y acaba activando RB0.
Debo decir también que cuando el emisor está encendido, aunque no envíe nada, mirando con el osciloscopio en la entrada del PIC receptor no hay nada de ruido, se mantiene a cero.
La posible solución que he pensado ha sido enviarle más de un byte, a modo de clave, y he hecho lo siguiente:
EN EL EMISOR:
;---------------------------------------------------------------------------------------------------
Envia_Clave
movlw 0x01
call RS232_EnviaDato
call Retardo_1s ;Pausa de 1 seg. para poder ver señales
;en el osciloscopio
movlw 0x02
call RS232_EnviaDato
call Retardo_1s
movlw 0x07
call RS232_EnviaDato
call Retardo_1s
movlw 0x06
call RS232_EnviaDato
call Retardo_1s
fin goto fin
;---------------------------------------------------------------------------------------------------
EN EL RECEPTOR:
;---------------------------------------------------------------------------------------------------
Lee_Clave
call RS232_LeeDato
sublw 0x01
btfss STATUS,Z
goto Principal
call RS232_LeeDato
sublw 0x02
btfss STATUS,Z
goto Principal
call RS232_LeeDato
sublw 0x07
btfss STATUS,Z
goto Principal
call RS232_LeeDato
sublw 0x06
btfss STATUS,Z
goto Principal
bsf PORTB,0
fin goto fin
;---------------------------------------------------------------------------------------------------
Lo más curioso es que cuando lo hago comunicando los dos PIC's mediante un cable, funciona!!!
Pero cuando quito el cable y lo hago por RF no...
Vuelvo a mirar con el osciloscopio por si entra algún dato en medio de la trama que envío pero no entra nada.....
Alguien se ha encontrado con algún problema parecido y puede ayudarme a solucionarlo???
Muchas gracias a tod@s!!!