Autor Tema: Comunicacion serial entre 4 pic  (Leído 3084 veces)

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

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Comunicacion serial entre 4 pic
« en: 05 de Octubre de 2016, 05:05:16 »
Buenas, estoy intentando comunicar 4 pic 16F877a por serial, la idea es el 1° recibe el dato desde la PC lo interpreta y si no es para el lo retransmite al 2°, este lo analiza y si no es para el lo retransmite al 3°, este lo analiza y si no es para el lo retransmite al 4°, el problema que tengo es que luego de pasar por el 1° pic los datos del 2° en adelante aveces llegan y otras no, llegando basura, ya chequee cada codigo individualmente con el pic en una placa de prueba y retransmite los datos correctamente, pero cuando los pongo en cadena no funciona.
 Es decir si coloco el 1° pic con cualquiera de los otros anda,



 pero si le agrego otro ya no funciona se pierden los datos.



este es el codigo de retransmicion del 1° pic, quisiera saber si esta bien hecho o no

Código: [Seleccionar]
interrup
      btfss   PIR1,RCIF   ;Ha sido interrupción en la recepción ??
      retfie                      ;No, falsa interrupción
      bcf     PIR1,RCIF           ;Si, restaurar el flag de interrupción
      call    recibeRS232         ; sí, hay
      movwf   dato_serie          ; guarda dato (para uso de cualquier rutina)
      goto    testeanumero   ; llama rutina para testear clave
     
;***********************************************************************************
; CHEQUEA QUE PIC ES
;***********************************************************************************

testeanumero
           
        movf dato_serie,w         ; Guarda el contenido de la tecla pulsada.
        xorlw digito_1            ; ¿Es el pic 1?
        btfsc STATUS,Z
        goto pic_1               ; Sí, se procede a chequear el puerto

        movf dato_serie,W     ; Recupera el contenido de la tecla pulsada.
        xorlw digito_2            ; ¿Es el pic 2?
        btfsc STATUS,Z
        goto pic_2               ; Sí, se reemvian datos al pic 2

        movf dato_serie,W     ; Recupera el contenido de la tecla pulsada.
        xorlw digito_3            ; ¿Es es el pic 3?
        btfsc STATUS,Z
        goto pic_2               ; Sí, se reemvian datos al pic 3

        movf dato_serie,W     ; Recupera el contenido de la tecla pulsada.
        xorlw digito_4            ; ¿Es tecla del movimiento hacia la derecha?
        btfsc STATUS,Z
        goto pic_2               ; Sí, se reemvian datos al pic 4
        retfie

retransmicion, la cadena que recibe y retransmite es de 4 digitos por ej. 2A0Q

Código: [Seleccionar]
pic_2
movf dato_serie,W     ; Recupera el contenido de la tecla pulsada
call     enviaRS232         ; Lo retransmite a modo de eco
movf RCREG,W            ; Borra el buffer
ler1    btfss PIR1,RCIF          ; (5) se fija si hay dato RS232
    goto ler1               ; no, no llegó
    call recibeRS232     ; sí, hay
        movwf    dato_serie         ; Guarda el contenido de la tecla pulsada.
call     enviaRS232         ; Lo retransmite a modo de eco
movf RCREG,W            ; Borra el buffer
ler2    btfss PIR1,RCIF          ; (5) se fija si hay dato RS232
    goto ler2               ; no, no llegó
    call recibeRS232     ; sí, hay
        movwf    dato_serie         ; Guarda el contenido de la tecla pulsada.
call     enviaRS232         ; Lo retransmite a modo de eco
movf RCREG,W            ; Borra el buffer
ler3    btfss PIR1,RCIF          ; (5) se fija si hay dato RS232
    goto ler3               ; no, no llegó
    call recibeRS232     ; sí, hay
        movwf    dato_serie         ; Guarda el contenido de la tecla pulsada.
call     enviaRS232         ; Lo retransmite a modo de eco
retfie

y lo mismo para el resto de los pic, la velocidad de transmicion es de 9600 8 bits sin paridad.

Gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicacion serial entre 4 pic
« Respuesta #1 en: 05 de Octubre de 2016, 08:36:00 »
De aca veo ya que a la interrupcion le faltan instrucciones que son las de guardar y luego volver los datos a STATUS, W (y PCLATH si usas).

Mirando el codigo, no se que es recibeRS232. Tampoco por que limpias el flag de esa manera, el flag se limpia solo al quitar el dato de RCREG. El GOTO al final de interrupt no tiene sentido si esta ubicado como lo tenes.

Me parece a mi, o solo verificas un caracter y luego si no corresponde lo envias?, es decir solo estas verificando 1 solo. Y no un comienzo de trama.
Por que preguntas por cada PIC?, todos los PICs deberian tener el mismo codigo. No es del PIC? listo, se va, no le interesa si es del 3ro o 4to. Al menos por lo que comentas.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re:Comunicacion serial entre 4 pic
« Respuesta #2 en: 05 de Octubre de 2016, 09:27:15 »
Hola, yo no pondría los PIC a retransmitir, el TX del PC lo llevaría simultáneamente a los 4 PIC y el PC envía una dirección correspondiente al PIC que le quiera transmitir, como funciona un I2C.

Saludos

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:Comunicacion serial entre 4 pic
« Respuesta #3 en: 05 de Octubre de 2016, 13:54:01 »

Citar

De aca veo ya que a la interrupcion le faltan instrucciones que son las de guardar y luego volver los datos a STATUS, W (y PCLATH si usas).

El GOTO al final de interrupt no tiene sentido si esta ubicado como lo tenes.

Mirando el codigo, no se que es recibeRS232

Solo coloque un fragmento del codigo, a lo que haces mencion si esta hecho en otro lado.

Citar

Tampoco por que limpias el flag de esa manera, el flag se limpia solo al quitar el dato de RCREG.

cual seria la manera correcta?

Citar

Me parece a mi, o solo verificas un caracter y luego si no corresponde lo envias?, es decir solo estas verificando 1 solo. Y no un comienzo de trama.
Por que preguntas por cada PIC?, todos los PICs deberian tener el mismo codigo. No es del PIC? listo, se va, no le interesa si es del 3ro o 4to. Al menos por lo que comentas.

si tenes razón lo voy a modificar.

Killer, me queda la duda si para retransmitir se puede hacer de otra manera, tal vez una en donde se envie el dato de una sola vez y no como yo lo hago chequeando caracter por caracter.

Saludos
« Última modificación: 05 de Octubre de 2016, 13:56:12 por kapotik »

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:Comunicacion serial entre 4 pic
« Respuesta #4 en: 05 de Octubre de 2016, 13:58:42 »
Hola, yo no pondría los PIC a retransmitir, el TX del PC lo llevaría simultáneamente a los 4 PIC y el PC envía una dirección correspondiente al PIC que le quiera transmitir, como funciona un I2C.

Saludos

simplemente uno todos lo RX de los PIC? o hay que hacerlo mediante alguna circuiteria?

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicacion serial entre 4 pic
« Respuesta #5 en: 05 de Octubre de 2016, 14:50:27 »
Citar
Solo coloque un fragmento del codigo, a lo que haces mencion si esta hecho en otro lado.

A lo que hago mencion sobre que falta lo de guardar W y STATUS y luego volverlo a su lugar al momento de salir no esta aplicado. Puedo verlo facilmente al ver RETFIE dentro de tu codigo, donde saldria directamente y no recuperarias W y STATUS.

Pienso tambien que lo que dijo Diego es lo correcto si solo pensas recibir desde los PICs

Desconectado kapotik

  • PIC16
  • ***
  • Mensajes: 121
Re:Comunicacion serial entre 4 pic
« Respuesta #6 en: 05 de Octubre de 2016, 14:59:06 »
Citar
Pienso tambien que lo que dijo Diego es lo correcto si solo pensas recibir desde los PICs

como lo implemento electronicamente

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicacion serial entre 4 pic
« Respuesta #7 en: 05 de Octubre de 2016, 15:18:48 »
La salida TTL conectala a los demas PICs, empeza probando con 2, luego con 3, y si no le da a la salida del conversor RS232-TTL entonces imagino que deberas poner un buffer. Pero no creo que tengas problema en una placa asi. Deberias poder conectarlas directamente, acordate que las entradas son una alta impedancia, lo que mas puede perjudicar es la capacidad de las mismas y que tambien va a depender de la velocidad que se envie, pero eso para cuando la salida ya no pueda manejarlas.