Hallo, ich will Werte auf einem 24C16 von ST speichern und wieder auslesen. Dazu habe ich den C-code aus dem i2c Ordner von Hi-tech genommen. EEPROM habe ich so angeschlossen. pin1-pin3: nc pin4 : Vss pin5 : SDA pin6 : SCL pin7 : Vss pin8 : Vdd SCL und SDA sind an PORTC (RC3,RC4) an einem PIC16F877 dran. Mein Problem: Ich bekomme beim Auslesen immer nur den Wert 255 zurück. Was läuft hier nur falsch??? Vielleicht weiß ja jemand Rat. MFG Holger
24Cxx verwende ich schon seit vielen Jahren, das Schreiben und Lesen ist wirklich einfach. Tip: Pin 1-3 auf Gnd (Vss) legen, damit die Adresse, auf die der 24Cxx antworten soll, klar ist. Den Hi-Tech Code hab ich nicht, vielleicht hast Du einen Link parat? oder den Code als Anhang.
teilweise haben die EEPROMS einen Hardware-write-protect-Eingang, damit kann man Schreibzugriffe auf deas EEPROM unterbinden, muß auf Gnd liegen, um schreiben zu können, aber hast du ja gemacht Ansonsten würde ich mal einen schon programmierten Test-EEPROM einsetzen, um zu erfahren, ob das Problem in der Lese- oder Schreibroutine liegt. Beide Leitungen sollten übrigens einen Pullup-Widerstand (3k3) nach +5V haben. @Mr.X: beim 24C16 gibt es keine Adresseingänge.
Bei der I²C- Kommunikation meldet der Slave (das EEPROM) dem Master (dem uC) mit einem Acknowledge-Bit den Status zurück. Wenn Du das Adressbyte sendest, empfängst Du eine "0" oder eine "1" als Acknowledge? Wenns eine "1" ist, dann stimmt die Adresse nicht. Bei einer "0" erkennt das EEPROM schonmal, daß es gemeint ist. In der Adresse ist das Bit 0 als R/W belegt. Hast Du eine "1" gesendet? Falls nicht, ist das EEPROM im "Write-Modus", legt den SDA hochohmig und dann ist die $FF kein Wunder.
Hallo, zunächstmal habe ich den Code hier als Dateianhang. - Den Write-Protection-Eingang (PIN 7) habe ich auf Masse gelegt. - Auch mit einem Pullup-Widerstand von 3k3 funktioniert es nicht.(Vorher hatte ich 1k8 dran) - Ich glaub, ich krieg kein Fehler beim Ack auf die Adressierung zurück. (siehe Dateianhang) - Ich spreche das EEPROM mit der Adresse 0xA0 an. => Schreibmodus. - @Fernando: bei dem Link wird leider nicht der 24c16 verwendet MFG Holger
Kleiner Nachtrag! Kann es vielleicht an der Portinitialisierung liegen? (Siehe Anhang) MFG Holger
Hallo zusammen, ich weiß nicht ob' seuch noch interessiert, aber beim seriellen 27c16 muß man unbedingt bestimmte Timings einhalten, sonst wird's nix mit dem lesen und schreiben! Detaillierte Info's siehe Anhang. Der 27c16 benutzt die Adressleitungen A0-A2 nicht und zumindest A2 sollte auf 0V gelegt werden. Pin 7 ist ein Write-protect Eingang und er muß ebenfalls auf 0V liegen, wenns mit dem schreiben klappen soll. MFG, Jürgen
Hallo, wenn immer noch nicht geht maile mir. Ich habe die Code für I2C (PIC16F876)selbs geschafft. Und es fuktioniert. Nachhilfe: 1.)AN735 (DS00735) von Microchip holen dort ist alles gut erklärt. Tschüß, Alex
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.