PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Chipkarte Lesen/Schreiben mit Atmel Mega 8



Techi
08.02.2007, 16: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.

PicNick
08.02.2007, 17:58
Du verwendest als Speicheradresse ein BYTE. Das scheint mir ein wenig dünne. Bist du sicher, das das keine 16-Bit (= 2Byte) adressen sind ?

Techi
08.02.2007, 19:01
Hallo PicNick,

vielen Dank für die Antwort. Grundsätzlich habe ich das Problem das dies mein erstes vorhaben mit einem Microkontroller ist. Dazu kommt, dass leider die Dokumentation zu den Chipkarten nicht gerade umfassend, sondern eher auf ein DIN A5 Blatt begrenzt ist, was es einem Anfänger nicht unbedingt leichter macht.

Meine Karten haben einen Speicherplatz von 256 Byte (2 kBit), der darauf verbaute Chip trägt laut Datenblatt die Spezifikation '14C02'.

Zwar passt die Chipbezeichnung nicht zu denen, die in den Beispielen von roboternetz.de aufgelistet werden, ich habe jedoch aufgrund der 256 Byte einfach mal den Beispielcode für einen größeren Adressbereich verwendet.

Leider ändert sich auch beim zweiten Beispielcode (https://www.roboternetz.de/wissen/index.php/Bascom_und_I2C_EEprom#Beispiel_f.C3.BCr_EEprom_24C 256) nichts am Verhalten des LCD's bzw. des Kontrollers.

Hat vielleicht jemand noch eine weitere Idee oder Hilfestellung?

Vielen Dank!