24C16 EEPROM I2C in C-code

Gast #29922
Lesenswert?

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
Gast #29923
Lesenswert?

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.
Gast #29924
Lesenswert?

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.
Gast #29925
Lesenswert?

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.
Gast #29927
Lesenswert?

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
Angehängte Dateien:
Gast #29929
Lesenswert?

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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren