Forum: Mikrocontroller und Digitale Elektronik I2C - Buspegel sind echt schräg.


von Martin B. (metatronik)


Lesenswert?

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

von Martin B. (metatronik)


Lesenswert?

Nachtrag: Ich habe leider kein Oszi zur Hand :(

von I2C (Gast)


Lesenswert?

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?

von Martin B. (metatronik)


Lesenswert?

>
> Und was passiert, wenn Du LOW Pegel erzwingst?

0,4 volt => LOW auf beiden Signalen

von Martin B. (metatronik)


Lesenswert?

Korrektur...

 0,04 volt => LOW auf beiden Signalen

von Wilhelm F. (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

Wilhelm Ferkes schrieb:
> Taktfrequenz auf die geringst mögliche Einstellung.

Ist dir statisch, wie oben geschrieben, nicht langsam genug

MfG Klaus

von Achim S. (Gast)


Lesenswert?

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

von Wilhelm F. (Gast)


Lesenswert?

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.

von Martin B. (metatronik)


Lesenswert?

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 .... :(

von Martin B. (metatronik)


Lesenswert?

> 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 ...

von Achim S. (Gast)


Lesenswert?

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

von Martin B. (metatronik)


Lesenswert?

> 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...

von Jörg S. (joerg-s)


Lesenswert?

> 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".

von Martin B. (metatronik)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.