Hola,
Hace un tiempo me encontre con la necesidad de intercomunicar distintas placas de equipos que diseñe en distintas epocas y con distintos microcontroladores, claro que estas placas no estaban previstas para dicho fin, la mayoria no tiene ni RS232 y los pines del I2C estan usados para otras funciones.
Lo unico que encontre en comun en todas las placas fue un conector de 4 pines donde tengo +5V,GND y dos pines directo del pic (estos conectores suelo ponerlos para dejar acceso a los pines que me sobran, para futuras aplicaciones).
Por esto es que decidi "embeber" algun tipo de comunicacion serie bidireccional por dos pines, pero despues de ver algunos estandar, no me convencio ninguno por motivos de no querer agregar interrupciones de soft en algunas placas o tener que gastar muchos recursos del pic para atender esta comunicacion.
Aprovechando que no necesito mucha transferencia de datos entre placas, apunte a que la comunicacion pueda ser lo suficientemente versatil para agregarla a todos los pic (diferentes modelos y familias usando las mismas rutinas) y que se pueda iniciar la comunicacion o recibir un dato por "pulling", o desatender el puerto por intervalos largos de tiempo sin perder datos.
En definitiva, arme un sistema de comunicacion con estas caracteristicas que me funciono muy bien y ahora voy a detallarlo con la intencion de que si alguien lo conoce o conoce alguno similar me avise, ya que es muy probable que haya perdido el tiempo
haciendo algo que ya existe!!El tema es asi, los cables necesarios son GND, una linea llamada SCL (para que suene familiar) y otra llamada SDA (tambien muy conocida).
Ambas lineas estan conectadas al positivo por una resistencia de pull-up en una o ambas placas.
En standby SDA y SCL estan en 5V.
Si el Pic_1 quiere enviar un dato, pone en bajo SCL y espera la respuesta del Pic_2.
La respuesta del pic_2 consiste en poner en bajo SDA antes de un tiempo maximo de espera (yo estoy usando 500ms para que pic_2 no tenga que apurarse en contestar y desatender lo que esta haciendo).
La respuesta de pic_2 dura 100uSeg en bajo y despues libera SDA (se pone en alto).
En este momento Pic_1 pone el primer Bit de dato en SDA y 50uSeg despues pone en alto el SCL para que pic_2 lea el valor de SDA.
50uSeg despues pic_1 pone en bajo SCL, pone el bit 2 en SDA y repite el paso anterior.
Despues de pasar 8 bits, SCL queda en alto, por lo tanto si inmediatamente se inicia la comunicacion de un nuevo BYTE, esta es "enganchada" inmediatamente por pic_2.
De esta forma tenemos que la comunicacion puede tardar hasta 500ms para iniciarse, este es un tiempo maximo antes de cancelar, lo normal es que la comunicacion se inicie rapido (depende del tiempo del loop en caso de usar pooling o inmediatamente si se usan interrupciones). A partir del segundo BYTE del paquete enviado, al estar ya enganchados los pic, cada byte tarda 900uSeg, por lo que tenemos mas de 1000 BYTES por segundo que para muchos casos es mas que suficiente.
Todos los tiempos se pueden modificar, logrando velocidades muchisimo mas altas, pero perdiendo flexibilidad en la interaccion con equipos ya diseñados, perdiendo longitud en los cables de interconexion, etc.
Para transmitir desde pic_2 a pic_1 es exactamente igual, pero pic_2 inicia la comunicacion.
Se pueden "colgar" del mismo bus de datos muchos pics simultaneamente.
Vuelvo a repetir,
si ya existe algo identico a esto y tiene nombre me gustaria saberlo, por el momento lo sigo llamando "El protocolo SOM".
Saludos y gracias.