Forum: Mikrocontroller und Digitale Elektronik Chipcard


von Mike (Gast)


Lesenswert?

Hallo!

Ich bin dabei ein Zutrittssystem für ein Simulationsprojekt zu bauen.

Ziel ist es im Moment eine Chipcard anzusteuern (2k Chipcard von
Reichelt) mittels I2C.

Programmiersprache ist CodeVision.
Device ist ein Mega8

Folgender Code soll 0x47 an Adresse 0b00000010 schreiben.
0b10100000 ist die Adresse des EEPROMS.
  i2c_start();
  i2c_write(0b10100000);
  i2c_write(0b00000010);
  i2c_write(0x47);
  i2c_stop();


Folgender Code soll den geschriebenen Wert wieder auslesen:
  unsigned char data;
  i2c_start();
  i2c_write(0b10100000);
  i2c_write(0b00000010);
  i2c_start();
  i2c_write(0b10100000 | 1);
  data=i2c_read(0);
  i2c_stop();

in data steht leider immer 0 drin.

Kann man irgendwie feststellen, ob der schreibvorgang erfolgreich war.
Bzw. wo könnte mein Fehler liegen?

Danke vielmals fürs durchlesen und evtl. antworten!

Miky

von Harald G. (Gast)


Lesenswert?

Hallo Mike

soweit ich das kenne mußt du die Adresse der Speicherstelle in
2 Bytes (High-Adr und  Low-Adr) zur Karte schicken.

Mit einem Byt kannst du ja nur bis 255 Adressieren.

mfg
Harald

von Florian Pfanner (Gast)


Lesenswert?

Hallo,

werte mal die Rückgaben von den Funktionen i2cstart() und i2cwrite()
aus. Diese geben 1 zurück, wenn kein Ack empfangen wurde.

Gruß, Florian

von Mike (Gast)


Lesenswert?

Hallo!

Danke für eure Antworten.

Ich werd beides mal ausprobieren. Vorher jedoch hab ich wohl noch ein
ganz anderes Problem:

Ich hab die Karte an PortC 4 und 5 hängen (die eigentlich auch für das
Hardware I2C gedacht sind). Mit dem Oszi kann ich hier leider keine
Aktivität messen. AVCC und AGND hab ich angeschlossen ...

Leider hab ich keine Ahnung, was ich machen soll, damit sich da was tut
...

Mike

von Mike (Gast)


Lesenswert?

Sodele, jetzt bin ich schon weiter. Ich habe noch 2 Pullup Widerstände
(10k) hingehängt (wusste zwar, dass die da reingehören, aber nicht,
dass sie unbedingt notwendig sind ...).

Jetzt kann ich mit dem Oszi wenigstens Aktivität nachmessen.

Auch auf meinem Diplay kommen plötzlich 255 raus als ausgelesenen
Daten. Das stimmt soweit ja auch (leeres EEPROM ist auf 0xFF gesetzt).

Mit der Adressierung hab ich mich nochmals schlau gemacht. Es handelt
sich um ein 2kByte EEPROM, also 16kBit. Ich muss also midestens 2048
Byte adressieren können. Jetzt werden die drei Adressbits
(normalerweise dazu da den Chip zu adressieren) für die
Datenadressierung genutzt. Man kann also an ein I2C Bussystem nur einen
solchen EEPROM anschließen. Dafür hat man 3 weitere Bits zu Adressieren
frei, also 2^11 = 2048. Stimmt also ...

Der Schreibvorgang funktioniert leider immer noch nicht. Ich werd
morgen mal die Funktionen auswerten - dann mal sehen, warum das nicht
geht ...

Kann mir evtl. jmd erklären, warum sich ohne Pullups da vorher NULL
getan hat??

Mike

von Divison (Gast)


Lesenswert?

Hallo,

wie hast du denn die Karte genau angeschlossen?

Die hat ja 8 Kontakte.

Und was hast du denn da, wo du dir Karte reinsteckst? Wo bekommt man
denn sowas wie ne Kartenhalterung mit Kontaktabnehmer her?

Denke sowas in der art musst du ja da haben.

Liebe Grüsse

Division

von Mike (Gast)


Lesenswert?

Hallo!

Danke für die Antwort!

Ich denke, dass ich die richtigen Kontakte erwischt habe - werd aber
nochmal genauer schauen.

Die Haltevorrichtung habe ich aus einem alten Chipkartenlaufwerk für
PCs ausgebaut. Aber ich glaube ELV hat die Teile ... 68-160-92
Bestellnummer

Mike

von Steffen (Gast)


Lesenswert?

Die Treiberstufen beim I²C-Bus sind open Colector Ausgänge, können also
nur Low treiben. Daher geht ohne Pull Up absolut nichts.

Steffen

von Harald G. (Gast)


Lesenswert?

Hallo Mike

wie heißt denn deine EEProm-Karte ?

Die Karten die ich bisher benutzt habe brauchten immer 2 Adr.-byte
wenn die Speicherkapazität über 256 Byte lag.

Welche Speicherkapazität hat denn deine Karte genau ?

2 KBit oder
2 KByte ??

mfg
Harald G.

von Mike (Gast)


Lesenswert?

Hallo Harald,

meine EEPROM Karte stammt von Reichelt und hat die Bestellnummer:
CHIPKARTE 2KB

Sie hat 2kByte (=16kBit) Speicherplatz. - daher reichen 11 Bit aus (wie
im oberen Beitrag beschrieben). Diese Info hab ich dem Datenblatt des
AT24C16/24LC16B entnommen, da dieser für die Karte verwendet wird (die
16kBit Version).

Datenblatt:
http://www.atmel.com/dyn/resources/prod_documents/doc0180.pdf

Grüße Mike

von Harald G. (Gast)


Lesenswert?

Hallo Mike

Richtig den Ic mit seinen 8 Beinchen  kannst du so Adrssieren.

Du hast aber eine Chipkarte die hat 6 oder 8 Kontakte.
die  Anschlüsse A0 bis A2 gibt es da nicht.

Folgende Anschlüsse musst du nutzen:
(Karte liegt vor dir und die Kontakte sind links)

        Links oben 1.  VCC  daneben  GND
                   2.  frei    "     frei
                   3.  SCL     "     SDA
                   4.  frei    "     Frei

Die Anschlüsse die ich mit frei bezeichnet habe heißen VPP,RST
RPU aber die braucht du bei I2C nicht.

Such mal nach dem Datenblatt für die Chipkarte.

mfg
Harald

von Harald G. (Gast)


Lesenswert?

Hallo Mike

das Datenblatt habe ich gefunden.

Schau mal  unter

http://www.atmel.com/dyn/resources/prod_documents/DOC1610.PDF

mfg
Harald

von Mike (Gast)


Lesenswert?

Hallo Harald,

super, dass du das Datenblatt gefunden hast. Leider sieht die
Ansteuerung hier der Ansteuerung des bedrahteten EEPROM sehr ähnlich -
ich konnte meinen Fehler bisher leider nicht finden ...

Ich werde, sobald ich zu Hause bin nochmals auf dem Lieferschein
sicherstellen, dass ich auch wirklich die 2kByte Karte bekommen habe.

Wie würde eine Ansteuerung mit I2C für eine 2 Kbyte Karte deiner
Meinung anch jetzt aussehen?

Grüße
Mike

von Harald G. (Gast)


Lesenswert?

Hallo Mike

Mit der Adressierung der EEpromkarte bist du laut Datenblatt schon
auf dem richtigen Weg. Die 2 Adressbytes für diesen Typ kannst du
vergessen, ist nur bei den größeren EEproms nötig.

Kannst du feststellen, wenn du die Adresse Ax zum EEprom sendest
ob mit dem 9.Takt ein "Ack" zurück kommt?

Wenn ich nicht wusste welche I2C-Adresse der IC hat ,
habe ich fortlaufend START,ADRESSE,STOP gesendet und gleic nach der
Adresse das ACK abgefragt.Unter irgend einer Adresse hat sich der IC
dann schon  gemeldet.

Was verwendest du denn für die Karte für eine Kontakteinheit ?

mfg
Harald

von Mike (Gast)


Lesenswert?

Hallo Harald,

ich kann 'Entwarnung' geben. Ich hab das Teil gerade angeschaltet und
es hat einwandfrei funktioniert. Ich vermute mal ein lockeres Kabel (da
ich alle auf einem Steckbrett aufgebaut habe).

Ich habe eine Kontaktiereinrichtung aus einem alten Chipkartenlaufwerk
für PCs ausgebaut (ja, ich wusste auch nicht, dass es sowas gibt). Wenn
ich mehrere brauchen sollte, werde ich welche bei ELV bestellen. Die
haben die im Angebot!

Danke für deine Hilfe!

Grüße MIke

von Harald G. (Gast)


Lesenswert?

Hallo Mike

ich habe mir mal die Kontakteinheiten bei Conrad bestellt.S 1105
Aber die Preise kennen wir ja.

Schön das es jetzt läuft.

Tschüss
Harald

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.