Desea usar USB para las comunicaciones con la computadora. Si tiene varios microcontroladores, probablemente solo conectará uno de los microcontroladores directamente a la computadora. Los otros microcontroladores necesitarán obtener sus comandos del microcontrolador principal.
La comunicación que elija dependerá de varios factores:
- ancho de banda requerido (asumiremos que los está ejecutando a 16MHz)
- complejidad (cableado y codificación)
- bidireccional o maestro-esclavo
Casi todas las opciones tienen soporte incorporado en el microcontrolador AVR. No hay una opción que pueda preferir razonablemente sobre las opciones integradas que requerirían hardware adicional. Debido a que tienen soporte incorporado, la complejidad del software es muy similar, ya que solo configura el puerto (usando registros), coloca los datos para transmitir en otro registro y luego activa la transmisión configurando un bit en otro registro. Cualquier dato recibido se encuentra en otro registro y se activa una interrupción para que pueda manejarlo. Cualquiera que sea la opción que elija, la única diferencia es el cambio en las ubicaciones de los registros y algunos cambios en los registros de configuración.
Un bucle USART tiene las siguientes características:
- Velocidad de transmisión máxima de CLK / 16 = 1MHz (a un reloj de 16MHz), que es una velocidad de transferencia de alrededor de 90KB / s
- Comunicaciones totalmente bidireccionales (sin designación de maestro o esclavo)
- requiere cables separados entre cada par de microcontroladores: el Atmega32u4 admite dos puertos USART de forma nativa, lo que limita la cantidad de microcontroladores que puede conectar en una red en la práctica (o de lo contrario terminará con una larga cadena de microcontroladores, es decir, conectado en una lista vinculada conducta)
Nota: esto también es lo que usaría para obtener la comunicación RS232, excepto que debido a que RS232 requiere 10V, requiere un controlador para obtener esos niveles de voltaje. Para la comunicación entre microcontroladores, esto no es útil (solo se cambian los niveles de voltaje).
RS485:
- Esencialmente, usa el puerto USART en un modo diferente: no hay ventaja en el ancho de banda, y puede que solo simplifique un poco el cableado, pero también lo complica. Esto no es recomendable.
Interfaz de dos hilos:
Esto también se conoce como I2C. Esto significa que todos los dispositivos comparten los mismos dos cables.
Necesita una resistencia pull-up en ambos cables
Es lento (porque las resistencias pull-up tienen un valor limitado y aumenta la capacitancia a medida que aumenta el número de dispositivos y aumenta la longitud del cable). Para este microcontrolador AVR, la velocidad es de hasta 400 kHz, más lenta que la USART (pero esta velocidad depende de limitar su capacidad). La razón es que, aunque un dispositivo baja el cable de datos, la transición opuesta se logra dejando que el cable flote de nuevo (la resistencia pull-up).
Es aún más lento cuando considera que TODAS las comunicaciones comparten el mismo ancho de banda limitado. Debido a que todas las comunicaciones comparten el mismo ancho de banda limitado, puede haber demoras en la comunicación donde los datos deben esperar hasta que la red esté inactiva antes de poder enviarse. Si se envían constantemente otros datos, también puede bloquear el envío de datos.
Se basa en un protocolo maestro-esclavo, donde un maestro se dirige a un esclavo, luego envía un comando / solicitud, y el esclavo responde después. Solo un dispositivo puede comunicarse a la vez, por lo que el esclavo debe esperar a que el maestro termine.
Cualquier dispositivo puede actuar como maestro y / o esclavo, lo que lo hace bastante flexible.
SPI
Esto es lo que recomendaría / usaría para la comunicación general entre microcontroladores.
Es de alta velocidad, hasta CLK / 2 = 8MHz (para CLK a 16MHz), por lo que es el método más rápido. Esto se puede lograr debido a su cable separado únicamente para el reloj.
Los cables de reloj MOSI, MISO y SCK se comparten en toda la red, lo que significa que tiene un cableado más simple.
Es un formato maestro-esclavo, pero cualquier dispositivo puede ser maestro y / o esclavo. Sin embargo, debido a las complicaciones de la selección de esclavos, para el cableado compartido (dentro de la red), solo debe usarlo de manera jerárquica (a diferencia de la interfaz de dos cables). ES DECIR. Si organiza todos los dispositivos en un árbol, un dispositivo solo debe ser maestro para sus hijos y solo un esclavo para sus padres. Eso significa que en modo esclavo, un dispositivo siempre tendrá el mismo maestro. Además, para hacer esto correctamente, debe agregar resistencias a MISO / MOSI / SCK al maestro en sentido ascendente, de modo que si el dispositivo se comunica en sentido descendente (cuando no se selecciona como esclavo), las comunicaciones no afectarán las comunicaciones en otras partes de la red (tenga en cuenta que el número de niveles que puede hacer esto usando resistencias es limitado, vea a continuación para una mejor solución usando ambos puertos SPI).
El microcontrolador AVR puede configurar automáticamente la señal MOSI cuando se selecciona como esclavo y cambiar al modo esclavo (si está en maestro).
Aunque puede requerir una red jerárquica, la mayoría de las redes se pueden organizar de forma similar a un árbol, por lo que generalmente no es una limitación importante
Lo anterior se puede relajar un poco, porque cada microcontrolador AVR admite dos puertos SPI separados, por lo que cada dispositivo puede tener diferentes posiciones en dos redes diferentes.
Dicho esto, si necesita muchos niveles en su árbol / jerarquía (más de 2), la solución anterior que usa resistencias es demasiado complicada para funcionar. En este caso, debe cambiar la red SPI entre cada capa del árbol. Esto significa que cada dispositivo se conectará a sus hijos en una red SPI y a su padre en la otra red SPI. Aunque significa que solo tiene un solo árbol de conexiones, la ventaja es que un dispositivo puede comunicarse con uno de sus hijos y sus padres al mismo tiempo y no tiene resistencias difíciles (siempre es difícil elegir los valores correctos) .
Debido a que tiene cables MOSI y MISO separados, tanto el maestro como el esclavo pueden comunicarse al mismo tiempo, lo que le da un factor potencial de dos aumentos en la velocidad. Se requiere un pin adicional para la selección de esclavos para cada esclavo adicional, pero esto no es una gran carga, incluso 10 esclavos diferentes requieren solo 10 pines adicionales, que pueden acomodarse fácilmente en un microcontrolador AVR típico.
CAN no es compatible con el microcontrolador AVR que ha especificado. Como hay otras buenas opciones, probablemente no sea importante en este caso de todos modos.
La recomendación es SPI , porque es rápido, el cableado no es demasiado complejo y no requiere resistencias pull-up complicadas. En el raro caso en que SPI no satisface completamente sus necesidades (probablemente en redes más complicadas), puede usar múltiples opciones (por ejemplo, usar ambos puertos SPI, junto con la interfaz de dos cables, así como emparejar algunos de los microcontroladores usando un bucle USART!)
En su caso, el uso de SPI significa que, naturalmente, el microcontrolador con conexión USB a la computadora puede ser el maestro, y solo puede reenviar los comandos relevantes de la computadora a cada dispositivo esclavo. También puede leer las actualizaciones / medidas de cada esclavo y enviarlas a la computadora.
A 8MHz, y 0.5m de longitud de cable, no creo que se convierta en un problema. Pero si es así, trate de tener más cuidado con la capacitancia (mantenga los cables de tierra y señal demasiado cerca, y también tenga cuidado con las conexiones entre diferentes conductores), y también la terminación de la señal. En el improbable caso de que siga siendo un problema, puede reducir la velocidad del reloj, pero no creo que sea necesario.