Comunicación entre Controller y paneles LED

Quiero controlar varios paneles LED que tienen cada uno un capítulo ATTiny que controla algunos LED WS2812. Hay un controlador maestro con un ESP8266 que está destinado a enviar comandos a los paneles individuales como Panel1: color=red. ¿Cuál sería la mejor solución para permitir que los MCU se comuniquen entre sí? Lo que pensé sobre:

  • SPI: no lo usaría, ya que necesitaría una línea CC/CS para cada panel
  • I2C: mejor, el sistema de bus se ve bien, pero los ATTinys más baratos no lo admiten
  • Serie: no es un sistema de bus

Algún sistema de bus como CAN sería ideal, sin embargo, esto no es compatible con los ATTinys más pequeños y el costo es un problema aquí.

SPI e I2C son comunicaciones en serie, entonces, ¿qué quiere decir con Serial: no es un sistema de bus ?
Entiendo que Serial es una comunicación punto a punto, por lo que no puedo conectar varios receptores al maestro, ¿verdad?
¿Quieres que repita lo que acabo de decir en el comentario anterior o deberías ir y convencerte de ello? ¿Quizás está pensando en comunicaciones seriales UART sin interfaz de hardware adicional?
Si solo necesita comunicación unidireccional (maestro a esclavos), puede usar comunicaciones en serie UART: el maestro puede hablar con cualquier cantidad de esclavos. Los problemas solo surgen si quieres que los esclavos respondan al maestro.
RS485 es un bus serie, pero también puede hacer un bus serie sin RS485.
Vale, tenía una imagen incorrecta de UART/Serial. Sin embargo, los ATTinys de gama baja no lo admiten. ¿Cuál sería el MCU más barato para ese caso de uso?

Respuestas (1)

Como sugieren los comentaristas, debería buscar protocolos en serie. Los ATTINY pueden admitir prácticamente cualquier protocolo, por lo que debe elegir el que mejor se adapte a sus necesidades.

Puede usar un protocolo unidireccional asignando una dirección a cada nodo (un ATTINY con LED), conectándolos a todos a un bus serie común y luego enviando paquetes como "Hola, dirección #4, cambie a ROJO" desde el controlador . Cada nodo ignoraría cualquier paquete no enviado a su dirección.

Si estos nodos van a estar muy separados, es probable que uno de sus desafíos sea lograr que la señal viaje de manera confiable.

Si está dispuesto a agregar más hardware, RS485 (y los sistemas de bucle de corriente relacionados) son una forma comprobada de transferir datos de manera confiable a través de cables largos y el hardware puede ser muy económico. Por ejemplo, estos adaptadores cuestan menos de $2 cada uno.

Si los nodos no van a estar demasiado separados y no desea agregar hardware adicional, entonces recomendaría usar el USART del chip para leer datos en serie de estilo rs232 a una velocidad relativamente baja: cuanto más lento, más realizable. Conecte el pin TX en el controlador a un cable y luego conecte ese cable a los pines RX en todos los nodos. También debe conectar todos los terrenos juntos.

Si todos los nodos van a estar en una fila, entonces puede ser un poco más complicado y conectar en cadena los nodos para que el pin RX de cada uno esté conectado al pin TX del siguiente hasta el controlador. Esto puede extender efectivamente la longitud total máxima que pueden viajar los datos.

Por supuesto, también hay muchas, muchas otras formas de hacer esto y la mejor es realmente la mejor para su situación particular, por lo que es difícil elegir sin conocer más detalles y requisitos.

¡Gracias que ayudó mucho! Entonces, si uso USART y transmito mi tx a todos los rx, estoy bien. Pero también necesito que mi Amo sepa cuántos o qué esclavos están escuchando, así que necesito alguna forma de comunicarlo. Si también pongo todos los esclavos tx a los Maestros rx y me aseguro de que solo hable un esclavo en un momento dado, ¿sería eso posible? Quiero un poco de I2C con más direcciones (digamos 5000)
@christopher: esa es una pregunta diferente. Esta es la primera vez que mencionas 5000 (¿controladores? ¿paneles?). ¡Esos 5000 podrían cambiar las respuestas más que un poco! Haga esta pregunta como una pregunta completamente diferente, esta vez incluyendo el tamaño del problema con el que nos pide que lo ayudemos... y cualquier otro detalle que haya omitido. Ayúdanos a ayudarte. Las preguntas incompletas dan como resultado respuestas que también están incompletas. Desafortunadamente, eso desperdicia su tiempo y el nuestro, el tiempo de nuestra comunidad.
@Christopher si realmente necesita saber dinámicamente cuándo los nodos se unen y se van, hay muchas maneras de hacerlo, pero no puede simplemente conectar directamente varias líneas TX sin alguna forma (eléctrica, de protocolo o ambas) de asegurarse de que lo hagan No peleen entre sí (uno intenta mandar un 1 mientras otro manda un 0).
@Christopher Casi todo el diseño se trata de encontrar el mejor conjunto de compensaciones para resolver un conjunto específico de problemas. La mejor respuesta a "¿Cuál es la mejor forma de transporte?" es bastante diferente si quieres ir de Moscú a Buenos Aires que si quieres ir de East 78th Street a Times Square.