Hallöchen, ich habe momentan ein sehr merkwürdiges Problem. Ist mir so noch nicht untergekommen. Und zwar geht es um eine I2C-Kommunikation zwischen dem MSP430F6638 und dem Temperatur- und Feuchtigkeitssensor CC2D_AD321. Ich habe mich zunächst aus den Codebeispielen von TI bedient. Mein uC ist der Master und empfängt nach senden der Slave-Adresse die Datenwerte. Ich habe mir einen Breakpoint in der ISR gesetzt, um zu sehen, ob ein Empfangs-Interrupt ausgelöst wird. Oft springt er da rein. Ab und zu macht er das aber auch nicht. Wenn ich mit dem Oszi an SDA und SCL die Spannung messe bemerke ich nach Kompilierung meines Programms (Programm aber noch nicht gestartet), dass die SDA-Leitung auf Low-Potential ist (0V). Eigentlich sollte diese LEitung ja auf Betriebsspannung liegen über den eingebauten Pull-Up von 2,2 kOhm. Wenn ich an SCL gehe sehe ich dort die Betriebsspannung und wenn ich dann wieder an SDA gehe, habe ich dort plötzlich auch Betriebsspannung. Und dann gelange ich auch in die ISR, wenn ich dann das Programm ausführe. Kann sich das jemand erklären, warum die Leitung auf Low liegt? Ich danke euch schonmal für eure Hilfe:) Florian
Florian schrieb: > Wenn ich mit dem Oszi an SDA und SCL die Spannung messe bemerke ich > nach Kompilierung meines Programms (Programm aber noch nicht gestartet) Wenn das Programm überhaupt nicht läuft, wieso erwartest du dann irgend etwas an den Pins? > Wenn ich an SCL gehe sehe ich dort die Betriebsspannung und wenn ich > dann wieder an SDA gehe, habe ich Dort plötzlich auch Betriebsspannung. Hört sich an wie ein potentialfreier Eingang. Das sollte mit den Pull-Ups nicht möglich sein.
Ich erwarte eigentlich, wenn das Programm noch nicht läuft, dass durch den Pull-Up die Leitungen auf High sind. Im Datenblatt zu dem Sensor steht ja, es sollen Pull-Ups verwendet werden. Das komische ist einfach, dass es nur ab und zu auftritt und genau dann, wenn ich kurz vor Programmstart ein Low auf der SDA Leitung messe. Also iwas muss den Kanal ja runterziehen.
Es gibt Bausteine, die können nach einem Reset schon mal den SDA auf L ziehen. Hierzu gibt es - gerade bei IIC-EEPROMs - schöne Codebeispiele, wie man das revidieren kann. Vielleicht macht der Sensor ja auch so was. Da hilft z.B. 10x clocken (wenn der SDA schon auf L liegt), andernfalls sollte man einfach mal ein STOP senden (wenn der SDA nicht auf L liegt). Dadurch bekommt man zu 99% einen freien Bus hin. Gruß TK
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.