Rapid I2C-Prototyping mit Matlab und Arduino

Bei der Inbetriebnahme einer per I2C-Bus angebundenen Peripherie ist es manchmal sehr hilfreich, Daten interaktiv auf dem Bus senden und empfangen zu können. Damit lassen sich vor allem Unklarheiten aus dem Datenblatt beseitigen, oder — wie z.B. bei einer LED-Baugruppe — Segmente und Pins identifizieren. Hat man Matlab und einen Arduino zur Hand, gibt es wohl keinen einfacheren Weg, I2C-Telegramme zu senden oder zu empfangen.

Foto: Arduino Uno mit SAA1064-basiertem I2C-LED-Modul
Arduino Uno mit SAA1064-basiertem I2C-LED-Modul (Zum Vergrößern auf das Bild klicken)

Mit dem Arduino-Support-Package[1] bietet Matlab die Möglichkeit, ein Arduino-Board als Ein- und Ausgabegerät für ein auf dem PC unter Matlab laufendes Programm zu nutzen. Per Matlab-Befehl lassen sich Pins am Arduino setzen, einlesen oder auch SPI- oder I2C-Telegramme senden und empfangen.

In Anbetracht der extremen Kosten für Matlab — im Verhältnis zur kostenlosen Arduino-Entwicklungsumgebung — sind die Dauer-Anwendungsfälle vermutlich beschränkt. Interessant wird es allerdings, wenn es darum geht, quick & dirty Anwendungen mit beschränkter Lebensdauer zu betreiben — z.B. die Automatisierung eines einmaligen Vorgangs ohne besondere Anforderungen an das Timing. Oder aber das interaktive prototyping eines I2C-Device-Treibers.

Letzteres ist sogar nachträglich bei bestehenden Baugruppen möglich: Da jeder I2C-Busteilnehmer nur über open drain-Ausgänge (und nicht über push-pull-Ausgänge wie beim SPI-Bus) verfügt, muß nur der Bus-Master außer Betrieb genommen werden (indem er beispielsweise in den Reset-Zustand versetzt wird), und schon kann der Arduino diese Aufgabe übernehmen.

Im Folgenden wird ein prototyping-Szenario am Beispiel einer einfachen LED-Baugruppe vorgestellt.

LED-Modul

Das I2C-gesteuerte LED-Modul besteht einfach aus der Standard-Datenblatt-Beschaltung des SAA1064. Dieser IC ist abgekündigt und fällt daher für Neuentwicklungen aus. So lassen sich Restbestände aus der Bastelkiste für diese kleine Layout-Fingerübung, für die noch Platz auf einem Leiterplattennutzen war, nutzen. Der I2C-Bus ist auf einen zehnpoligen Wannenstecker geführt, dessen Pinbelegung von RoboterNetz[2] übernommen wurde, die ich zu meinem Hausstandard gemacht habe (z.B. auch für den I2C-Sniffer, den I2C-Isolator, den Raspberry-Pi-Aufsatz und in einigen anderen Projekten).

Vorgehen unter Matlab

Nach der Installation des Arduino-Support-Packages ist der Arduino direkt unter Matlab ansprechbar. Es ist nicht notwendig, die Arduino-Entwicklungsumgebung zu installieren. Natürlich läßt sich der I2C-Bus auch nach den Adressen der angeschlossenen devices scannen. Ein einfaches Matlab-Script (für die LED-Baugruppe unten herunterladbar) kann entweder schrittweise oder auch direkt in der Matlab-Konsole ausgeführt werden.

Die schrittweise Ausführung bietet sich insbesondere dann an, wenn — wie in meinem Fall — erst einmal Segmente identifiziert oder verschiedene Einstellungen des I2C-Devices ausprobiert werden sollen.

Es ist natürlich auch möglich, zyklische Programme, wie man es auf dem Mikrocontroller gewohnt ist, auszuführen. Hier sollte natürlich beachtet werden, daß man in gepollten Warteschleifen immer ausreichende Schlafpausen einfügt, da sonst die CPU-Last extrem ansteigt.

Fazit

Mit dem Arduino-Support-Package ist Matlab eine weitere nützliche Komponente für die Elektronikentwicklung. Das prototyping von Bitbanging-Treibern verbietet sich natürlich von selbst, aber einfache Aufgaben — wie die Inbetriebnahme von über einen I2C-Bus angesteuerter Peripherie (oder auch nur das Auslesen oder Beschreiben eines I2C-EEPROMs) — wird damit deutlich vereinfacht.

Downloads

.m-Datei Matlab-Quelltext
.zip-Datei Eagle-Projekt und Schaltplan

Links

DL1DOW German Amateur Radio Station