UART/USART multiprocesador

Cuando trabajamos con microcontroladores (aún con los mas sencillos) es común que tengan, entre los periféricos incorporados, una UART o USART. Esto hace posible que nuestro procesador se comunique con otro. Pero, ¿que pasa si queremos comunicar varios procesadores?

Bueno, hace algunos años estábamos muy involucrados en los concursos de robótica. Ahí hacíamos proyectos que a veces requerían dividir el trabajo en varios microcontroladores. Y comúnmente necesitábamos muchos procesadores de baja gama para tareas pequeñas como: controles PID, monitoreo de sensores, control de actuadores temporizados, etc. Esto era para poder tener un procesador principal al que pudiéramos dejarle la carga de los cálculos complejos y que estos mismos no entorpecieran las tareas pequeñas, o bien que las tareas pequeñas no hicieran que los cálculos se volvieran lentos.

Generalmente si uno requiere conexión entre múltiples procesadores, piensas en hacerlo a través de spi ó i2c. Pero este tipo de periféricos no se encuentran en procesadores de gama baja, y bueno, si pensábamos en cambiar de procesadores por algunos con más periféricos, el costo de nuestros robots si disparaba a las nubes. Así que nos preguntamos ¿como hacemos para que la UART sea comunicación multiprocesador? Entre las respuestas que surgieron estaba con un chip de RF, pero también encarecía el proyecto (y mucho); también estaba usar RS485, pero no es nada practico cuando la comunicación se realiza con procesadores que se encuentran a distancias cortas en la misma tarjeta. Por lo tanto, decidimos que lo mejor era modificar de alguna manera la UART con el menor número de elementos posible. Así surgieron dos cosas: el PCP v1.0 (un protocolo de comunicación para nuestros proyectos de robótica, que no incluiré por el momento) y el siguiente circuito:

 
Como se puede ver, no se necesita mas que un par de transistores, que pueden ser npn de uso general (tipo bc547, 2n2222, incluso cambiar a mosfet canal n tipo 2n7000). Las resistencias R1 y R2 no son de valores críticos, R1 puede ir de 100 a 1000 ohms, R2 puede ser de 4.7kohm a 10kohm. La resistencia Rw es común a todos los elementos de comunicación, al estilo de i2c. El valor no es critico, pero recomendaría entre 4.7kohm y 10 kohm. Si necesitan comunicaciones de alta velocidad algo que pase de 115200bps les sugiero tomar en cuenta la capacitancia de los pines, ya que a mayor velocidad se requiere cambiar la resistencia, de hecho, haciéndola mas pequeña. Para darse una idea, pueden consultar el manual de especificaciones del i2c.

Otra consideración al momento de usar este tipo de implementación, es ignorar la recepción de la uart mientras se transmite, ya que, como se puede ver la comunicación hace una especie de “loop”, por lo que la comunicación es half-duplex, entonces, seguir una comunicación a base de direcciones origen/destino también es una buena idea.

Cuando se conecten varios dispositivos quedaría de la siguiente forma:

 
Espero que este pequeño “hack” a la uart/usart les sea de utilidad.

Sin mas por el momento…

Argos.

Anuncios

4 pensamientos en “UART/USART multiprocesador

  1. Amigo… de verdad increíble!, magnífica forma de resolver la comunicación multipunto a través de la USART, ¿se te ocurrió? o ¿lo implementaste de algún lado?, por que hubo una época donde necesité realizar justamente esto y tuve que recurrir al RS485 por que no encontré otra forma. Muchas gracias y excelente explicación. ¡Saludos!

    • Hola. Esto se nos ocurrió por allá del año 2004/2005 cuando empezábamos con los concursos de robótica. En aquellos tiempo solo sabíamos usar la uart/usart 😛 y no sabíamos mucho de interfaces como la rs485 y mucho menos I2C o SPI. Así que Rick y yo nos quebramos la cabeza un par de tardes para poder hacer que un microcontrolador se pudiera comunicar con otros de manera “simultánea”. También en esos días diseñaríamos las bases de un protocolo de comunicación que aún uso en mis proyectos, en aquel entonces le llamábamos el PCP (Pig Control Protocol jajajaja) pero esa es otra historia 😀

      Saludos.

      Argos

  2. Genial amigo¡¡¡¡¡¡,
    Gracias por la informaciòn,
    una consulta: si los micros estan separados en placas aparte, hasta que distancia recomendarias esta comunicaciòn.
    Saludos, Juan

    • Qué bueno que te sea de ayuda!!!

      Si los micros están en placas aparte, no me atrevería a ir más allá de un par de metros, ya que entre mayor sea la distancia, el ruido, la capacitancia e inductancia del cable empieza a ser más presente y puede afectar negativamente el circuito.

      Saludos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s