In diesem Projekt wird ein einfacher I2C-RS232-Parser/Tester basierend auf einem ATmega8 vorgestellt.
Dieser stellt eine I2C-Schnittstelle zur Verfügung und ermöglicht es, I2C-Statements per serieller Schnittstelle an entsprechende
Periferiebausteine (z.B. am Steckbrett) zu übertragen und deren Ergebnisse in bestimmten Zahlenformaten zurückzugeben.
Zur Kommunikation reicht ein simples RS232-Kommunikationsprogramm wie zum Beispiel Hyperterminal oder auch die Terminalemulation von BASCOM selbst.
Die Befehle werden im wesentlichen auf ihre Syntax überprüft.
Nicht überprüft wird ob die I2C-Kommandos in einer sinnvollen Reihenfolge abgesetzt wurden.
Ein Read- oder Write-Kommando kann allerdings erst nach setzen der Startkondition abgesetzt werden und wird vorher verhindert!
Kommandos
Bei der Eingabe der Befehle muss nicht auf Groß- und Kleinschreibung geachtet werden. Jedes Kommando muss mit {ENTER} beendet werden. Außerdem wird in System- und I2C-Kommandos unterschieden.
Es werden die folgenden Kommandos unterstützt:
Systemkommandos | |
!I | Systeminformationen Gibt verschiedene System- und Programminformationen aus. Im wesentlichen ist das die aktuell eingestellte Übertragungsgeschwindigkeit, Programminformationen, Quarzfrequenz und die Jumperstellungen. |
? | Gibt eine kurze Hilfe der möglichen Befehle aus. Darüberhinaus erhält man Hilfe zu Befehlen indem dem Befehl das Zeichen '?' folgt oder dem Zeichen '?' der Befehl folgt. BEISPIEL: ?R oder W? |
# | Gibt Erklärungen zu den acht möglichen Fehlerzuständen aus. Die einzelnen Fehlerzustände werden im Abschnitt "Fehlermeldungen" erklärt. |
* | Wiederholt den letzten eingegebenen Befehl. |
** | Löscht den Befehlsspeicher |
= | Leitet eine Befehlsfolge ein (max. 128 Zeichen). Es werden die hier im folgenden beschriebenen Einzelbefehle (I, S, P, R, W) entsprechend hintereinander gereiht abgearbeitet. BEISPIEL: =IS10100000W004R+#R+$R+%R-/P Testzeichenketten zum Steuern eines PCF8583 =is10100000w002s10100001r+%r+%r+%r+%r-%p =is10100000w001s10100001r+/r+/r+/r+/r+/r-/p =is10100000w001s10100001r+$r+$r+$r+$r+$r-$p BEISPIEL: =is10100000w01w00w00w53w15wc2wa1p Setzt die Uhr des PCF8583 auf 15:53:00:00 am 22.01 / Jahr 3 / Wochentag 6 Rückgabe bei Erfolg : OK Rückgabe bei Fehler : E:00000100 |
I2C - Steuerkommandos | |
I | Initialisieren der I2C-Schnittstelle mit der mit Jumper 4 eingestellten Übertragungsgeschwindigkeit. Rückgabe bei Erfolg : OK Rückgabe bei Fehler : E:00000010 |
S | Setzen der I2C-Startkondition ohne weitere Parameter. |
Sddd | Setzen der I2C-Startkondition mit Slaveadresse in DEZ 000-255 |
Shh | Setzen der I2C-Startkondition mit Slaveadresse in HEZ 00-FF |
Sbbbbbbbb | Setzen der I2C-Startkondition mit Slaveadresse in BIN 00000000-11111111 |
P | Setzen der I2C-Stop-Kondition. Rückgabe bei Erfolg : OK Rückgabe bei Fehler : E:00000010 |
Raf | Lese ein Byte mit ACK/NACK im gewünschten Format vom Slave. a beschreibt ACK oder NACK am Ende des Lesebefehls. a = - = NACK (z.B. R128-#). a = + = ACK (z.B. R128+$). f beschreibt das Format in welchem das jeweilige Ergebnis zurückgegeben wird. f = # = Eine dreistellige Dezimalzahl 000-255 f = $ = Eine zweistellige Hexadezimalzahl 00-FF f = % = Eine achtstellige Binärzahl 00000000-11111111 f = / = Eine zweistellige BCD-Zahl 00-99 Rückgabe bei Erfolg : Das Byte im gewünschten zwei-, drei-, vier- oder achtstelligen Format Rückgabe bei Fehler : E:000xx0xx (x=0/1 je nach Fehler!) |
Wddd | Schreibt ein Byte im DEZIMAL-Format (000-255) zum Slave |
Whh | Schreibt ein Byte im HEX-Format (00-FF) zum Slave |
Wbbbbbbbb | Schreibt ein Byte im BINÄR-Format (00000000-11111111) zum Slave |
Rückgabe bei Erfolg : OK Rückgabe bei Fehler : E:00x000xx (x=0/1 je nach Fehler!) |
Fehlernummern
Alle Fehlernummern werden im Binärformat ausgegeben und bedeuten einzeln:
00000000 | Kein Fehler (wird durck 'OK' ausgedrückt) |
00000001 | I2C - Lese- oder Schreibbefehl ohne Startsequenz |
00000010 | Kommando falsch |
00000100 | Kommando S: Parameter falsch |
00001000 | Kommando R: Zahlenbasis ungültig |
00010000 | Kommando R: ACK/NACK falsch |
00100000 | Kommando W: Parameter falsch |
01000000 | Kommando *: Speicher leer |
10000000 | Befehlskette nach '=' war fehlerhaft |
Diese Nummern können aber speziell bei Befehlsketten (=) auch ODER-verknüpft ausgegeben werden (z.B. 10101000).
Rückgabe : E:10000001
Status-LED
Die Status-LED kann folgende Zustände ausdrücken
Es bedeutet !=leuchten, ~ = blinken, * = flackern
![]() |
Eingabeaufforderung/Bereit, letztes Kommando war fehlerfrei |
![]() |
Eingabeaufforderung/Bereit, letztes Kommando war fehlerhaft |
![]() |
Nicht durch Quarz unterstütze Übertragungsgeschwindigkeit eingestellt |
![]() |
Befehl in Bearbeitung |
Jumper (0=offen, 1=gesteckt)
Mit den Jumpern können Betriebszustände eingestellt werden.
Die Jumper 3-1 dienen der Einstellung der Baudrate für die RS232-Schnittstelle.
Änderungen an diesen Jumpern zur Laufzeit werden NICHT verarbeitet!
Die Übertragungsparameter sind immer 8N1 (8bit, keine Parität, 1 Stopbit)
HINWEIS : Nicht alle Einstellungen lassen sich sinnvoll mit allen Quarzen verwenden und werden meistens auch softwaretechnisch verhindert!
Jumper 3-1
Wert | 3-2-1 | Bitrate |
0 | 0-0-0 | 2400 |
1 | 0-0-1 | 4800 |
2 | 0-1-0 | 9600 |
3 | 0-1-1 | 19200 |
4 | 1-0-0 | 28800 |
5 | 1-0-1 | 38400 |
6 | 1-1-0 | 57600 |
7 | 1-1-1 | 115200 |
Jumper 4
Der Jumper 4 ermöglicht die Einstellung der Übertragungsgeschwindigkeit für den I2C-Bus
Änderungen an diesem Jumper werden auch zur Laufzeit verarbeitet und bei jedem Initialisierungsvorgang (Befehl 'I') gesetzt.
0 = 100kHz
1 = 400kHz