I2C-RS232-Parser-Platine-BestuecktI2C-RS232-Parser-Platine-GefraestIn 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

I2C-LEDgn Eingabeaufforderung/Bereit, letztes Kommando war fehlerfrei
I2C-LEDrt Eingabeaufforderung/Bereit, letztes Kommando war fehlerhaft
I2C-LEDrt f Nicht durch Quarz unterstütze Übertragungsgeschwindigkeit eingestellt
I2C-LEDor 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

   
© 2013 - 2017 by Gameroom - Austria