Hi, ich habe Probleme mit meinem I2C-Bus. Ursprünglich wollte ich einen Uhr-Chip (PCF8583) ansteuern. Nachdem das nicht geklappt hat, habe ich mich nun an einem I2C-ROM "24C32" (von Atmel) herangewagt. Wieder nichts. Also habe ich mein Programm auf das Minimalste beschränkt (siehe Anhang!). Es wird eine Startbedingung gesendet und dann die Adresse des I2C-ROM (1/0/1/0/A1/A2/A3/RW und A1=A2=A3=0 (GND)). Dann sollte der Chip eigentlich ein Ack.-Bit senden (SDA auf GND). Genau das tut er aber nicht!!! Ich überprüfe das, indem ich für kein Ack. ein "B" über das UART an den PC sende, und für ein Ack. ein "A". Lege ich von Hand das Bit auf GND, zeigt mein PC auch "A" an. Ich denke, daß meine Schaltung richtig aufgebaut ist. Die Adressierung (A1/A2/A3) stimmt auch. Der SDA- und der SCL-Bus ist jeweils über einen 470-Ohm-Widerstand an VCC angeschlossen. Ich sehe es doch auch richtig, daß High beim I2C VCC und LOW eben GND bedeutet, oder?!? Für Tips bin ich echt dankbar, weil ich nun schon ewig rumprobier! :-) Danke!!! Sebastian
Du darfst den SDA nur ändern, wenn SCL = 0 ist, sonst wird es je nach Richtung ein neues Start bzw. ein Stop. Beim ACK hältst Du dich aber nicht daran. Außerdem sind 470R recht heftig, die meisten I2C-Chips sind nur für 3mA spezifiziert. Nimm besser 1,8k ... 10k. Peter
Hi Peter, schonmal vorab: Es klappt! :-)) Es lag wirklich an Deiner Vermutung. Ich habe den SCL schon auf LOW gezogen, allerdings erst, nachdem (!) ich SDA als Eingang konfiguriert hatte. Nun setze ich erst (!) SCL auf LOW und dann konfiguriere ich SDA als Eingang. Nun weite ich das Programm wieder etwas aus ("Proceduren" für Start, Lesen usw.) und melde mich dann nochmal, ob immer noch alles klappt. Die Widerstände habe ich auf 10-kOhm erhöht, danke auch für diesen Tip! :-) Viele Grüße, Sebastian
Hallo, nun habe ich das ganze mal schön unterteilt in Senden, Empfangen, Start-Bedingung usw. Das Senden klappt immer noch, das Ack.-Bit wird vom Slave gesetzt. Nur mit dem Lesen klappt's noch nicht so recht. Ich möchte an die allererste Adresse ein "S" (ASCII 83) senden und dann wieder lesen. Beim Lesen bekomme ich aber nur eine "0" (ASCII). Ein Fehler kann ich leider nicht finden... Hat noch jemand (Peter!?!) ein Tip für mich? Vielen Dank schonmal!!! :-) Sebastian
Hi, hm ich glaube das erste Bit ist reserviert erst ab den zweiten Bit kann man daten schreiben und wieder lesen. Ich kann ´mich aber auch irren bin nub. Dirk
Hi Dirk, davon hab' ich in der Doku nichts gelesen. Vielleicht meinst Du das Ack.-Bit? Hat sonst noch jemand einen Tip? Wäre echt super!!! Danke! :-) Sebastian
Hi Leute, ich hab' die Fehler (zum Glück!) alle selber gefunden und nun klappt alles! Ich hänge hiermit meine I2C-Software-Lösung in Assembler als Include-Datei an. Wer Fragen hat, kann hier posten oder mir mailen. Viel Spaß damit! Grüße und danke nochmal an die Helfer, Sebastian (mailto:s_wille@t-online.de)
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.