Probleme mit I²C Bus wenn Arduino an externer Stromquelle

Hallo Arduino Freunde,

seit einigen Wochen arbeiten ein Freund und ich an einem Projekt bei dem wir das allseits beliebte Spiel "Looping Louie" mit einem Arduino und vielem mehr erweitern.

Das Projekt:

  • Arduino Mega 2560
  • Looping Louie erweitert für 8 Spieler
  • Motorsteuerung durch PWM (schnell, langsam, rückwärts, vorwärts, stop, run)
  • Dadurch verschiedene Spielmodis realisiert
  • LEDs zur Beleuchtung eingebaut (mit Vorwiderständen, angepasst auf 5V)
  • Taster mit zugehörigen "warn"-Leds eingebaut. Die Taster bewirken einen "Turbo-boost" an den Motor. Die Led daneben zeigt an, wenn der Turboboost bereit ist. Hat man ihn benutzt, erlischt die Led solange, bis der
    Cooldown abgelaufen ist.
  • I²C Bus eingebaut um LEDs und Turbotaster anzusteuern. Hängt beim Arduino Mega an Pins 20 & 21 (SDA & SCL). Außerdem wird der Bus über eine externe Stromquelle versorgt (5V).
  • Die externe Stromversorgung für z.B. die LEDs bzw. den I²C Bus ist ein altes PC Netzteil an dem wir 5V abgreifen. Auch wenn wir den Arduino über extern laufen lassen wollen, benutzen wir dieses Netzteil.

Die Steuerung:

  • Alles wird per Touchscreen gesteuert
  • Dazu haben wir ein Hauptmenüscreen geschrieben mit verschiedenen Untermenüs: Motorsteuerung, Ledsteuerung, Log
  • Motorsteuerung über Arduinos PWM: Der Motor lässt sich an/aus schalten, langsamer/schneller drehen, rückwärts/vorwärts drehen und das alles kombiniert in verschiedenen Spielmodis
  • Led-Steuerung über I²C Bus: Wir haben einige Leds zur Beleuchtung eingebaut. Diese können wir Paarweise mit unserem eingebauten I²C Bus ansteuern, d.h. an/aus (Output).
  • Turbo-Steuerung über I²C Bus: Die Turbotaster sowie die zugehörigen Warnleds werden ebenfalls über den I²C Bus angesteuert. Turbotaster -> Input, Leds -> Output.

Das Problem:

  • Wenn wir den Arduino mit einem USB-Kabel am Laptop hängen haben, funktioniert alles wie es soll. Keine Probleme. (Der I²C Bus wird extern versorgt)
  • Wenn der Arduino über die externe Stromquelle versorgt wird, scheinen alle Funktionen die mit dem I²C Bus zusammenhängen NICHT zu funktionieren (also Turbo & LED Steuerung). Alle anderen gehen.
    (Hierbei sei gesagt, die externe Stromquelle kommt vom alten PC Netzteil. Hier haben wir 5V abgegriffen.)
  • Wir haben versucht das Problem dahingehend zu lösen, indem wir einen USB zu Strom Adapter benutzt haben. Also den Arduino mit dem USB Kabel verbinden, das USB Kabel in den Adapter und diesen in die Steckdose.
    Hier treten die selben Probleme auf wie beim Versorgen mit dem Netzteil.

Woran kann das liegen?
Uns wundert diese ganze Sache vorallem, weil wir in allen Versuchen den I²C Bus an der externen Stromquelle hängen haben. Lediglich die Stromversorgung des Arduinos hat sich verändert.

Also nochmal zusammengefasst:
-Arduino per USB an Laptop: Alles geht
-Arduino an externes Netzteil (5V): Motorsteuerung & Touchscreen laufen. I²C Bus Funktionen nicht.
-Arduino per USB an Steckdose: Motorsteuerung & Touchscreen laufen. I²C Bus Funktionen nicht.

Wäre schön wenn jemand von Euch einen guten Rat liefern könnte :wink:

Viele Grüße
LL :wink:

Die Masse der 5V Stromversorgung ist mit der Masse des Arduino zusammengeschlossen?
Grüße Uwe

uwefed:
Die Masse der 5V Stromversorgung ist mit der Masse des Arduino zusammengeschlossen?
Grüße Uwe

Habe das Projekt leider gerade bei meinem Kollegen liegen aber soweit ich mich erinnern kann haben wir es momentan so:

-Die Masse vom I²C Bus geht zurück ans Netzteil, da wo auch der Strom herkommt.
-Die Masse vom Arduino geht bei externer Stromversorgung ans Netzteil, da wo auch der Strom herkommt.
-Die Masse vom Arduino bei USB geht wohl zum USB zurück.

Allerdings kann ich das nicht 100% sagen, da ich gerade nicht nachsehen kann.
Liegt hier eventuell das Problem?

Gruß
LL

Wenn die Massen nicht zusammengeschaltet sind haben die verschiedenen Bauteile keinen gemeinsamen Referenzpunkt und darum können sie ein H bzw L auf den Datenleitungen (in diesem Fall I2C) nicht erkennen.

Bestimmte Kombinationen von Netzteilen können funktionieren da bei Computernetzteilen die Masse mit der Erdung verbunden ist und so über den Erdungsleiter die verschiedenen Massen verbunden sind. Dies ist aber kein anzustebender Zustand da zwischen den verschiednen Erdungsleitern Spannungen bestehen können (Brumschleifen)

Grüße Uwe

Danke für deine Hilfe!
Wir werden das am Wochenende überprüfen.

Danach Berichte ich, ob das die Lösung des Problems war oder nicht.
Hoffen wir das Beste :wink:

Gruß,
LL

So, wir haben nun verschiedene Sachen ausprobiert:
Masse zusammen, Masse getrennt, anderes Netzteil (230V auf 5V Adapter) und 230V zu USB 5V Adapter.

Hat alles nichts genutzt, der I2C-Bus wollte nicht.

Da mit dem 230V auf USB 5V Adapter die LEDs ab und zu angegangen sind (komplett willkürlich) und der Arduino Mega 2560 von 5V-20V ausgeschrieben ist haben wir mal 12V vom PC Netzteil an die externe Stromquelle angeschlossen. Dies brachte den I2C-Bus zum laufen. Also ist das Problem GELÖST!

Der I2C-Bus bekommt nun mehr Spannung. Als 5V am Arduino angeschlossen waren, hatte der I2C-Bus 5,29V vom Netzteil bekommen. Mit 12V am externem Stromanschluss des Arduinos bekommt der I2C-Bus nun 5,49V.

Warum die Spannung steigt und warum der I2C-Bus deswegen funktioniert kann ich an dieser Stelle nicht sagen. Ich hoffe nur, dass die LED`s die für 5V mit entsprechenden Vorwiderständen eingebaut wurden die Spannung von 5,49V überstehen .

Grüße

Looping Louie Projektteam 8)

Die LED überleben das sicher, Ich habe bei einer solchen Spannung mehr Angst um den ATmega da dieser max für 5,5V spezifiziert ist.

Bist Du sicher daß Dein Meßgerät nicht etwas zuviel mißt?

Grüße Uwe

hi,

hab' ich da jetzt was überlesen oder hattet Ihr ein 5V-netzteil an der buchse des arduino für die externe stromversorgung hängen? also 5V an der runden buchse? das kann nicht gehen...
auch an Vin sind 5V zu wenig. das müssen 7-12V sein...

wenn Ihr ein netzteil habt, das zuverlässig 5V liefert, könnt Ihr es an den 5V-pin des mega anschliessen.

gruß stefan

uwefed:
Ich habe bei einer solchen Spannung mehr Angst um den ATmega da dieser max für 5,5V spezifiziert ist.

Hi Uwe,
Was meinst du damit? Wie Eisbaer schreibt, haben auch wir gelesen, dass an der runden Buchse zwischen 7V-12V (sogar von 20V war die Rede) anzubringen sind.

Eisebaer:
hab' ich da jetzt was überlesen oder hattet Ihr ein 5V-netzteil an der buchse des arduino für die externe stromversorgung hängen? also 5V an der runden buchse? das kann nicht gehen...
auch an Vin sind 5V zu wenig. das müssen 7-12V sein...

Hi Stefan,
ja, wir hatten 5V an der runden Buchse angelegt. Nun sind es 12V und es klappt.
Wir wundern uns allerdings warum es mit USB Stromversorgung, die ja auch nur 5V liefert, geklappt hat und die 5V ausm Netzteil zu wenig waren.

Sorry, ich bin ja auch noch Neuling. Aber in meinen aktuellen Projekt adaptiere ich alles über den i2c-Bus und es klappt einwandfrei auch bei einer Spannung von 4.98 V.

  1. sicherlich müssen die Massen alle zusammengeschlossen werden.
  2. Sind auch die notwendigen PullUp-Wiederstände bei den Anschlüssen SCL/SDA vorhanden?
  3. Für die Ansteuerung der LED's sind doch noch zusätzliche Bauteile notwendig wie PCF8574 (nutze ich zurzeit).
  4. Ist die Leistung der separaten Spannungsversorgung für den i2c ausreichend?

LoopingLouie:

uwefed:
Ich habe bei einer solchen Spannung mehr Angst um den ATmega da dieser max für 5,5V spezifiziert ist.

Hi Uwe,
Was meinst du damit? Wie Eisbaer schreibt, haben auch wir gelesen, dass an der runden Buchse zwischen 7V-12V (sogar von 20V war die Rede) anzubringen sind.

Das ist die max Versorgungsspannung des ATmega328 Kontroller (des nackten ICs).

Hi Stefan,
ja, wir hatten 5V an der runden Buchse angelegt. Nun sind es 12V und es klappt.
Wir wundern uns allerdings warum es mit USB Stromversorgung, die ja auch nur 5V liefert, geklappt hat und die 5V ausm Netzteil zu wenig waren.

Der Spannungstabilisator und die Schutzdiode verlieren ca 2V zusammen. Bei solchen Versorgungsspannungen zum Teil außerhalb der Spezifikation einiger Bauteile ist schwer die Reaktionen vorherzusagen.
Grüße Uwe

hi,

es gab hier ein riesenverständigungsproblem. einfach deshalb, weil keiner damit rechnet, daß Ihr ein solches, doch recht beachtliches projekt mit "falsch" angeschlossenem arduino geschafft habt. uwe meinte, Ihr hättet die 12V an den 5V-eingang des arduino angeschlossen, deswegen die angst um den controller.
wenn Ihr über die runde buchse oder Vin versorgt, müssen es mindestens 7V sein, der rest wird verbraten. 5V-pin und USB gehen direkt ohne spannungswandler und diode rein, dort gibt's keinen verlust, aber risiko bei verpolung oder zuviel spannung.
wenn Ihr mit einem 5V-netzteil über den 5V-pin versorgt, muß es ein gutes netzteil sein, viele brechen unter last dann auf 3-3,5V ein.

gruß stefan

Eisebaer:
hi,
es gab hier ein riesenverständigungsproblem. einfach deshalb, weil keiner damit rechnet, daß Ihr ein solches, doch recht beachtliches projekt mit "falsch" angeschlossenem arduino geschafft habt. uwe meinte, Ihr hättet die 12V an den 5V-eingang des arduino angeschlossen, deswegen die angst um den controller.

Nee, Stefan, das hatte ich nicht befürchtet. Das Verständnisproblem liegt zwischen uns beiden :wink: :wink: :wink:

Ich habe umgekeht befürchtet (5V in die Netzteilbuchse). Da wird nichts kaput aber funktioniert auch nicht so richtig.

Grüße Uwe

uwe, uwe, wie kann's ein verständigungsproblem zwischen südtirol und österreich geben``
wir sind doch lei oans. :stuck_out_tongue:
gruß nach bozen, stefan

Manchmal geschehen komische und nicht zu erklärende Dinge. :wink: :wink: :wink:

Ahhhhh, ihr verwirrt uns total :slight_smile:

Also nochmal: Wir haben im Moment 12V an der Runden Strombuchse (rechts neben dem USB Eingang).
Ist das nun gefährlich für den Arduino Mega oder nicht (ist der AT Mega davon betroffen)?
Auf: http://arduino.cc/en/Main/ArduinoBoardMega steht folgendes:

Operating Voltage: 5V
Input Voltage (recommended): 7-12V
Input Voltage (limits): 6-20V

Somit müssten wir mit unseren 12V doch im sicheren Bereich liegen oder?
Zumindest funktioniert so alles einwandfrei. (noch)

Eisebaer:
weil keiner damit rechnet, daß Ihr ein solches, doch recht beachtliches projekt mit "falsch" angeschlossenem arduino geschafft habt.

  1. Danke ^^
  2. Meinst du "ursprünglich falsch angeschlossen" (also mit 5V in Buchse) oder "immernoch falsch angeschlossen" (also mittlerweile mit 12V in Buchse)

mcGeorge:
2. Sind auch die notwendigen PullUp-Wiederstände bei den Anschlüssen SCL/SDA vorhanden?
3. Für die Ansteuerung der LED's sind doch noch zusätzliche Bauteile notwendig wie PCF8574 (nutze ich zurzeit).
4. Ist die Leistung der separaten Spannungsversorgung für den i2c ausreichend?

Hi mcGeorge,
zu 2.: meinst du damit, ob wir die Pins in der Software auf "High" gesetzt haben oder Hardware Widerstände?
zu 3.: Wir benutzen ebenfalls PCF8574 :slight_smile:
zu 4.: Vorher warens 5,29V am i2c, mittlerweile (nach Erhöhung der Spannung an der Arduino Buchse) 5,49V

Viele Grüße
LoopingLouie Team :stuck_out_tongue:

hi,

12V in buchse ist schon in ordnung. je nachdem, wieviel strom Ihr zieht, kann das kleine, flach hingelegte dreibein neben der buchse bei 12V recht warm werden. wenn Ihr dem was gutes tun wollt, pappt einen passenden kühler oben drauf. ist nicht tragisch, aber mir als nicht-elektroniker sind heisse bauteile suspekt.

gruß stefan

Hi LoopingLouie Team,

  1. Sind auch die notwendigen PullUp-Wiederstände bei den Anschlüssen SCL/SDA vorhanden?
    zu 2.: meinst du damit, ob wir die Pins in der Software auf "High" gesetzt haben oder Hardware Widerstände?

Also, Ihr habt doch die SCL und SDL Anschlüsse des PCF8574 an den dafür vorgesehenen Anschlüssen des Arduion (Port 20/21) angeschlossen. Diese beiden Leitungen benötigen je einen separaten PullUp-Wiederstand (i.d.R. 10K) gegen 5V+.
(siehe angefügte Grafik)

Vorher warens 5,29V am i2c, mittlerweile (nach Erhöhung der Spannung an der Arduino Buchse) 5,49V
Zum Thema Spannung:
Das folgende steht im originalen Datenbaltt: DC CHARACTERISTICS: VDD = 2.5 to 6 V
-Das heißt erst mal, dass in diesem Bereich der Baustein ordentlich arbeitet (zwischen 2,5 und 6 Volt)
Eine Veränderung von 0,2 Volt sollte normalerweise nicht über die einwandfreie Funktion entscheiden.

sy. mcGeorge

pcf8574.png

Vorher warens 5,29V am i2c, mittlerweile (nach Erhöhung der Spannung an der Arduino Buchse) 5,49V

Es ist nicht richtig, daß der Spannungstabilisator auf dem Arduino UNO die Ausgangspannung ändert je nach Versorgungspannung. Da ist etwas faul.

Das folgende steht im originalen Datenbaltt: DC CHARACTERISTICS: VDD = 2.5 to 6 V
-Das heißt erst mal, dass in diesem Bereich der Baustein ordentlich arbeitet (zwischen 2,5 und 6 Volt)

Nein da irrst Du Dich. Der Arduino UNO hat den Controller ATmega328P-PU http://www.atmel.com/Images/doc8161.pdf

in diesem Datenblatt steht:
Operating Voltage: 1.8 - 5.5V for ATmega48PA/88PA/168PA/328P (Betriebsspannung)

Maximum Operating Voltage ............................................ 6.0V (maximale Spannung die das IC verträgt ohne kaputt zu gehen).

Grüße Uwe

Eisebaer:
12V in buchse ist schon in ordnung. je nachdem, wieviel strom Ihr zieht, kann das kleine, flach hingelegte dreibein neben der buchse bei 12V recht warm werden. wenn Ihr dem was gutes tun wollt, pappt einen passenden kühler oben drauf. ist nicht tragisch, aber mir als nicht-elektroniker sind heisse bauteile suspekt.

Gut zu wissen, danke!

uwefed:
Es ist nicht richtig, daß der Spannungstabilisator auf dem Arduino UNO die Ausgangspannung ändert je nach Versorgungspannung. Da ist etwas faul.

Da der I2C ja vom selben Netzteil wie der Arduino Mega betrieben wird und beide vorher an dem 5V Ausgang des Netzteils hingen, muss es doch nicht am Spannungstabilisator des Arduinos hängen oder irre ich mich da?
Denn nun hängen beide zwar noch am selben Netzteil allerdings an unterschiedlichen Ausgängen. Arduino Buchse an 12V Ausgang und I2C an 5V Ausgang. Kann sich die leichte Spannungssteigerung am I2C vllt dadurch erklären, weil nun weniger Verbraucher am 5V Ausgang hängen?

mcGeorge:
Also, Ihr habt doch die SCL und SDL Anschlüsse des PCF8574 an den dafür vorgesehenen Anschlüssen des Arduion (Port 20/21) angeschlossen. Diese beiden Leitungen benötigen je einen separaten PullUp-Wiederstand (i.d.R. 10K) gegen 5V+.
(siehe angefügte Grafik)

Danke für deine Antwort. Ja richtig, habens an SCL und SDL angeschlossen. Ob wir die PullUp-Widerstände verbaut haben muss ich meinen Kollegen fragen, der hat sich um die I2C Hardware gekümmert.
Ich vermute einfach dass es nicht am I2C selbst lag sondern einfach daran, dass der Arduino mit zu wenig Spannung versorgt wurde und somit evtl. den SCL und SDL Anschluss nicht richtig ansteuern konnte.

Danke für eure Hilfe,
LL Team