Hallo Ich habe hier zwei I2C EEproms. Eins 24c256 8x32 und eins mit 8x256. Beim 8x32 kann ich wunderbar mit AT24WriteByte(adr,wert); und mit AT24ReadByte(adr); (siehe Anhang)auslesen und wieder einlesen. Beim 8x256 bekomme ich nur kryptische Zeichen, obwohl gleicher Code. Woran kann das liegen? Wird der Speicher beim 8x256 anders angesprochen? Frank
Hallo Ne, die ist immer gleich. Ich nehme für beide das gleiche Programm. Nur das ich das EEpromm tausche. Es hängt also immer nur ein EEprom am Atmega32.
hm, den Chiptyp hast du nicht verraten... 8x256 heisst 256kByte? Wenn ja, lässt der sich nicht mit 2 Byte adressieren.
Hier nochmal die Typen: 24C02 EEPROM DIP8/S Conrad Best.Nr. 160962 und ST42568WP (der funzt).
also 2kBit. Der bekommt nur ein Adressbyte gesendet. also: start device-adresse (i.a. 0xA0) byteadresse
was meinst Du mit Device Adresse 0xA0? Ich habe die Adressbits alle auf 0 gelegt und spreche das EEprom Softwaremäßig auch mit 0 an. Oder geht das beim dem von Conrad nicht?
doch, das geht. 0b1010 //highteil der Devivceadresse xxx //lowteil der deviceadresse, hat verschiedene Funktionen. Teilweise abhängig von der Hardwareverschaltung des Chips (Adresseingänge), teilweise als weiteres Adressbit(s) genutzt x schreib/lese bit. Und wenn nun beim 24C02 A0,A1 und A2 auf Masse liegen, brauchst du als Device-Adresse 0xA0 bzw 0xA1 Das Problem bei dir: du sendest device-Adresse, high-Adresse, low-Adresse. Der 2402 bekommt aber nur ein Byte Adresse - mehr braucht man ja für 256 Byte auch nicht. Du musst also das Programm entsprechend ändern, dass nur ein Byte Adresse gesendet wird. //Random Byte Write uint8_t AT24WriteByte(uint16_t dataaddress, uint8_t data) { uint8_t deviceaddress = AT24Addr; uint8_t SLA_W = deviceaddress + AT24Command; AT24Poll(0); TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); while ((TWCR & 0x80)!= 0x80); TWDR = SLA_W; TWCR = (1<<TWINT) | (1<<TWEN); while ((TWCR & 0x80)!= 0x80); if (TWSR != 0x18){ return 1; //Keine Antwort vom EEPROM } TWDR = ((dataaddress>>8)&0xFF); //hier nur den lowteil senden //was soll eigentlich &0xFF?? Bringt gar nichts //das zweite Adressbyte muss entfallen //beim Lesen analog verfahren
noch mal zum Verständnis für mich: Wenn ich ein EEprom mit 8x32 = 256b habe, muss die Adresse ein Byte sein. Und bei einem 8x256 = 2K ein int als Adresse?
irgendwie haust du Bit und Byte durcheinander. Die Speicherkapazität wird bei EEPROMs i.a. in kbit angegeben. 2kbit (24C02)=2048/8=256 Byte -> 8bit-Adresse. Grösser als 256 byte erfordert mehr als eine 8Bit-Adresse. Das kann durch verschiedene Verfahren realisiert werden. Entweder werden 2 Byte Adresse gesendet (I2C ist immer Byteorientiert) oder es wird ein Teil bereits in der Device-Adresse mitgeteilt (sieht man daran, dass das IC nicht 3 sondern weniger Hardwareadresseingänge hat. Äqivalent geht es bei Speichergrössen >64kByte zu. 16 Adressbits reichen nicht -> Codierung in der Device-Adresse oder 3-Byte-Adressteil (habe ich zwar noch nicht gesehen, aber wer weiss). Datenblätter lesen!
was mich nur wundert ist, dass der code unverändert wie oben mit St4256bwp, funktioniert. Ich schreibe mit AT24WriteByte(10,55);,die Zahl 55 auf die Adresse 10. Beim 24c02 mit 8x256 braucht man demnach doch auch nur eine 8Bit Adresse. Also müßte der Code auch hier gehen? Oder mache ich immer noch einen Denkfehler?
Bitte nicht Aufgeben! Wie Du sagst sende ich in meinem Code ja eine low und eine high Adresse. Aber wieso geht das dann beim 256er und beim 2kb nicht?
Hallo! Vielleicht hilft dir die Seite weiter: http://www.roboternetz.de/wissen/index.php/Bascom_und_I2C_EEprom Ist zwar für Bascom, aber dort steht genau wie das mit dem High und Low Byte zusammen hängt. Gruß Denny
halt dich doch einfach an die Datenblätter. Warum es bei einem funktioniert, obwohl es nicht korrekt angesteuert wird, ist doch irrelevant. Steuere es mit EINEM Adressbyte an, fertig. Bleibt die Frage - was willst du überhaupt mit einem 32Byte-EEPROM? Das gibts doch eh nur noch antiquarisch. Weil du es gerade da hast?
Also ich habe es jetzt mit nur einem Byte als Adresse hinbekommen. Danke noch mal an Crazy Horse für die Geduld!! Ich habe hier den 8x32 = 256 Kb und den 24c02. Sind schon ein wenig älter. Welche maximalen Größen gibts denn? Ich habe bei Reichelt und Co. nur bis 512 Kb gefunden.
@ Frank (Gast) >Größen gibts denn? Ich habe bei Reichelt und Co. nur bis 512 Kb >gefunden. Reicht das nicht? Das sind 64kByte. VOn Atmel gibts bis 2 Mbit, also 256 kByte. Wenns noch grösser sein soll gibt es, auch von Atmel, Flash mit SPI, bis zu sagenhaften 32 Mbit zum Wahnsinnspreis. AT45DB041B bei http://www.csd-electronics.de/de/index.htm IC's -> Speicher -> Flash MFG Falk
Hallo, bin gerade auf der Suche nach großen I2C-EEPROM's und zwar >16 kByte. Habe bei Reichelt nichts gefunden schon gar nicht 64 kByte. Könnt Ihr mir da einen Hinweis geben? Vielen Dank Grüße Jörg
Der "AT24C512B" hat 512K, also 64KByte. Gibts bei Reichelt für 1.50€ im DIP-8 Package.
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.