www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM 24C04


Autor: HDW (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: HDW (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: HDW (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marius Wachtler (Gast)
Datum:

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

Danke

Autor: Esdras (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 Thanks for asm routines.

 73's Esdras

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ???

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans-jürgen Herbert (hjherbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas O. (kosmos)
Datum:
Angehängte Dateien:

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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auslesen natürlich mit Page Read, hab mich vertippt, sorry

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.