Moin, ich bin (mal wieder) mir meinem Möglichkeiten am Ende: Situation: I2C-Bus, SDA&SCL je mit PULL-UP 4,7k gegen Vcc, VCC = 5 Volt 7 Mega32 hängen dran. Jeder Mega32 ist mit foldenden init-Program @8MHZ bestückt: DDRA = 0; // Eingabe PORTA = 255; // PULL UP DDRB = 0; // Eingabe PORTB = 255; // PLL UP DDRC = 0; // Eingabe PORTC = 255; // PULL UP DDRD = 0; // Eingabe PORTD = 255; // PULL UP for (;;) { } JTAG ist per Fuse bei jedem Mega32 abgeschaltet. PortC sollte also 'normal' tun. Erwartungswert: Auf SDA sowie SCL sollten 5 Volt anliegen. IST-Situation: SCL ist 5 Volt, SDA liegt zwischen 1,1..1,5 Volt je nach Laune der Dre*********-ICs. Irgendeine Idee? Leider sind die 7 Mega32 im SMD-Gehäuse aufgelötet und die einzelnen Leiternbahnen möcht ich auch nicht (testweise) zerstören. P.s. die Kommunikation hat anfangs zwischen 1 Master und einem Salve funktioniert. (viel später - als ich dann mit den anderen 5 Salves reden wollen hängte er sich beim init auf (Endlosscheife bei: while (!(TWCR & (1<<TWINT))); - und auf der Suche warum kam ich zum schluss das der Buspegel eben nicht stimmt. P.s. Wenn einer der Mega32 via DDRC = 255; // Ausgabe PORTC = 255; // HIGH erzwingt - liegt an SDA und SDL jeweils 5 Volt an. Die Leiterplatte sieht gut aus, ist von Profis gebaut und laut durchgangsprüfer habe ich auch keine 'kurzen' drin.... HELP
Martin Bauer schrieb: > P.s. Wenn einer der Mega32 via > > DDRC = 255; // Ausgabe > PORTC = 255; // HIGH > > erzwingt - liegt an SDA und SDL jeweils 5 Volt an. Und was passiert, wenn Du LOW Pegel erzwingst?
> > Und was passiert, wenn Du LOW Pegel erzwingst? 0,4 volt => LOW auf beiden Signalen
Martin Bauer schrieb: > PULL-UP 4,7k gegen Vcc Wie ist denn die Taktfrequenz auf dem I2C-Bus gewählt, wie sieht der Bus leitungsmäßig aus? Oder habe ich was übersehen, überlesen? Bei Philips, dem Erfinder des I2C, gibt es eine Reihe Papiere zu I2C auf deren Homepage. Unter anderem die elektrische Gestaltung des Busses, Graphen über Pullup-Widerstände in Abhängigkeit der Taktfrequenz, und vieles andere. Kann sein, daß man die Papiere (PDF) heute beim Nachfolger NXP auch findet. Zur Fehlereingrenzung bei solchen Geschichten setze ich erst mal die Taktfrequenz auf die geringst mögliche Einstellung.
Wilhelm Ferkes schrieb: > Taktfrequenz auf die geringst mögliche Einstellung. Ist dir statisch, wie oben geschrieben, nicht langsam genug MfG Klaus
ein Oszi wäre in einem solchen Fall schon sehr praktisch. Kannst du dein Multimeter vielleicht mal auf AC-Kopplung stellen um zu prüfen, dass die 1,x V wirklich als statische Spannung anliegen und nicht doch irgendein Controller an der SDA-Leitung wackelt? Wenn das Signal tatsächlich statisch anliegt, solllte die AC-Kopplung 0V anzeigen. viele Grüße Achim
Klaus schrieb: > Wilhelm Ferkes schrieb: >> Taktfrequenz auf die geringst mögliche Einstellung. > > Ist dir statisch, wie oben geschrieben, nicht langsam genug > > MfG Klaus Oh, sorry, habe ich da was falsch verstanden? Kann man tatsächlich den I2C-Controller einzeltaktweise betreiben? Immerhin beschrieb Martin: Martin Bauer schrieb: > Nachtrag: Ich habe leider kein Oszi zur Hand :( Und ein Oszi braucht man am laufenden Bus, oder? Mit dem DMM kann man da viel Mist messen.
Wilhelm Ferkes schrieb: > Klaus schrieb: > >> Wilhelm Ferkes schrieb: >>> Taktfrequenz auf die geringst mögliche Einstellung. >> >> Ist dir statisch, wie oben geschrieben, nicht langsam genug >> >> MfG Klaus > > Oh, sorry, habe ich da was falsch verstanden? Kann man tatsächlich den > I2C-Controller einzeltaktweise betreiben? Das mache ich ja nicht. Das ist nur testweise weil ich das Problem irgendwie in der Hardware vermute und nicht am Systemkonzet bzw. an der Programmierung. Daher testweise die Sicherstellung dass die Pegel stimmen -> was eben nicht passt. Wenn alle Mega32 auf "Pull-UP" mit Tri-Stae sind sollten die Pull-Ups mit 4,7 immer High erzeugen .... :(
> Kannst du dein Multimeter vielleicht mal auf AC-Kopplung stellen um zu > prüfen, dass die 1,x V wirklich als statische Spannung anliegen und > nicht doch irgendein Controller an der SDA-Leitung wackelt? Wenn das > Signal tatsächlich statisch anliegt, solllte die AC-Kopplung 0V > anzeigen. Der Multimeter zeigt auf SDA und SCL jeweils 0 Volt AC an.... (bei der Einstellung "Auto") Was auch immer das Ding jetzt gemessen hat.... P.s. ich werde jetzt mal testweise jeden einzelnen Mega32 jeweils auf High/low-Pegel zwingen und jeweils messen ...
ok, dann wird die Leitung wirklich statisch von irgend einem Leckstrom nach unten gezogen, so dass sich im Verhältnis zu den parallel wirkenden Pullups der schräge Pegel einstellt. Einen Fehler in einem der ICs kann ich auch nicht ausschließen, aber mein erster Kandidat wäre was auf der Platine (z.B. ein Lötspratzler, der einen nicht ganz niederohmigen Schluss nach Masse macht). Für den Durchgangsprüfer wäre das zu hochohmig (im kOhm Bereich), aber um die schwachen Pullups zu stören reicht es. Ich würde die SDA-Leitung nochmal genau optisch prüfen und ggf. mit einer Bürste zwischen die Controller-Pins gehen, wo sich gerne was versteckt. (auch wenn SDA eigentlich nicht neben einem GND-Pin liegt). schöne Grüße Achim
> Ich würde die SDA-Leitung nochmal genau optisch prüfen und ggf. mit > einer Bürste zwischen die Controller-Pins gehen, wo sich gerne was > versteckt. (auch wenn SDA eigentlich nicht neben einem GND-Pin liegt). Du bist schuld, dass ich mir jetzt 'ne neue Zahnbürste kaufen darf... :) P.s. Ich habe gerade im Eiltempo jeden MEga32 auf "immer" low bzw. "immer" high" programmiert ... und immer haben sich stabile 0 bzw. 5 Volt ergeben.... Ich tippe inzwischen auch auf einen Leckstrom ... woher auch immer...
> Irgendeine Idee? Leider sind die 7 Mega32 im SMD-Gehäuse aufgelötet und > die einzelnen Leiternbahnen möcht ich auch nicht (testweise) zerstören. Wenn es nicht gerade TSSOP ist, lassen sich die SMD Pins recht einfach "hoch löten".
> Ich würde die SDA-Leitung nochmal genau optisch prüfen und ggf. mit > einer Bürste zwischen die Controller-Pins gehen, wo sich gerne was > versteckt. (auch wenn SDA eigentlich nicht neben einem GND-Pin liegt). !!!Bürsten hat geholfen!!! I'm happy again. Thanxs a lot !
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.