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.
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.
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.
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.