www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit lesen von EEPROM auf IIC BUS


Autor: Jürgen Wagner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich hoffe einer kann mir helfen. Ich habe folgendes Problem: Ich 
will ein EEprom auslesen. Hierzu benutze ich einen 80C51 mit 
Ausgangsleitungen. P1.1 für SCL P1.2 für SDA.

Protokoll sind folgend aus.
Start Bedingung
Senden con DEVICE ADRESSE 10100000B  - Schreiben
ACK kommt
dann Word Adresse
Start Bedingung
DEVICE ADRESSE 10100001B - lesen
ACK kommt.
Jetzt setze ich die Leitung DATEN auf High, damit eine 0 den SDA Bus 
runter ziehen kann.
Nach 8 x TAKTEN kommt ein NO ACK vom MAster.
Stop Bedingung
Eigentlich sollte ich die erste Adresse Inhalt Daten gelesen haben. 
leider tut sich nichts. Ich habe festgestellt das  nach ca. 8-10 
Durchgängen manchmal ein Ergebnis da ist. Ich beobachte das auf dem 
Oszi, als ich die SDA Leitung angeschaut habe. Getriggert habe ich auf 
die Startbedingung Devive Adress lesen.

Das Protokoll scheint i.o. zu sein. Bei Low Takt der SDA wechsel, bei 
High Daten sind stabil. Meine Taktfrequenz liegt bei 50us. Soll später 
schneller werden.

Kann mir bitte jemand sagen was ich falsch mache.

Gruss
Jürgen

PS: Es ist ein EEprom 24LC16BT

Autor: hoschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo jürgen!

Ich hab mal unten kommentiert. Hatte auch lang Probleme mit manchen 
Bedingungen im I2C-Bus (PCF 8574 und m242456-32KByte EERPOM benötigen 
unterschiedliches Master-ACK).
Wenns nicht weiter hilft, dann schau mal nochmal ins Datenblatt und in 
die I2C-Bus-Spezifikation von Philips.

#Start Bedingung
>OK
#Senden con DEVICE ADRESSE 10100000B - Schreiben
>OK
#ACK kommt
>OK
#dann Word Adresse
>OK
#Start Bedingung
> Achte darauf, dass du den I2C-Bus vorher wieder frei gibst, damit erneute 
Start-Bedingung erfolgen kann.
#DEVICE ADRESSE 10100001B - lesen
>OK
#ACK kommt.
> OK
#Jetzt setze ich die Leitung DATEN auf High, damit eine 0 den SDA Bus 
runter ziehen kann.
> falsch: SCL auf High, Bit von SDA einlesen (mov c,SDA),
 SCL wieder LOW. C (carry) sichern (rlc a). Das ganze acht mal.
#Nach 8 x TAKTEN kommt ein NO ACK vom MAster.
> OK
#Stop Bedingung
> OK


Oder mail mich mal an, habe fertige I2c-Routinen abgestimmt auf 100 KHz 
Busfrequenz mit 8051.

Gruß,

hoschi

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier findest Du meinen funktionierenden Code:


http://www.specs.de/users/danni/appl/hard/i2c/index.htm


Peter

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.