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
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.
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.
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
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.
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 ???
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
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
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.
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.