www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 24C16 EEPROM I2C in C-code


Autor: Holger (Gast)
Datum:

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

Autor: Mr. X (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: thkaiser (Gast)
Datum:

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

Autor: Fernando Heitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger schau mal hier rein:

http://www.microchipc.com/sourcecode/#i2c

MFG
Fernando

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

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

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag!

Kann es vielleicht an der Portinitialisierung liegen?
(Siehe Anhang)

MFG
Holger

Autor: Jürgen Weber (Gast)
Datum:
Angehängte Dateien:

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

Autor: Alex (Gast)
Datum:

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

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.