Forum: Mikrocontroller und Digitale Elektronik EEPROM 24C04


von HDW (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich möchte ein EEPROM 24C04 ansteuern. Das EEPROM kann über I2C 
angesprochen werden.

Im PIC 16F876 gibt es dafür eine Hardwareunterstützung.
Wie das genau funktioniert, wird auf 
http://www.sprut.de/electronic/pic/grund/i2c.htm sehr einfach und 
verständlich für jeden beschrieben.
Das sollte wohl eigentlich kein Problem sein. Ist es aber leider doch.
Ich habe mich an die Vorgaben gehalten und zuerst das EEPROM mit dem 
Wert "5" an Adresse "3" auf der ersten Seite des EEPROMS beschrieben. 
Ganz wie im Beispiel. Dann warte ich 11ms, bis die Daten ins EEPROM 
geschrieben sind und möchte diese dann wieder auslesen und an PORTB 
ausgeben.

Angeschlossen ist an PIN 14 vom PIC SCL und an 15 SDA. Vcc vom EEPROM 
ist auf +5V. WP, A0, A1, A2 und GND auf Masse.
SCL und ADA vom EEPROM sind mit 1,8k pullup-Wid. versehen.

Es wird jedoch nicht das erwünschte B'00001001' für "5" aus dem EEPROM 
ausgeben.

Quellcode ist im Anhang.


mfg   Wolfram Hildebrandt

von HDW (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mal das Datenblatt zum MSSP-Modul im PIC (für I2C zuständig) 
durchgesehen.
Auf der Homepage von sprut haben sich zwei Fehler eingeschlichen. Zum 
einen war das Modul gar nicht eingeschaltet und zum anderen war beim 
lesen ins EEPROM nach der 7-Bit-Adresse keine 1, sondern wie beim 
schreiben eine 0 als 8.Bit eingetragen.

Den EEPROM kann ich jetzt zumindest auslesen. Am PORTB wird aber nicht 
der von mir eigegebene Wert "5" ausgegeben, sondern "256". Das ist meist 
die Voreinstellung in PICs etc.
Es sieht also so aus, als ob das EEPROM 24C04 den Wert "5" gar nicht 
schreibt.

Was meint ihr?

Neuer Quellcode ist im Anhang.

von HDW (Gast)


Lesenswert?

Das Problem war, dass zum einen wie beschrieben, der Quelltext von 
sprut.de zwei Fehler aufwieß und zudem ich nicht den normalen 24C04 
erhalten hatte, sondern den St24C04. Dieser wird jedoch völlig anders 
angesteuert. Die Seite wird so z.b. über einen Pin ausgewählt und es ist 
daher im Quelltext nicht mehr die High- u.Low-Adresse mit anzugeben. 
Zudem war ich dann auch noch an PIN7 im falschen Mode.

Jetzt kann ich wunderbar von EEPROM lesen und schreiben und der Firma 
danken, die mir den ST24C04 als normalen 24C04 verkauft hat.

von Marius Wachtler (Gast)


Lesenswert?

Hallo
Kannst du mir bitte deinen code schicken. Habe das selbe problem, nur
mit einem AVR.

Danke

von Esdras (Gast)


Lesenswert?

 Thanks for asm routines.

 73's Esdras

von Mario (Gast)


Lesenswert?

Der Beitrag ist zwar älter, betrifft mich aber nun auch.

Wo ist den der 2. Fehler in Spruts Listing?
Das mit dem A0 bzw. A1 habe ich schon rausgefunden.

Wie spreche ich aber nun die vollen 4K vom ST 24C04 an?
Wenn ich nur eine Adresse übertragen kann, dann sind das 256 
Bytes....und der Rest mit dem EINEN Pin?

Für mich etwas komisch und ungünstig.
Gibt es denn noch irgendwo den normalen 24C04 den man mit 2 Adressen 
ansprechen kann?

Danke und Gruß Mario

von Thomas (kosmos)


Lesenswert?

habt ihr einen Transistor zwischen µC und EEPROM? Ansonsten muss man den 
entsprechenden Pin zw. Aus- und Eingang umschalten, wenn das nicht 
gemacht wird tut der Pin nämlich sinken und danach sourcen wodurch der 
Pullup total umgangen wird, da das Epprom die Leitung dann nicht mehr 
runterziehen kann.

von Mario (Gast)


Lesenswert?

Hallo Thomas,

von welchem Pin reden wir denn?

Im Datenblatt steht zu Pin1 (A8) Not Connected, also eigentlich nicht 
benutzt? Auf der anderen Seite dachte ich, das man hier die 
"Speicherbank" im Chip umschaltet und nicht für die I2C-Adresse 
verwendet wird. So richtig steht das aber auch nicht da.
Ich hatte den Pin auf Masse liegen, aber selbst 2 KByte kann ich doch 
mit nur einer 8Bit Adresse nicht ansprechen!?. Ich übersehe doch da was.

Den RW-Pin habe ich auch auf Masse, ich hoffe das stimmt so ???

von Thomas (kosmos)


Lesenswert?

Die Daten und die Taktleitung werden doch mit einem Pullup auf VCC 
gezogen.

Dein µC muss diese also auf Masse ziehen. Er schaltet also gegen Masse 
durch und der Pegel ist in diesem Moemtn Low. Was macht dein µC wenn er 
nicht auf Masse durchschaltet? Wenn er in diesem Fall 5V liefert dann 
wird das EEPROM die Leitung nicht auf Low ziehen können, es sei denn der 
µC liefert diese 5V über den internen Pullup. Hoffe du verstehst was ich 
meine.

Das hatte ich bei meiner ersten Schaltung mit einem Seriellen EEPROM 
auch nicht bedacht.

Manche seriellen EEPROM haben noch in der Geräteadresse ein oder mehrere 
Bits um eine Page auszuwählen siehe Anhang Bit 7

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

Zieht doch nach dem schreiben mal das EEPROM heraus und schaut mit 
Ponyprog nach was im EEPROM drin ist.

http://www.mikrocontroller.net/articles/Pony-Prog_Tutorial

von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

konnte beim Bearbeiten des Beitrages den Anhang nicht mehr einfügen

von Mario (Gast)


Lesenswert?

Hallo @all

also die Hochziehwiderstände habe ich drinne.

Erst hatte ich 1,8kOhm, dann habe ich es mal mit 10kOhm versucht.
Das beschreiben scheint zu funktionieren.
Jedenfalls konnte ich wenn ich jede Speicherzelle einzeln abfrage die 
Werte wieder auslesen.

Nun habe ich ab Adesse 00 mal geschrieben
01 02 03 04 05 06 07 08

Wenn ich das ganze per Page Write wieder auslesen will, dann kommt:
01 01 02 ?? ?? ?? ?? ??

?? kann ich nicht erkennen, da mein Display das als Block anzeigt

Das ganze habe ich auf einen 20Mhz Quarz eingestellt.
Wenn ich einen 4Mhz nehme kommt nur noch Müll.
Mit Pausen habe ich es auch schon versucht.

>Manche seriellen EEPROM haben noch in der Geräteadresse ein oder mehrere
>Bits um eine Page auszuwählen siehe Anhang Bit 7

Dann habe ich das wohl falsch verstanden.
Werde den Pin dazu mal offen lassen, wie es in der Anleitung steht (NC)

Danke für Eure Hilfe. Solche Fehler hasse ich, wo man gar nicht weiß wo 
es klemmt.

von Mario (Gast)


Lesenswert?

auslesen natürlich mit Page Read, hab mich vertippt, sorry

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.