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
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
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
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
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
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
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
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
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.
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
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
Hallo Mike das Datenblatt habe ich gefunden. Schau mal unter http://www.atmel.com/dyn/resources/prod_documents/DOC1610.PDF mfg Harald
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.