I2C - Buspegel sind echt schräg.

OP #2620540
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
Gast
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.
Gast
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
Gast
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.
OP
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 .... :(
OP
> 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 ...
Gast
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
OP
> 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".
OP
> 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 !

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.