Autor Tema: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232  (Leído 3381 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado mblotta

  • PIC10
  • *
  • Mensajes: 12
    • BVF Electrónica y Comunicaciones
Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« en: 06 de Noviembre de 2006, 16:29:41 »
Hola a todos ! !   he estado trabajando ya hace un tiempo en un proyecto bastante complejo y hace ya casi una semana que estoy peleando con lo mismo. Les planteo la situación para que se orienten.

Tengo una PC conectada por medio de un Max232 a los canales RX y TX de uno de los 16f876A lo cual anda de 10 !
Por el otro lado tengo un Modem GSM conectado por los mismos puertos al otro 16f876A que tambien anda de 10 ! !

Ahora viene el problema:

He tratado de comunicarme entre los pics con 2 puertos cruzados de rx y tx o sea   RXPIC1 - TXPIC2  y TXPIC1 - RXPIC2 usando la funcion

Serin2 rx2,32,1000,nopic,[WAIT("^a"),dato,WAIT("&")]    ' esta en el PIC que recibe datos
 
serout2 tx2,32,["^a2&"]        'Esta en el lado que manda datos

teoricamente en la variable dato debería guardarse "2" o si no llega nada en 1000 mS debería ejecutar la subfunción nopic pero pareciera que no recibe nada o que se pierde en la funcion nopic. Es muy raro ya que si cambio los puertos para que se comuniquen los pics a los RX y TX que traen predefinidos ese micro anda de 10 pero si uso cualquier otro puerto no anda del todo bien.

Puede ser posible que solo se pueden usar esos 2 pines para la comunicación serial ?

Espero que me puedan ayudar. Muchas Gracias

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #1 en: 06 de Noviembre de 2006, 18:54:27 »
esta raro, primero si vas a comunicar 2 pics no necestas los max232 aunque para tu pc si los debes de usar, serin2 sigue siendo por software asi que no deberia haber ningun problema con respecto al cambio de los pines.

Puedes poner algun diagrama de como conectas todo, para saber donde puede estar el fallo.
"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 mblotta

  • PIC10
  • *
  • Mensajes: 12
    • BVF Electrónica y Comunicaciones
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #2 en: 07 de Noviembre de 2006, 12:22:47 »
Les adjunto el esquemático para que se hagan una idea.  navaismo No uso los max para comunicarme entre PIC eso lo hago directamente con serin2 y serout2 pin a pin cruzando el tx con el rx y viceversa. Los max los uso para salir a los puertos rs232 de la pc y del modem.  Mi problema radica en que se cuelga mal el pic cuando entra al serin2. estoy usando el serin2 de la siguiente manera:

Serin2 rx1,32,3000,nada,[WAIT("GL: "),dec1 smsn]

Donde nada es la funcion que debe ejecutar cuando pasan 3 segundos sin recibir los datos.

 :shock: A los pines de comunicacion serial hay que ponerles algun tipo de pullup o pulldown ???  :shock:

Bueno. Muchas gracias por todo.

Salu2  :)

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #3 en: 07 de Noviembre de 2006, 13:21:24 »
No no necesitan ninguna resistencia de pulldown ni pullup, haber intenta quitando tu rutina de nada y el tiempo de 3 segundos. haber si el problema viene de ahi....Porque por lo demas no veo nada raro o bien intenta con SERIN haber si responde igual.
"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 elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #4 en: 07 de Noviembre de 2006, 16:15:28 »
Que tal,

Hace algun tiempo tuve el mismo problema con el serin2 o hserin cuando intentaba recibir una serie de datos, tal como la describes. Y encontre que sucedia la siguiente. Cuando usas la sein2 rx,32,3000,nada,[wait("GL")], teoricamante la instruccion debe esperar a recibir los caracteres G y L en un lapso de timepo de 3 segundos, pero si no reibe ningun dato debe ir a la etiqueta nada. Y efectivamante lo hace, pero el problema es: que pasa si se reciben datos cuales quieres que sean, es decir datos completamente diferentes a los caracteres esperados, es decir la funcion ya ha detectado la recepcion de datos y comienza a compararlos, pero como nunca son GL entonces la funcion se queda ahi "colgada", esperando dichos caracteres y el tiempo de 3 segundos ya no corre. Lo que hice fue implementar el uso del WDT y si se queda colgado el WDT reiniciara el codigo, yo lo use con un PIC18F4620 que tiene un periodo de WDT mas amplio. En tu caso que estas usando un PIC16, tal vez esto no funcione a menos que el dato llegue en menos de 2.3 segundos que es el periodo maximo para el WDT. Otra cosa que puedes ahacer es usar el UART interno para esto y reasignar los pines y asi esperar a que llegue un dato y tu compararlo con el que esperas pero esto calr tendrias que ser "a pie" le digo yo. Algo asi como.

1. Inicializas un timer
2. Ha llegado dato?
3. No, entonces pregunta si ya se termino el tiempo de espera en el timer?
3a.                    No, entonces ve a 2 a preguntar por el dato
3b.                   Si, entonces ve a etiqueta "nada"
4. Si, el dato recibido es una "G"?
4a.               Si, entonces fin
4b.               No, entonces ve a 1.

Espero esto te sirva y te ayude a resolver el problema.

Desconectado mblotta

  • PIC10
  • *
  • Mensajes: 12
    • BVF Electrónica y Comunicaciones
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #5 en: 07 de Noviembre de 2006, 16:52:12 »
Muchas gracias !  ya veo que no soy el único que le ha pasado eso. jejeje

El único problema es que no se como implementar los timer que me dices elreypic2. Es totalmente comprensivo lo que me dices. Incluso me parece que es cuando recibe una pequeña basurita que detecta como informacion y se queda esperando algo que jamás va a llegar.

Me podrías citar un ejemplito para usar los timers o el WDT en este problema ? La verdad que estoy out en ese tema.

Muchas Gracias por su tiempo amigos ! !    :lol:

Desconectado mblotta

  • PIC10
  • *
  • Mensajes: 12
    • BVF Electrónica y Comunicaciones
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #6 en: 07 de Noviembre de 2006, 16:58:24 »
Navaisimo he intentado de todo y entre esas he sacado el timout y la función pero como es de esperar se queda esperando a que llegue lo que le pongo en wait y lo demás y no me puedo dar ese lujo. Lo que probé y me pareció raro es dejarlo que se trabe y enviarle luego de un rato los datos que necesita y no los toma y sigue trabadisimo. Es como si se colgara mal. Voy a ver si me dan una manito con la sugerencia de "elreypic" para ver si lo soluciono por ese lado. Mientras sigo leyendo todo lo que pueda.   :mrgreen:

Salu2

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #7 en: 08 de Noviembre de 2006, 12:58:58 »
Que tal, estuve pensando una forma teoricamente mas simple pero de igual manera pudiera servir y resolver tu problema. Lo que tendras que hacer es realizar unacamente la comparacion "a pie" y sigas utilizando la instruccion serin2 como hasta ahora la usas. Seria algo asi:

RECIBE:    SERIN2    RX2,32,3000,NADA,[DATO]
                  IF DATO <> "G' THEN RECIBE
RECIBE2:  SERIN2    RX2,32,3000,NADA,[DATO]
                  IF  DATO <> "L" THEN RECIBE2

Teoricamente deberia funcionar ya que aqui no se debera quedar colgado esperando un dato en especifico, sino mas bien esperara un dato en un lapso de 3 segundos y si llegara este cualquierea que sea entonces lo asignara a la variable dato y luego preguntas si el dato recibido es una G o el valor que esperas recibir. Aqui lo interesante es que si continuas recibiendo datos se redibiran y continuareas comparandolos, pero si ya no recibes nada en un lapso de 3 segundo tendra que ir a NADA. Pareciera que esto hace lo mismo pero no es asi.
Como te mendionaba con el timer es posible solamente si utilizaras la transmision serial via el USART que contiene el micro, pero ya lo estas usando para la comunicacion con el modem o la PC para cada uno de microcontroladores.

Espero con esto darte una solucion a tu problema, de igual manera si gustas contactarme via e-mail con gusto te ayudare a uscar la solucion, y ya cunado este lista publicarla en el foro para que si alguien le pase esto sepa que hacer. Mi correo es: elreypic@hotmail.com

Saludos y suerte.

Desconectado mblotta

  • PIC10
  • *
  • Mensajes: 12
    • BVF Electrónica y Comunicaciones
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #8 en: 08 de Noviembre de 2006, 15:20:00 »
Holis   ---  Estuve probando y me hace lo mismo. Nunca sale del serin2. Me he dado cuenta de una cosita y que puede ser la punta del hilo para solucionar el problema. Cuando hago serin2 de esta forma:

destino2 = 1
Serin2 rx1,32,[destino2]
write 0,destino2

y luego miro la eeprom me doy cuenta que destino2 tiene un 0 lo que significa que el serin2 recibió un 0 apenas empezó. Ese 0 es el que hace empiece a recibir los datos para las variables y espere de por vida aunque no lleguen los datos.

Saben alguna forma de no recibir ese 0 al comienzo para que no considere el serin2 el comienzo de una comunicacion serial ?

Gracias por todo

Salu2   :?

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #9 en: 08 de Noviembre de 2006, 16:44:31 »
hola

una forma que podias probar es utilizar el serin y el serout que son mas sencillos y te podrian dar una indicacion mas clara de lo que sucede.
que te muestre un cero la eprom me huele a  que el tipo de datos enviado no se corresponde con el tipo de datos esperado.
yo probaria algo como serout portx.x,n2400,[$FF,$FF,"OK","A"] sustituyendo las x por los puertos y pines adecuados (no tengo el esquema delante) y las $FF son una manera de decirle al receptor ¡eh despierta que te voy a enviar datos! y serin portx.x,n2400,["OK"],datos y a ver que pasa

un saludo

Desconectado Jose_Miramontes

  • PIC10
  • *
  • Mensajes: 10
Re: Comunicacion entre 2 PIC 16f876a y 2 dispositivos RS232
« Respuesta #10 en: 21 de Febrero de 2007, 19:08:55 »
tengo un problema similar estoy utilizando dos hserin con wait seguidos de la siguiente manera:
PARAA:         
            HSERIN 500,PARAB,[WAIT("A")]
            HSERIN [HEX4 TREL1]
            HSERIN [WAIT(",")]
            HSERIN [HEX4 TREL2]
            HSERIN [WAIT(",")]
            HSERIN [HEX4 TREL3]
            WRITE 0,TREL1
            WRITE 1,TREL2
            WRITE 2,TREL3
           
            HSEROUT ["@",10]
           PAUSE 200
           HSEROUT ["@",10]
           PAUSE 200
           HSEROUT ["@",10]
         
            GOTO CARGA
           
PARAB:     
            HSERIN 500,NORMAL,[WAIT("B")]
            HSERIN [HEX4 TREL1]
            HSERIN [WAIT(",")]
            HSERIN [HEX4 TREL2]
            HSERIN [WAIT(",")]
            HSERIN [HEX4 TREL3]
            WRITE 3,TREL1
            WRITE 4,TREL2
            WRITE 5,TREL3
           HSEROUT ["@",10]
           PAUSE 200
           HSEROUT ["@",10]
           PAUSE 200
           HSEROUT ["@",10]
            GOTO CARGA
el segundo hserin no funciona el primero no da problemas alguna sugerencia?


 

anything