Ich möchte mit einem seriellen EEPROM (24C16) kommunizieren. Soll ich das Programm besser in C oder Assembler schreibe... Hat jemand ein code-Beispiel?
hmm, werde es in Assembler schreiben... habe Code gefunden: http://www.mikrocontroller.net/forum/read-1-32030.html ???? Beim EEPROM M24C16 schreiben sie im Datenblatt Seite 2, und 5 (table 3), dass E0-E2 not connected sind! Heisst denn die Slave Adresse nur 1010000b ??? Kann man dann nur 1 M24C16 an den I2C Bus anschliessen?` THANKS IZOARDS
Ob die Adressleitungen beachtet werden oder (leider) auch nicht hängt vom Hersteller ab: Datenblatt. Nach meiner Erfahrung werden die Adressen bei STM, Atmel und Rohm beachtet. Nicht jedoch bei Infineon und Mircochip.
Was heisst, wenn sie nicht beachtet werden? Bedeutet das wirklich, dass man nicht mehr als 1 EEPROM anschliessen kann! Hat dann dieses EEPROM die Adresse 1010000b? Danke
Korrektur: meine Angaben beziehen sich auf die Typen ..02/04/08. Beim 24C16 geht immer nur ein Baustein auf Adresse 1010xxxy (binär). Dabei werden die 'x'-Bits zur Adressierung der Seite und das folgende Byte zur Adressierung innerhalb der Seite verwendet: 8 x 256 Byte = 2KB. Die größeren EEPROMs verwenden neben der Basisadresse 0hAx zwei weitere Bytes als Adresse. Dafür braucht man angepaßte IIC-Routinen.
Stimmt leider, gerade bei diesen 24cxx EEPROMS muß man aufpassen (genau das Datenblatt von dem nehmen den man hat). Erst wenn sie größer als 2k Byte sind, geht's wieder besser (dann kommt intern eine 2-Byte Adresse, die hält dann bis 64k Byte oder 24C512). Die meisten Hersteller haben eben nur an 8 Pages zu je 256 Byte gedacht. Die Aufteilung der Pages in Devices war denen dabei egal. z.B. gehen in der Regel auch nur 2 Stück zu je 1k Byte. Find ich auch schade. /Berndt
Achso, 24Cxx sind ja I²C. Falls Du Hardware-TWI in Deinem AVR hast (Du hast nicht geschrieben, was für einen Du nimmst), dann hat die avr-libc Doku (die auch mit dem WinAVR Deiner Wahl mit auf Deiner Platte installiert wird) Beispielcode für ebendiese EEPROMs.
Vielen Dank für die Antworten!!! Ich werde den At2313 einsetzen! Wieso muss eigentlich die SCL Leitung mit einem Pull-Up Widerstand verbunden werden? http://www.sprut.de/electronic/pic/grund/i2c.htm Ich dachte die SCL Leitung wird nur vom Master (uC) gesteuert?
Nein, SCL wird nicht nur vom Master gesteuert! Ein Slave darf diese Leitung auf L halten, wenn er Zeit braucht. Der Master wird also für eine steigende Taktflanke seinen Ausgangstransistor abschalten (er will H machen) und erst wenn auch der letzte Slave fertig ist und er seinen auch abschaltet, kommt die Flanke. Der Master muß also seinen Takt rücklesen! Soll jetzt nicht etwa bedeuten, das das immer passiert. Die wenigsten mir bekannten Bausteine tun das, aber wenn ein Slave aus einem Mikrocontroller besteht und also evtl. Bearbeitungszeit für einen Takt braucht, kann er sich die auf diese Weise nehmen. in der Regel gilt für IIC: die mindest H-Zeit wird vom Master (der darf nämlich erst ab der tatsächlichen Flanke zählen), die max L-Zeit vom langsamsten Slave bestimmt. /Berndt
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.