Forum: Mikrocontroller und Digitale Elektronik EEPROM 24C04 anbinden


von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Hallo,
nun suche ich hier schon seit einiger Zeit nach einem Tutorial,
wie ich ein serielles EEPROM per I²C an einen µC anbinde.
Ich würde gerne C verwenden, und alles was ich gefunden
habe ist zum Thema PIC. Nun bin ich aber mit den AVRs vertrauter.
Gibt es irgendwo ein Tutorial, wie man die Dinger an einen µC 
anschließt?
Ich bräuchte auch erstmal eine Einführung in I²C, denn im Datenblatt des 
24C04, den ich verwenden möchte, stehen Dinge wie Device Select Code, 
und es gibt auch noch Pins mit denen sich dieser verändern lässt....
Ich würde mich freuen, wenn ihr mir helfen könntet!
Mit freundlichen Grüßen,
Valentin Buck

von Helmut L. (helmi1)


Angehängte Dateien:

Lesenswert?

Hallo  Valentin

Der Code hier ist zwar fuer einen MSP430 Prozessor und ein FM24CL04 Fram 
geschrieben aber leicht anzupassen auf deine Vorgaben.
Du must nur oben im Code die define Anweisungen fuer SDA und SCL aendern 
und nach dem schreiben 5mS warten oder das ACK Bit des EEPROMs abfragen 
und das wars auch schon.  Die Addresspins des EEPROMS muessen auf A0 = 1 
, A1 = 0, A2 = 0 stehen.

Gruss Helmi

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Danke Helmi für den Code,
doch damit kann ich kaum etwas anfangen.
Mir fehlt einfach eine Einführung in I²C.
Das Problem mit den A-Pins ist ja jetzt gelöst, die stellen die Adresse 
dar.
Anscheinend werden Chips in I²C über so eine Adresse angesteuert und 
damit kann die dann einstellen, wenn man mehrere hat (oder?).
Könnte mir jemand ein Tutorial empfehlen?
Mit freundlichen Grüßen,
Valentin Buck

von HildeK (Gast)


Lesenswert?

I2C stammt von Philips, jetzt NXP.
Nach Eingabe von "I2C specification" kommt bei Gugl als erstes und 
zweites:
www.nxp.com/documents/other/39340011.pdf
und
www.nxp.com/documents/user_manual/UM10204.pdf

Das sollte dich in I2C-Fragen weiterbringen.

von Helmut L. (helmi1)


Lesenswert?

Valentin Buck schrieb:
> Anscheinend werden Chips in I²C über so eine Adresse angesteuert und
> damit kann die dann einstellen, wenn man mehrere hat (oder?).

So isses. In dem Fall von deinem EEPROM kann man jetzt 8 Stueck parallel 
schalten.

>Könnte mir jemand ein Tutorial empfehlen?

Wie HildeK schon sagte schau mal bei NXP rein. Das ist aber dann im 
grossen und ganzen der Code den ich dir gepostet habe.

von visitor (Gast)


Lesenswert?

Letztlich sollte auch ein Blick ins Datenblatt reichen, hier steht alles 
wissenswertes über I2C was du fürs Eeprom wissen musst.

Weiterhin solltest du für dich entscheiden, ob du die Atmel "hardware" 
TWI-Schnittstelle benutzt oder eine SW-I2c wie im obigen Msp430 
Beispiel.

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Also erstmal DANKE für eure Antworten.
Das I²C-Tutorial von NXP habe ich gelesen.
Dadurch ist mir schon viel klar geworden!
Ist I²C gleich TWI?
Und was wäre der Unterschied zwischen Software-I²C und Hardware I²C?
Mit freundlichen Grüßen,
Valentin Buck

von visitor (Gast)


Lesenswert?

TWI ist I2C => Atmel hat dem Kind nur einen anderen Namen gegeben !!!

TWI bedeutet, dass eine spezielle Elektronik im µC verbaut ist, welche 
sich um den Datentransfer bei I2C kümmert. D.h. du brauchst nur Daten in 
das Ausgangsregister legen und den Startknopf drücken. Danach läuft 
alles weitere automatisch ab. Der µC kann in der Zeit andere Aufgaben 
erledigen. Nach einer Übertragung kann die TWI-Unit ein Interrupt 
auslösen und du kannst ggf. weitere Daten nachlegen.

Bei SW-I2C musst du dich halt um alles (daten, takt und Acknolage) 
kümmern. Ist halt aufwendiger aber prinzipiell auf jedem µC möglich.

von Peter D. (peda)


Lesenswert?

Als Single-Master ziehe ich immer SW-I2C vor.
Es ist einfacher zu verstehen, kann sich durch Störimpulse nicht 
verklemmen und hat keine Bugs.
Auch von der Codegröße ist kaum ein Unterschied.
Es ist ohne großen Aufwand portabel und kann zwei beliebige IO-Pins 
benutzen.


HW-I2C hat nur den einen Vorteil, daß man es als Interrupt im 
Hintergrund laufen lassen könnte.


Peter

von Helmut L. (helmi1)


Lesenswert?

Peter Dannegger schrieb:
> Als Single-Master ziehe ich immer SW-I2C vor.
> Es ist einfacher zu verstehen, kann sich durch Störimpulse nicht
> verklemmen und hat keine Bugs.
> Auch von der Codegröße ist kaum ein Unterschied.
> Es ist ohne großen Aufwand portabel und kann zwei beliebige IO-Pins
> benutzen.

Genau aus dem Grund ziehe ich auch SW-I2C vor.

Gruss Helmi

von Erich (Gast)


Lesenswert?

Falls die Bauteilauswahl noch flexibel ist:
EEPROMs der Typreihen  93C46 , 93C56 , ... 93C86  sind erheblich 
einfacher anzusteuern. Kapazitäten genannter Bauteile sind 1-16 kByte.
Da hat man getrennte Daten und Clock, sogar separate Data-In und 
Data-Out, wenn man möchte.
Der Nachteil ist, daß man 1-2 Steuerleitung mehr vom uC braucht, 
insgsamt 3 oder 4.

von Peter D. (peda)


Lesenswert?

Erich schrieb:
> EEPROMs der Typreihen  93C46 , 93C56 , ... 93C86  sind erheblich
> einfacher anzusteuern.

Das ist rein subjektiv, "erheblich" ist der Unterschied aber 
keinesfalls.

Die 93Cxx sind mir außerdem zu schwachbrüstig, die 24Cxx gehen dagegen 
bis 128kByte.


Peter

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Vielen Dank für eure Antworten!
Ich würde gerne den ATMEGA-8 verwenden,
und da sind die Pins PC5 und PC4 noch zu haben.
Ich denke, dass das Hardware-TWI auch den Vorteil hätte,
dass ich es einfacher verstehen würde.
Muss ich noch Imports tätigen?
In der avr-libc gibt es ja immerhin die <util/twi.h>...
Zu den verschiedenen Typen: Den 24C04 hätte ich hier,
deshalb würde ich den gerne benutzen.
Mit freundlichen Grüßen,
Valentin Buck

von gust (Gast)


Lesenswert?


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.