mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C - EEPROM 24C128 - SSPBUF immer WRITE-Addresse


Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe ein Problem mit dem Beschreiben und Lesen eines I2C-EEPROMs.
Im Anhang habe ich mal den Test-Code eingefügt.

Ich schreibe zuerst die ersten 10 Speicher-Adressen des EEPROMs voll und 
möchte sie dann wieder auslesen und auf einem LCD-Display ausgeben.
Das Ausgeben auf dem Display ist ja kein Problem. Leider wird dort immer 
die "Schreib-Adresse" (0xA1 bzw. 161d) ausgegeben wird.

Kann mir jemand einen Tipp geben wo das Problem liegt?

Danke schonmal,
 Gruß
 Tobias

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist denn der EEPROM auf Adresse 0xA0 angeschlossen, dass heißt sind die 
Pins A0-A2 auf Masse gelegt?

Sven

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz sicher.

Habe es auch noch einmal nachgemessen.

Mit einer Software-Variante (I2C-Emulation) konnte ich erfolgreich lesen 
und schreiben.

Nun möchte ich aber gerne die Hardware-Variante nutzen (da der 16f877a 
das ja bietet ;-)

Gruß,
 Tobias

Autor: MichiB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

du liesst die Adresse zum Lesen zurück.

Ich glaube der PIC lösst nen Interrupt sobald die Adresse gesendet wurde 
un vom EEPROM mit ACK bestätigt wurde. Du musst also auf den nächsten 
Interrupt warten.

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe es gerade noch einmal getestet.
TRISC3=1;           // set SCL and SDA pins as inputs
TRISC4=1;
SSPADD = 9;            // 400k at 16Mhz clock
SSPCON = 0b00001000;      // set I2C master mode
SSPEN = 1; //MSSP-Modul enable

SSPIF = 0; // Interrupt-Flag löschen
SEN=1; // Bus-Übernahme anweisen
while(!SSPIF); // Solange warten bis SSPIF gesetzt wurde
SSPIF = 0; // manuelles rücksetzen

im oberen Teil richte ich den PIC als Master ein.
Im Unteren Teil warte ich nur darauf, dass der PIC den Bus übernimmt.
Er bleibt aber immer in der while-schleife (while(!SSPIF)) hängen.
Warum?
Wenn ich anweise den Bus zu übernehmen (mit SEN=1) müsste dann nach der 
Übernahme das Flag SSPIF gesetzt werden. (GIE ist 1)

Kann mir da jemand helfen?
Hat jemand vielleicht ein Beispiel-Programm für Hardware-i2c mit Pic in 
C ?

Ich versuche das nun seit 2 Wochen! Das ist echt deprimierend.

Danke & Gruß,
 Tobias

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PUSH!!

(Ist lange her, aber das Problem besteht noch genauso wie oben 
beschrieben) ;-)

Danke schonmal...

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den ganzen Quatsch schon länger in PicBasic laufen...

Du erwähnst extra, daß GIE=1 ist. Hast Du den SSPIE auch enabled ? Hast 
Du noch eine Interrupt-Service-Routine, die den SSPIF löscht (bevor die 
While-Schleife es merkt) ?

Hast Du die SDA- und SCK-Leitung mit einem Pull-Up-Widerstand versehen ?

Sieh Dir mal das Status-Bit BCLIF an. Viel mehr kann bei einer 
Start-Condition nicht schief gehen.

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.