Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Download    Reaktionen    Spiele    Kauftipps    Kontakt   




<<< LED Matrix         N-Kanal MOSFETs schalten >>>

Einfache Kommunikation zwischen Mikrocontrollern

Das Video zum Thema Kommunikation


Übersicht

In diesem Kapitel ist nachzulesen:


Verwendete Hardware

Boards mit 8x8 LED Matrix und Atmega328 Mikrocontroller
Abbildung 1:
Die Softwarebeispiele in diesem Kapitel sind für den Arduino UNO geschrieben. Als Anzeige werden die Platinen mit 8x8 LED Matrix verwendet, deren Funktionsweise in einem vorangegengenen Kapitel behandelt wird.
Für die Beispiele in dem Video wurden akustische Signale verwendet und die entsprechende Schnittstelle besteht aus einem Mikrofon als Empfänger und meiner Hand (=Klopfzeichen) beziehungsweise einem Mini-Lautsprecher als Sender.
Zur besseren Sichtbarkeit habe ich Streuscheiben mit einem Gitter aus einem 3D-Drucker über die LEDs gestülpt.
Mikrofonmodul GY-MAX4466 mit Tiefpass
Abbildung 3:
Als Mikrofonmodule verwende ich welche vom Typ GY-MAX4466, bei denen der Verstärkungsfaktor über ein Poti auf der Rückseite eingestellt werden kann. Ich habe einen Tiefpass, bestehend aus einem 2.4kΩ Widerstand und einem 33μF Elektrolytkondensator an die Pins der Eingangsspannung gelötet, da die 5V Spannung am Arduino UNO nicht so konstant ist, wie sie sein sollte.
Verlauf Eingangsspannung am ADC
Abbildung 4:
Die Wirkung des Tiefpass Filters ist hier zu sehen. die Werte habe ich vom Analogaingang eingelesen und per PC ausgewertet (das Perl-Script ist im Download-Paket):
Die Kurve oben zeigt den Verlauf des Hintergrundrauschens mit dem Filter,
die mittlere Kurve zeigt den Verlauf des Hintergrundrauschens ohne den Filter
und die untere Kurve zeigt den Verlauf bei anliegen eines Beep-Signales mit dem Filter.

Klopfzeichen zählen

Klopfzeichen zur Datenübertragung zum Arduino UNO
Abbildung 5:
Eine sehr einfach zu programmierende Form der Kommunikation besteht aus Klopfeichen. Dabei wird ein Klopfen detektiert, sobald der Pegel am Analogeingang, an welchem das Mikrofon angeschlossen ist, einen bestimmten Schwellwert überschreitet. Es werden die Klopfzeichen gezählt, bis eine Pause von etwa 1.5s eintritt. Die so ermittelte Zahl entspricht der Stelle des Buchstabens im Alphabet.
Die Software ist einfach zu schreiben, jedoch führt jedes laute Geräusch dazu, dass dieses als die Übertragung eines Buchstabens fehlinterpretiert wird.

Klopfcode

  1 2 3 4 5
1 A B C/K D E
2 F G H I J
3 L M N O P
4 Q R S T U
5 V W X Y Z


Klopfcode mit Arduino UNO emofangen
Abbildung 6:
Ebenfalls recht einfach gestrickt ist der sogenannte Klopfcode:
Dabei werden 25 Buchstaben des Alphabets in eine Tabelle mit 5 Spalten und 5 Zeilen eingetragen. Ein Buchstabe wird durch Klopfen der Zeilenzahl, gefolgt von der Spaltenzahl übertragen - zwischen beiden erfolgt eine längere Pause, ebenso nach Abschluss des übertragenen Buchstabens. Maximal werden somit für ein Zeichen 10 Klopfzeichen benötigt, es können somit mehr Buchstaben pro Zeiteinheit, also zum Beispiel in einer Minute übertragen werden. Dieses Verfahren ist schon etwas stabiler, was die Fehlinterpretation von Umgebungsgeräuschen angeht:
Wenn nicht gerade mindestens zwei Geräusche mit den geforderten Pausen auftreten, kann die Software die Übertragung als fehlerhaft erkennen und springt zurück zum ursprünglichen Zustand. Wirklich sicher gegenüber Störungen ist diese Methode allerdings auch nicht.

Geklopfter Morsecode

Geklopfter Morsecode mit Arduino UNO
Abbildung 7:
Das Morse-Aphabet bietet eine Möglichkeit mit noch weniger Klopfzeichen auszukommen, dieses Verfahren arbeitet jedoch mit drei unterschiedlichen Zuständen:
Einem kurzen und einem langen Ton, sowie den Pausen dazwischen. Da beim Klopfen kein langer Ton erzeugt werden kann, muss die Unterscheidung zwischen "lang" und "kurz" über die Pausen erfolgen. Nach diesem System sind jedoch zum Beispiel die beiden Buchstaben "D" und "K" nicht zu unterscheiden, da das letzte Zeichen nicht als "kurz" oder "lang" identifiziert werden kann.
Ein Ausweg aus diesem Dilemma besteht darin, hinter jeden Buchstaben ein abschließendes Klopfzeichen zu setzen:
Somit wird das "D" zu "-..." und das K zu "-.-." Die Signale sind eindeutig zu unterscheiden, ebenso alle weiteren Buchstaben des Alphabets, sowie die Ziffern und einige Sonderzeichen. Als Trenner zwischen zwei Wörtern kann entweder eine noch längere Pause eingelegt werden, oder man überträgt ein Zeichen, das anzeigt, dass die Übertragung eines Wortes abgeschlossen ist. Im Computerzeitalter verwendet man dafür das Leerzeichen, das im Morsealphabet allerdings nicht vorkommt, aber neue Zeiten erfordern halt neue Zeichen - ich verwende "lang, lang, lang, kurz". Mit diesem System ist es somit möglich, beliebige Texte recht effektiv durch Klopfen zu einem Mikrocontroller zu übertragen.

Morsecode

Morsecode zur Datenübertragung zum Arduino UNO
Abbildung 8:
Wird ein Lautsprecher als Sender verwendet, so kann das unmodifizierte Morsealphabet verwendet werden.

Adressierung

Adressierung mit Morsecode
Abbildung 9:
Sind mehrere Mikrocontroller in Reichweite, so muss ein Standard festgelegt werden, mit dem ein bestimmtes Zielsystem angesprochen werden kann. Eine Methode besteht darin, jedem der Mikrocontroller eine eindeutige Nummer, also eine Adresse zuzuweisen. Für bis zu 10 Adressen eignen sich die Ziffern 0 bis 9. Jede Übertragung beginnt nun, indem die Adresse des Zielsystems als erstes Zeichen gesendet wird.
Somit können die Microcontroller auch untereinander kommunizieren. Im Video habe ich gezeigt, wie Buchstaben zwischen verschiedenen Platinen ausgetauscht werden können.

8Bit Code / Fehlererkennung

8-Bit Morsecode
Abbildung 10:
Störgeräusche können dazu führen, dass eine Übertragung fehlerhaft abläuft. Es müssen also zusätzliche Befehle in den Übertragungsstandard eingefügt werden, die sicherstellen, dass die Kommunikation fehlerfrei abgelaufen ist. Ich verwende dazu eine eigene Tabelle, in der alle Zeichen aus 8 Tönen bestehen, womit theoretisch 256 unterschiedliche Kombinationen möglich sind. Die Zeichen können mit wenigen Zeilen Softwarecode automatisch generiert werden. Da zur Übertragung von Text und Ziffern sowie einiger Sonderzeichen 51 Kombinationen ausreichen, verwende ich nur jede fünfte mögliche Kombination. Eine Störung in der Übertragung kann nun auf zwei Arten festgestellt werden:
Zum einen muss jedes Zeichen aus 8 Tönen, gefolgt von einer längeren Pause bestehen - ist das nicht der Fall, so muss mindestens ein Ton ausgelassen worden sein oder auf Grund von Störgeräuschen wurden zusätzliche Töne missinterpretiert. Wurden korrekterweise 8 Töne empfangen, jedoch ein "lang" wurde als "kurz" interpretiert oder umgekehrt, so besteht eine Chance von 4 zu 5, dass diese Kombination keinem Zeichen zugeordnet werden kann, die Übertragung also ebenfalls als fehlerbehaftet erkannt wird. Durch ein Sonderzeichen wird dem Sender signalisiert, dass die Botschaft wiederholt werden muss, der Bildschirm zeigt die Anzahl der gefundenen Fehler an.

Grafiken

Grafiken übertragen
Abbildung 11:
Die Bildschirme der Kleincomputer bestehen aus 64 LEDs, womit rein rechnerisch 2 hoch 64, also verdammt viele Kombinationen dargestellt werden können. Um eine Kombination an LEDs anzuzeigen, die keinem der zur Verfügung stehenden Buchstaben entspricht, muss ein Standard definiert werden, der die Übertragung beliebiger Grafiken erlaubt. Das kann geschehen, indem ein weiteres Sonderzeichen ankündigt, dass die folgenden Signale einer Grafik zugeordnet werden müssen. Nach diesem Sonderzeichen werden 64 Töne übertragen, wobei ein "lang" einer eingeschalteten, ein "kurz" einer ausgeschalteten LED entspricht. Die Übertragung dauert wesentlich länger als das Senden eines einfachen Buchstabens, dessen Form in jedem der Mikrocontroller abgespeichert ist. Grafiken anstelle von Buchstaben zu senden ist der Grund, warum Powerpoint-Clowns so viel mehr Daten übertragen müssen als Menschen, die es verstehen, ihre Botschaften in einfache Worte und Ziffern zu kleiden. "Mach's einfach" ist auch im Zeitalter von Gigabytes und Gigaherz das Motto, welchem verantwortungsbewusste Informatiker folgen.

Gummikabel

Gummikabel zur Datenübertragung
Abbildung 12:
Die Schallwellen sperre ich hier in zwei Schläuche ein, die jeweils vom Lautsprecher des einen Mikrocontrollers hin zum Mikrofon des anderen Mikrocontrollers laufen. Somit sind die Töne außerhalb fast nicht mehr zu hören - die beiden Mikrocontroller kommunizieren nun über die Gummikabel. Ein großer Vorteil der kabelgebundenen Kommunikation ist, dass Umgebungsgeräusche weitgehend blockiert werden - selbst mit dem einfachen Morsecode gelingt die Übertragung trotz äußerer Störgeräusche fehlerfrei.

Datenübertragung per Infrarot Schnittstelle

Datenübertragung per Infrarotschnittstelle
Abbildung 13:
Lichtsignale können auch ohne Glasfaserkabel zur Datenübertragung genutzt werden - hier mache ich das über eine Infrarot-Schnittstelle. Es gelten die selben Grundregeln zur Adressierung der Mikrocontroller und zur Codierung der Information - ich verwende erneut das Morse-Alphabet zur Datenübertragung hin zu den 5 Zielsystemen.

Downloads

Im Download Paket gibt's die im Video gezeigten Softwarebeispiele.

Bezugsquellen für Bauteile

Durch den Kauf von Bauteilen über die von mir angegebenen Affiliate-Partnerlinks in der Tabelle (oder in den Bannern auf meinen Seiten) unterstützt ihr meine Projekte - vielen Dank!
Die Links anzuklicken bedeutet allerdings keinen Kaufzwang - völlig ungezwungenes Stöbern ist möglich ;-)

Meine frei zugängliche Bildungsplattform ohne einzukaufen mit Hilfe einer Spende oder als Patreon zu unterstützen geht natürlich auch. Vielen Dank an alle, die mir bereits einen Obolus haben zukommen lassen!

Wenn ihr weitere Bauteile kennt, die sich für die Beispiele auf dieser Seite eignen, hinterlasst bitte einen Kommentar auf dieser Seite.

Bauteil Online Shops Bemerkung
Arduino UNO Arduino UNO auf eBay

Adruino UNO auf Amazon
Mikrocontroller sind für Echtzeitanwendungen wie das Multiplexing bestens geeignet.
Mikrofon Modul GY-MAX4466 GY-MAX4466 auf eBay

Mikrofonmodul GY-MAX4466 auf Amazon
Mit einstellbarer Verstärkung
Piezo Buzzer Piezo Buzzer auf eBay

Piezo Buzzer auf Amazon
Piezo Lautsprecher für 5V
LEDs LED Sortimente auf eBay

LED Sortimente auf Amazon
LEDs mit Durchlassströmen um die 20mA sind günstig zu bekommen, sogenannte Low Current LEDs sind teurer, bei kleinen Strömen aber heller.
Widerstände Widerstände auf eBay

Widerstände auf Amazon
Kohleschichtwiderstände mit 5% Toleranz sind günstig und für Experimente rund um LEDs gut geeignet.
Lochrasterplatine Lochrasterplatinen auf eBay

Lochrasterplatinen auf Amazon
Europlatinen haben ein Lochrastermaß von 2.54mm.
Professionelle PCBs Zum Angebot meines Sponsors auf NextPCB.com Die von mir erstellten Vorlagen dürfen nach belieben kopiert, verändert und anschließend produziert werden.




<<< LED Matrix         N-Kanal MOSFETs schalten >>>


Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Archiv    Download    Reaktionen    Spiele    Verweise    Kauftipps    Kontakt    Impressum   





Twitter YouTube Hackaday Patreon TPO