Techi
08.02.2007, 17:09
Hallo zusammen,
ich bin schon einige Zeit am testen und probieren. Leider bin ich jedoch im Umgang mit dem Mikrocontroller bzw. dessen programmierung noch nicht so geübt. Entschuldigt daher bitte, falls es in den Augen eines erfahrenen Programmierers etwas 'komisch' aussieht.
Grundsätzliches Ziel ist es, eine Chipkarte die am I2C Bus hängt auszulesen bzw. zu beschreiben. Als Basis benutze ich ein MyAVR Board mit einem Atmel Mega 8 (http://www.myavr.de/shop/artikel.php?artID=40), ein MyAVR LCD Addon (http://www.myavr.de/shop/artikel.php?artID=15) und ein I2C Chipkartenleser von horter.de. Die Programmierung erledige ich in Bascom-AVR.
Die Beispiele aus dem Bascom Programm waren leider nicht besonders Hilfreich, daher habe ich eines der Beispiele von roboternetz.de für mein Board angepasst. Der Code sieht momentan wie folgt aus:
$regfile = "m8def.dat"
$crystal = 8000000
'---Config für LCD -----------------
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Portd = Output
'SDA und SCL definieren
Config Sda = Portb.0
Config Scl = Portb.1
Dim X As Byte
Dim A As Byte
Dim B As Byte
Dim Lesen As Byte
CLS
Do
'---- schreibe in EEprom ----
For A = 1 To 10
Incr X '1 bis Überlauf zählen
I2cstart 'Start I2C
I2cwbyte &HA0 'Sende Slave Adresse
I2cwbyte A 'Sende Speicheradresse
I2cwbyte X 'Sende Wert
I2cstop 'Stop I2C
Waitms 10 'warte 10ms
Locate 1 , 1
Lcd "Rein=" ; X ; " " ' Ausgabe der geschriebenen Werte am LCD
Waitms 500
Next A
'--- lesen vom EEprom ----
For B = 1 To 10
I2cstart 'Start I2C
I2cwbyte &HA0 'sende Slave Adresse
I2cwbyte B 'sende Speicheradresse
I2cstart 'Start I2C
I2cwbyte &HA1 'sende Slave Adresse +1 für lesen
I2crbyte Lesen , Nack 'lese Adresse vom EEprom
I2cstop 'Stop I2C
Locate 2 , 1
Lcd "Raus=" ; Lesen ; " " 'Ausgabe der EEprom Werte
Waitms 500
Next B
Loop
End
Die Ausgabe am LCD sieht nun so aus, das er "Rein=" korrekt ausgibt und immer in 10er Schritten zu schreiben versucht. Leider gibt der Kontroller bei "Raus=" immer 255 an. Dies passiert sowohl mit, als auch ohne eingelegte Karte.
Für jegliche Hilfe wäre ich sehr dankbar, egal ob in einer Hilfestellung oder eines FAQ's/HOWTO's etc...
Vielen Dank schonmal im vorraus,
Christoph.
ich bin schon einige Zeit am testen und probieren. Leider bin ich jedoch im Umgang mit dem Mikrocontroller bzw. dessen programmierung noch nicht so geübt. Entschuldigt daher bitte, falls es in den Augen eines erfahrenen Programmierers etwas 'komisch' aussieht.
Grundsätzliches Ziel ist es, eine Chipkarte die am I2C Bus hängt auszulesen bzw. zu beschreiben. Als Basis benutze ich ein MyAVR Board mit einem Atmel Mega 8 (http://www.myavr.de/shop/artikel.php?artID=40), ein MyAVR LCD Addon (http://www.myavr.de/shop/artikel.php?artID=15) und ein I2C Chipkartenleser von horter.de. Die Programmierung erledige ich in Bascom-AVR.
Die Beispiele aus dem Bascom Programm waren leider nicht besonders Hilfreich, daher habe ich eines der Beispiele von roboternetz.de für mein Board angepasst. Der Code sieht momentan wie folgt aus:
$regfile = "m8def.dat"
$crystal = 8000000
'---Config für LCD -----------------
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Portd = Output
'SDA und SCL definieren
Config Sda = Portb.0
Config Scl = Portb.1
Dim X As Byte
Dim A As Byte
Dim B As Byte
Dim Lesen As Byte
CLS
Do
'---- schreibe in EEprom ----
For A = 1 To 10
Incr X '1 bis Überlauf zählen
I2cstart 'Start I2C
I2cwbyte &HA0 'Sende Slave Adresse
I2cwbyte A 'Sende Speicheradresse
I2cwbyte X 'Sende Wert
I2cstop 'Stop I2C
Waitms 10 'warte 10ms
Locate 1 , 1
Lcd "Rein=" ; X ; " " ' Ausgabe der geschriebenen Werte am LCD
Waitms 500
Next A
'--- lesen vom EEprom ----
For B = 1 To 10
I2cstart 'Start I2C
I2cwbyte &HA0 'sende Slave Adresse
I2cwbyte B 'sende Speicheradresse
I2cstart 'Start I2C
I2cwbyte &HA1 'sende Slave Adresse +1 für lesen
I2crbyte Lesen , Nack 'lese Adresse vom EEprom
I2cstop 'Stop I2C
Locate 2 , 1
Lcd "Raus=" ; Lesen ; " " 'Ausgabe der EEprom Werte
Waitms 500
Next B
Loop
End
Die Ausgabe am LCD sieht nun so aus, das er "Rein=" korrekt ausgibt und immer in 10er Schritten zu schreiben versucht. Leider gibt der Kontroller bei "Raus=" immer 255 an. Dies passiert sowohl mit, als auch ohne eingelegte Karte.
Für jegliche Hilfe wäre ich sehr dankbar, egal ob in einer Hilfestellung oder eines FAQ's/HOWTO's etc...
Vielen Dank schonmal im vorraus,
Christoph.