Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Download Reaktionen Spiele Gadgets Kontakt <<< LED Matrix N-Kanal MOSFETs schalten >>> Einfache Kommunikation zwischen MikrocontrollernDas Video zum Thema KommunikationÜbersichtIn diesem Kapitel ist nachzulesen:
Verwendete Hardware![]() 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. ![]() 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. ![]() 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![]() 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
![]() 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![]() 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![]() Wird ein Lautsprecher als Sender verwendet, so kann das unmodifizierte Morsealphabet verwendet werden. Adressierung![]() 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![]() 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![]() 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![]() 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![]() 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. DownloadsIm Download Paket gibt's die im Video gezeigten Softwarebeispiele.Bezugsquellen für BauteileDurch 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.
<<< LED Matrix N-Kanal MOSFETs schalten >>> Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Archiv Download Reaktionen Spiele Verweise Gadgets Kontakt Impressum |
![]() ![]() ![]() ![]() ![]() |