-
        

Ergebnis 1 bis 3 von 3

Thema: I2C Chipkarte Lesen/Schreiben mit Atmel Mega 8

  1. #1

    I2C Chipkarte Lesen/Schreiben mit Atmel Mega 8

    Anzeige

    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, ein MyAVR LCD Addon 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:

    Code:
    $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.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du verwendest als Speicheradresse ein BYTE. Das scheint mir ein wenig dünne. Bist du sicher, das das keine 16-Bit (= 2Byte) adressen sind ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    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 nichts am Verhalten des LCD's bzw. des Kontrollers.

    Hat vielleicht jemand noch eine weitere Idee oder Hilfestellung?

    Vielen Dank!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •