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


von Jürgen Wagner (Gast)


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

von hoschi (Gast)


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

von Peter D. (peda)


Lesenswert?

Hier findest Du meinen funktionierenden Code:


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


Peter

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
Noch kein Account? Hier anmelden.