Sie möchten USB für die Kommunikation mit dem Computer verwenden. Wenn Sie über mehrere Mikrocontroller verfügen, schließen Sie wahrscheinlich nur einen der Mikrocontroller direkt an den Computer an. Die anderen Mikrocontroller müssen ihre Befehle vom Hauptmikrocontroller erhalten.
Die von Ihnen gewählte Kommunikation hängt von einer Reihe von Faktoren ab:
- erforderliche Bandbreite (wir gehen davon aus, dass Sie sie mit 16 MHz betreiben)
- Komplexität (Verkabelung und Codierung)
- bidirektional oder Master-Slave
Fast alle Optionen unterstützen den AVR-Mikrocontroller. Es gibt keine Option, die Sie den eingebauten Optionen vorziehen könnten, die zusätzliche Hardware erfordern würden. Da sie über eine integrierte Unterstützung verfügen, ist die Softwarekomplexität ähnlich, da Sie lediglich den Port konfigurieren (mithilfe von Registern), die zu übertragenden Daten in ein anderes Register verschieben und die Übertragung durch Setzen eines Bits in einem anderen Register auslösen. Alle empfangenen Daten werden in einem anderen Register gefunden und ein Interrupt wird ausgelöst, damit Sie damit umgehen können. Welche Option Sie auch wählen, der einzige Unterschied besteht in der Änderung der Registerpositionen und einigen Änderungen an den Konfigurationsregistern.
Eine USART-Schleife weist die folgenden Merkmale auf:
- Die maximale Baudrate von CLK / 16 = 1MHz (bei 16MHz Takt) entspricht einer Übertragungsrate von ca. 90KB / s
- voll bidirektionale Kommunikation (keine Master- oder Slave-Bezeichnung)
- Für jedes Mikrocontrollerpaar sind separate Kabel erforderlich. Der Atmega32u4 unterstützt nativ zwei USART-Ports, wodurch die Anzahl der Mikrocontroller begrenzt wird, die Sie in der Praxis in einem Netzwerk anschließen können (oder Sie haben eine lange Reihe von Mikrocontrollern - dh verbunden in einer verknüpften Liste) Weise)
Hinweis: Dies ist auch das, was Sie für die RS232-Kommunikation verwenden würden. Da RS232 10 V benötigt, ist ein Treiber erforderlich, um diese Spannungspegel zu erhalten. Für die Kommunikation zwischen Mikrocontrollern ist dies nicht sinnvoll (nur die Spannungspegel werden geändert).
RS485:
- Im Grunde genommen verwenden Sie den USART-Port in einem anderen Modus - die Bandbreite hat keinen Vorteil und vereinfacht möglicherweise die Verdrahtung nur geringfügig, erschwert sie jedoch. Dies wird nicht empfohlen.
Zwei-Draht-Schnittstelle:
Dies wird auch als I2C bezeichnet. Dies bedeutet, dass sich alle Geräte die gleichen zwei Drähte teilen.
Sie benötigen einen Pull-Up-Widerstand an beiden Drähten
Es ist langsam (weil die Pull-up-Widerstände einen begrenzten Wert haben und die Kapazität mit zunehmender Anzahl der Geräte und zunehmender Kabellänge zunimmt). Bei diesem AVR-Mikrocontroller ist die Geschwindigkeit bis zu 400 kHz langsamer als bei USART (diese Geschwindigkeit hängt jedoch von der Begrenzung Ihrer Kapazität ab). Der Grund ist, dass, obwohl ein Gerät die Datenleitung niedrig treibt, der entgegengesetzte Übergang erreicht wird, indem die Leitung wieder hoch schweben gelassen wird (der Pull-up-Widerstand).
Es ist sogar noch langsamer, wenn Sie bedenken, dass ALLE Kommunikation dieselbe begrenzte Bandbreite hat. Da die gesamte Kommunikation dieselbe begrenzte Bandbreite hat, kann es zu Verzögerungen bei der Kommunikation kommen, bei denen Daten warten müssen, bis das Netzwerk inaktiv ist, bevor sie gesendet werden können. Wenn ständig andere Daten gesendet werden, wird möglicherweise auch das Senden der Daten blockiert.
Es basiert auf einem Master-Slave-Protokoll, bei dem ein Master einen Slave anspricht, dann einen Befehl / eine Anforderung sendet und der Slave anschließend antwortet. Es kann immer nur ein Gerät gleichzeitig kommunizieren, daher muss der Slave warten, bis der Master fertig ist.
Jedes Gerät kann sowohl als Master als auch als Slave fungieren, wodurch es sehr flexibel ist.
SPI
Dies würde ich für die allgemeine Kommunikation zwischen Mikrocontrollern empfehlen / verwenden.
Es ist eine hohe Geschwindigkeit - bis zu CLK / 2 = 8 MHz (für CLK bei 16 MHz), was es zur schnellsten Methode macht. Dies ist erreichbar, weil die Leitung nur für die Uhr bestimmt ist.
Die MOSI-, MISO-Daten- und SCK-Taktleitungen werden über das gesamte Netzwerk gemeinsam genutzt, wodurch die Verkabelung vereinfacht wird.
Es ist ein Master-Slave-Format, aber jedes Gerät kann Master und / oder Slave sein. Aufgrund der Komplikationen bei der Slave-Auswahl sollten Sie die gemeinsame Verkabelung (innerhalb des Netzwerks) jedoch nur hierarchisch verwenden (im Gegensatz zur Zweidraht-Schnittstelle). IE. Wenn Sie alle Geräte in einer Baumstruktur organisieren, sollte ein Gerät nur den untergeordneten Geräten als Master und dem übergeordneten Gerät als Slave zugeordnet sein. Das bedeutet, dass ein Gerät im Slave-Modus immer den gleichen Master hat. Um dies korrekt zu bewerkstelligen, müssen Sie außerdem Widerstände zu MISO / MOSI / SCK zum vorgelagerten Master hinzufügen, damit die Kommunikation in anderen Teilen von nicht beeinträchtigt wird, wenn das Gerät nachgelagert kommuniziert (wenn es nicht als Slave ausgewählt ist) das Netzwerk (beachten Sie, dass die Anzahl der Ebenen, die Sie mithilfe von Widerständen ausführen können, begrenzt ist. Eine bessere Lösung für die Verwendung beider SPI-Ports finden Sie weiter unten).
Der AVR-Mikrocontroller kann das MOSI-Signal bei Auswahl des Slaves automatisch in den Tri-State-Zustand versetzen und in den Slave-Modus wechseln (wenn er sich im Master befindet).
Obwohl möglicherweise ein hierarchisches Netzwerk erforderlich ist, können die meisten Netzwerke baumartig organisiert werden, sodass dies normalerweise keine wichtige Einschränkung darstellt
Dies kann leicht gelockert werden, da jeder AVR-Mikrocontroller zwei separate SPI-Ports unterstützt, sodass jedes Gerät in zwei verschiedenen Netzwerken unterschiedliche Positionen haben kann.
Wenn Sie jedoch mehrere Ebenen in Ihrem Baum / Ihrer Hierarchie benötigen (mehr als 2), ist die oben beschriebene Lösung mit Widerständen zu umständlich, um zu funktionieren. In diesem Fall sollten Sie das SPI-Netzwerk zwischen den einzelnen Ebenen des Baums ändern. Dies bedeutet, dass jedes Gerät eine Verbindung zu seinen untergeordneten Geräten in einem SPI-Netzwerk und zu seinem übergeordneten Gerät in dem anderen SPI-Netzwerk herstellt. Obwohl dies bedeutet, dass Sie nur einen einzigen Baum von Verbindungen haben, besteht der Vorteil darin, dass ein Gerät gleichzeitig mit einem seiner Kinder und seinem Eltern kommunizieren kann und Sie keine fummeligen Widerstände haben (es ist immer schwierig, die richtigen Werte auszuwählen). .
Durch die getrennten MOSI- und MISO-Kabel können sowohl Master als auch Slave gleichzeitig kommunizieren, wodurch sich die Geschwindigkeit potenziell um den Faktor zwei erhöht. Für die Slave-Auswahl ist für jeden zusätzlichen Slave ein zusätzlicher Pin erforderlich, dies ist jedoch keine große Belastung. Selbst für 10 verschiedene Slaves sind nur 10 zusätzliche Pins erforderlich, die problemlos auf einem typischen AVR-Mikrocontroller untergebracht werden können.
CAN wird von dem von Ihnen angegebenen AVR-Mikrocontroller nicht unterstützt. Da es andere gute Optionen gibt, ist es in diesem Fall wahrscheinlich sowieso nicht wichtig.
Die Empfehlung lautet SPI , da es schnell ist, die Verkabelung nicht zu komplex ist und keine umständlichen Pull-up-Widerstände erforderlich sind. In dem seltenen Fall, dass SPI Ihre Anforderungen nicht vollständig erfüllt (wahrscheinlich in komplizierteren Netzwerken), können Sie mehrere Optionen verwenden (z. B. beide SPI-Ports zusammen mit der Zweidrahtschnittstelle verwenden sowie einige der Mikrocontroller koppeln) mit einer USART-Schleife!)
In Ihrem Fall bedeutet SPI, dass der Mikrocontroller mit der USB-Verbindung zum Computer natürlich der Master sein kann und die entsprechenden Befehle vom Computer an jedes Slave-Gerät weiterleiten kann. Es kann auch die Aktualisierungen / Messungen von jedem Slave lesen und diese an den Computer senden.
Bei 8 MHz und einer Kabellänge von 0,5 m glaube ich nicht, dass dies zu einem Problem wird. Wenn dies jedoch der Fall ist, achten Sie besser auf die Kapazität (achten Sie darauf, dass die Masse- und Signalkabel zu nahe kommen und achten Sie auch auf die Verbindungen zwischen den verschiedenen Leitern) und auf die Signalanschlüsse. In dem unwahrscheinlichen Fall, dass dies weiterhin ein Problem darstellt, können Sie die Taktrate verringern, aber ich halte dies nicht für erforderlich.