Diese Software auf Basis der Arduino-Umgebung ist entstanden, da ich auf die Schnelle die Kommunikation mit einem anderen Controller testen wollte und diesen auf elegante Art und Weise direkt ansteuern wollte. Hierzu hätte ich natürlich auch umständlich einen anderen Controller immer wieder mit neuen Befehlssequenzen füttern können und die Reaktionen betrachten, allerdings kann dieser kleine Helfer universell bei verschiedenen (zukünftigen) Projekten benutzt werden, ohne das die Software neu geschrieben werden muss. Die einzelnen I2C-Befehle können dann einfach über die serielle Schnittstelle vorgegeben werden.
Die Software für den Controller wurde in der Arduino-IDE 1.6.3 entwickelt und belegt auf meinem Zielsystem (ATmega168PA) 58% des Programmspeicherplatzes und 71% des Arbeitsspeichers. Die Kommunikation erfolgt über die serielle Schnittstelle mit 9600 Baud. Folgende Befehle sind in der aktuellen Version vorhanden:
Alle übermittelten Werte vom Controller sind derzeit in Hexadezimaler schreibweise (was auch so beibehalten werden soll), jedoch ist die Eingabe bislang auf das dezimale Zahlenformat beschränkt. Dies soll jedoch in einer zukünftigen Version verbessert werden, so dass ein einheitliches Aussehen gewährleistet wird.
Alle Eingaben werden durch ein Linefeed ("\n") bestätigt.
Im folgenden wird die Benutzung der Software anhand einiger Beispiele dargestellt.
In diesem Beispiel soll nach vorhandenen Busteilnehmern am I2C-Bus gescannt werden. Hierzu wird als Befehl ein "s" geschickt und mit einem Linefeed "\n" die Eingabe bestätigt. Die Software probiert daraufhin alle 127 möglichen Adressen durch und schaut ob ein Teilnehmer für die jeweilige Adresse antwortet. Ist ein Teilnehmer für eine Adresse gefunden, so wird dies mit einem X in der anschließend gezeichneten Tabelle markiert.
>s _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F 0_ - - - - - - - - - - - - - - - - 1_ - - - - - - - - - - - - - - - - 2_ - - - - - - - - - - - - - - - - 3_ - - - - - - - - - - - - - - - - 4_ - - - - - - - - - - - - - - - - 5_ X - X - - - - - - - - - - - - - 6_ - - - - - - - - - - - - - - - - 7_ - - - - - - - - - - - - - - - - > |
Hier sind zwei Busteilnehmer angeschlossen. Es handelt sich hierbei um zwei serielle EEPROM-Bausteine vom Typ 24C32 mit den Adressen 0x50 (80) und 0x52 (82).
In diesem Beispiel sollen zunächst einige Daten in ein serielles EEPROM vom Typ 24C32 geschrieben werden. In einem zweiten Schritt werden die geschriebenen Daten wieder ausgelesen.
Um Daten in das EEPROM zu schreiben muss diesem zunächst eine Adresse mitgeteilt werden an welcher die Daten hinterlegt werden sollen und anschließend das Byte (oder ein Block von 32 Bytes), welches geschrieben werden soll. Die Adresse ist ein 16-Bit-Wert und muss daher in zwei Bytes aufgeteilt werden. Als Bytereihenfolge ist hierbei Little-Endian zu wählen! Hier werden nun vier Bytes nacheinander in das EEPROM an die Adressen 0-3 geschrieben:
>w 80 0 0 202 >w 80 0 1 254 >w 80 0 2 186 >w 80 0 3 190 > |
Um Daten die gerade geschriebenen Daten zu kontrollieren sollen diese nun ausgelesen werden. Hierzu teilen wir dem EEPROM die Startadresse des Lesevorganges mit (Achtung: Bytereihenfolge beachten!) und anschließend wird der Lesevorgang initiiert und die Anzahl der auszulesenden Bytes angegeben.
>w 80 0 0 >r 80 0 0 4 Ausgabe: CA FE BA BE > |
Hier haben wir nun unsere vier zuvor geschriebenen Bytes ausgelesen und bekommen diese in hexadezimaler Schreibweise angezeigt.
Die Software werde ich demnächst an dieser Stelle veröffentlichen.