Die Comm3Wire-Klasse

Die Klasse Comm3Wire dient der bidirektionalen, asynchronen Kommunikation zwischen zwei Mikrocontrollern. Beide Systeme werden dabei gleichwertig bahandelt, d.h. jedes System darf senden und empfangen. Wie der Klassenname schon sagt, sind drei Leitungen beteiligt: die gemeinsame Datenleitung und die über Kreuz verdrahteten Leitungen ACK und REQ. Im Ruhezustand liegen alle Leitungen auf LOW, wobei die Datenleitung über Pull-Down-Widerstände auf LOW gehalten wird und die beiden anderen Leitungen jeweils vom REQ-Ausgang auf LOW gezogen werden. Mit REQ=HIGH wird das Senden eingeleitet. Schalten beide Systeme gleichzeitig auf Senden, wird eine Kollision erkannt und ein Fehler gemeldet. Sobald beide Systeme ausgehandelt haben, wer der Sender sein darf, schaltet dieser seinen GPIO-Pin für die Datenleitung auf Output.

Das vollständige Kommunikationsprotokoll ist hier zu sehen.

Das Protokoll ist für den Arduino und für den Raspberry Pi (in Python) umgesetzt. Die Python-Implementierung ist im Webradio-Paket enthalten, die Arduino-Library kann gesondert herunter geladen werden. Die Files stehen im Download-Bereich bereit.

CH1: Raspberry Pi ACK, Arduino REQ
CH2: Raspberry Pi REQ, Arduino ACK
Arduino ist hier der Sender (zuerst REQ=HIGH) und Raspberry Pi der Empfänger
Die Impulsbreite beträgt hier minimal etwa 20µs, was einer max. Übertragungsrate von 50kbps entspricht.