hallo, hoffe mir kann jemand helfen: arbeite mit einem Renesas 16C/6N4U und einem ST 8kx8 EEPROM. programmieren tu ich in ANSI C. cih schiebe die device adresse in den low teil des transmit registers des µC, erzeuge eine start condition und setze das bit um den inhalt des registers zu versenden. dieses bitmuster sehe ich auch einwandrei an dem SDA pin des EEPROMs (SCL auch einwandfrei, 9 clocks lang). die device adresse des bausteins ist auch richtig (E2 auf ground = 0). schicke also: 1010 (für I2C) und 0000 (für adresse, E2, A9, A8 und die letzte 0 für "write"). nun sollte der EEPROM doch eigentlich im 9ten und letzten takt die SDA leitung auf 0 ziehen und somit mit ACK (acknowledge) antworten. aber genau dies tut er nicht... hmpf mach ich was prinzipielles falsch oder kanns sein, das der speicherbaustein defekt ist? hoffe ich habs nicht zu verwirrend geschrieben. danke im voraus! mfg
Prinzipiell paßt es. Wird die Start-Condition richtig gesendet? Welchen Wert haben die Pull-Ups? SDA und SCL nicht vertauscht?
hi, start kondition ist einwandfrei, clock legt ja auch direkt los. vertauscht ist da nix. pullups sind 1k. daran dürfts auch net liegen. kann ja auch allemöglichen 8 bit folgen schicken, nur kommt halt eben im 9ten takt kein ACK :-(
nein, das ist es leider auch nicht... is not connected (=low laut datenblatt), hatte ihn aber auch schon auf 0 gezogen... selbe resultat leider :-(
Dann vielleicht ein Timing Problem, d.h. Prozessor zu schnell. Ich würds mal mit nem Software-I2c probieren, da kann man noch waits einfügen.
hmm... ok, ich guck morgen noch mal auf der arbeit und probier bissl rum... sag dann wieder bescheid... danke erst mal für die antworten bis jetz. n8!
1k Pullup kommt mir was niedrig vor - kenne eigentlich immer nur Beschreibungen mit 10k Pullup. Vielleicht noch mal prüfen ob SDA mit SDA und SCL mit SCL verbunden sind. Mit welcher Frequenz arbeitet Dein I2C? 100k, 400k? Vielleicht ist der Speed für das EEPROM zu hoch (wobei moderne Chips eigentlich alle die 400k können sollten).
sorry, meinte natürlich auch 10k, die ich dran hab. SDA und SCL sind (leider) nicht vertauscht. im mom arbeite ich mit 111kHz, hab aber auch schon 20kHz gehabt; mit dem selben ergebnis :-( hab in der zwischenzeit mal den EEPROM baustein gewechselt... an dem liegt es auch nicht :-(( WC pin liegt auf 0 (=schreiben möglich), hab ihn auch schon auf NC gelassen. E2, also die hardwareadresse ebenfalls auf ground. weiss langsam nicht mehr, was das sein kann...
Hallo Marcus, ich habe momentan ein sehr ähnlich gelagertes Problem. Mega8, Software I2C und ein 2k EEPROM. Allerdings bekomme ich bei jeder Adresse die ich sende ein ACK (EEPROM hat 0xA0) und ein ACK erhalte ich von 0xA0 bis 0xAE. Hast Du schon herausgefunden woran es liegt? danke Gruß Boris
hi Boris, bei mir lag es vermutlich daran, das ich die start-bedingung nicht richtig generiert habe. die klappt jetzt. dafür will der start-detection interrupt jetzt nicht auslösen :-( und somit wird auch erst gar nicht das erste byte geschrieben/gesendet. ich arbeite mit dem fertigen beispiel für I²C von Renesas für den µC M16C6N4, aber irgendwas stimmt noch nicht... verdammte hacke...
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.