Forum: Mikrocontroller und Digitale Elektronik Problem mit ext. EEPROM


von Steffen Graap (Gast)


Lesenswert?

Ich versuche mit einem MEGA128 zwei EEPROM's M24512 und eine Uhr PCF8563 
über den Hardware-I²C-Bus anzusprechen. Die Uhr läßt sich lesen und 
beschreiben. Der EEProm läßt sich nur auslesen, jegliche Schreibversuche 
scheitern. Die Daten werden richtig zum EEPROM hin übertragen und auch 
vom EEPROM bestätigt. Wenn ich ihn aber danach auslese steht wieder nur 
0xFF drinn. Der WC-Pin liegt auf GND. Kann mir bitte jemand ein paar 
Tips geben, was ich oder der EEPROM falsch mache.

von Peter D. (peda)


Lesenswert?

Du mußt erst die 2 Adreßbytes schreiben, erst das 3. und folgende sind 
dann die Datenbytes.

Schreiben erfolgt aber erst, wenn Du ein Stop gesendet hast.

D.h. wenn Du schon die Daten übertragen hast und es Dir doch anders 
überlegst, brauchst Du nur statt des Stop ein neues Start zu senden und 
es erfolgt nichts.

Daß das Schreiben erfolgt merkst Du auch daran, daß nach dem Stop der 
EEPROM für etwa 5..10ms nicht ansprechbar ist, d.h. auf seine Adresse 
kriegst Du kein ACK zurück.


Peter

P.S.:
Als Single-Master ist Software-I2C aber einfacher als Hardware-I2C.

von Steffen Graap (Gast)


Lesenswert?

Hatte alles richtig, bis auf das Stop. Das wurde nicht übertragen, und 
somit wurde auch nichts gespeichert.

zum Thema Software- HardwreI2C
ich hatte früher schon die Sowftware-I2C von Pavel (CodeVision)benutzt, 
funktionierte zwar, war aber viel zu langsam. Das Programm wartete immer 
auf die I2C.
Mit meiner jetzigen Hardware-I2C frage ich bei jedem 
Hauptschleifendurchlauf den Zustand der I2C ab und kann dann darauf 
reagieren. Somit kein warten auf EEProms, die noch mit schreiben 
beschäftigt sind.

von Bernhard T (Gast)


Lesenswert?

Steffen,
das sehe ich ganauso seit dem ich das hauptsächlich mit Switch TWSR¦0xF8 
und ner case Reihe abarbeiten lasse, finde ich die TWI echt einfach 
praktisch einfach.
Gruß Bernhard

von Peter D. (peda)


Lesenswert?

@Steffen,

"Das Programm wartete immer auf die I2C"

Das hat aber nichts mit Hard- oder Soft-I2C zu tun, sondern mit dem 
Programmierstil.

Du kannst genau so gut die 10ms mit der Hardware-I2C vergeuden.

Bzw. Du kannst die Soft-I2C-Schreibroutine nach dem Stop sofort 
verlassen und was anderes tun. Und dann erst nach 10ms wieder 
vorbeischauen, oder ab und zu auf das ACK pollen.


Das ist ja der Trick bei den MCs:

Sie arbeiteten alles in der Hauptschleife ab und trotzdem erscheint es, 
als machen sie vieles gleichzeitig, also Multitasking.

Einzige Bedingung:
Jede Task hört sofort auf, wenn sie mal länger auf etwas warten muß, 
merkt sich, wo sie das nächste Mal weitermachen muß und geht zur 
Hauptschleife zurück.

Nur kurze Verzögerungen, wie z.B. die 60µs beim 1-Wire muß man 
verwarten, aber 60µs sind ja für den Menschen betrachtet keine merkbare 
Zeit.


Wenn man das nicht beachtet, dann hilft auch die beste Hardware nichts 
und Dein Programm wird unweigerlich schnarchlahm.


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.