PCF8574 und Relais

Hallo,

jeden Eurer Vorschläge habe ich bisher umgesetzt: Pull-ups eingesetzt, auf IDE 1.0.2 umgestellt, String aus dem Sketch beseitigt. Dafür vielen Dank, ich habe viel gelernt und mein Projekt kommt voran.
Ein Problem bleibt noch und ich wäre für einen Hinweis dankbar:

Mein Mega ist über I2C mit einem Keypad und LCD verbunden und steuert ebenfalls über I2C eine PCF8574-Karte, die direkt an ein "Relaisboard" gekoppelt ist, vgl. http://www.sainsonic.com/zen/albums/ebay/nichegeek/20-018-102/8c.jpg. D.h. jeder meiner acht PCF8574 Pins hängt an einem IN0-IN7 der Relaiskarte, welche optisch vom jeweiligen Relais getrennt sind. Die Relaiskarte hat eine eigene Stromversorgung (VSS und JDVSS sind getrennt), die GNDs sind verbunden.

Ich schicke an das PCF8574-Board jeweils mein Byte und steuere damit die Relais - in der Theorie. Ohne Versorgungsspannung sehe ich die LEDs der Relais leuchten, es wird aber noch nicht geschaltet, kein Wunder. Es läuft also zunächst alles wunderbar.
Nun kommt's leider: liegt die Versorgungsspannung an, arbeiten die Relais. Wenn sie aber geschaltet werden, also wenn mein Byte reingeht, stürzt der Mega manchmal, bis oft ab (bei IN0 fast immer beim ausschalten, bei IN1 seltener etc.).

Ich vermute irgendwelche Stromstösse - aber wo laufen diese denn? Eigentlich müsste die PCF8574 nichts abkriegen, weil optisch getrennt, die GNDs sind gekoppelt, wo liegt das Problem?

Ich bin mit meinen Ideen (und Nerven) am Ende - hat jemand bitte eine Idee?

Grüße
Michael

Vcc und JDVcc sind getrennt

liegt die Versorgungsspannung an, arbeiten die Relais. Wenn sie aber geschaltet werden, ... stürzt der Mega manchmal, bis oft ab

... wohl nicht ganz, nach deiner Fehler-Beschreibung ...

Haben alle komplett eigene Netzteile ( zum Test ) ?

Der PCF8574 entkoppelt ja nochmal die Eingangssignale in den Optokoppler vom Arduino. Ich vermute eher Pulse auf Vcc, die den Mega zum Reset veranlassen.

michael_x:
Haben alle komplett eigene Netzteile ( zum Test ) ?

Danke für Deine Idee: den Relais habe ich gerade ein 5V Netzteil gespendet, leider ohne Erfolg :frowning:
An einem weiteren Netzteil hängt der Mega (7,5V). Ein weiteres Netzteil versorgt das LCD (auch 5V).

Meinst Du aber, dass die Anbindung des PCF8574 an das Relaismodul von der Idee so ok ist?

Grüße
Michael

Meinst Du aber, dass die Anbindung des PCF8574 an das Relaismodul von der Idee so ok ist?

Na, genau für sowas ist ein I2C Expander doch gedacht. Die acht LED kriegst du doch prima geschaltet.

Hast du noch einen Pin frei, um eins der Relais zum Test direkt zu schalten ?
Wie groß ist eigentlich R1, bzw. welche Spannung hat er, wenn INx LOW ist. Ist der Strom passend für Arduino und PCF8574 ( < 25 mA )?
(Edit: Das sollte ja wohl passen, wenn es ohne JD-Vcc super geht)

Wenn es ein "simpler" Spannungseinbruch der Mega-Stromversorgung nicht sein kann,
wären wohl Tips von echten Hardware-Experten hilfreich...

  • Wie kritisch sind Länge und Lage der I2C Leitungen ?
  • Welche Störungen können die schaltenden Relais verursachen, und wie schützt man den Rest?

Hallo Michael,
du hast beobachtet, dass

bei IN0 fast immer beim ausschalten

dein Mega abklötert, das lässt eigentlich den Rückschluss
zu, dass die Freilaufdiode am Relais ggf. nicht korrekt verlötet wurde, vielleicht auch defekt ist. Kannst du das mal testen.

Gruß Gerd

michael_x:

  • Wie kritisch sind Länge und Lage der I2C Leitungen ?

Die I2C-Leitung geht über mehrere Meter, allerdings ist dies - bis auf den Einbruch des Aruino, was nach dem Schalten manchmal Kaulderwelsch auf dem LCD liefert - unproblematisch.

  • Welche Störungen können die schaltenden Relais verursachen, und wie schützt man den Rest?

Aha, hier könnte das Problem liegen: die Stromzufuhr der Pumpe teilt gezwungenermaßen ein Kabelkanal mit der I2C-Leitung. Habe nun, um den Anlaufstrom (ob es das wirklich gibt :slight_smile: ?) als Störfeind auszuschalten, ein Delay hinter dem Schalten der Pumpe gesetzt, 2 Sek., Kaulderwelsch jetzt seltener da, Abstürze nicht mehr. AHA!

Laune steigt :-))

Grüße
Michael

COOL:
die Freilaufdiode am Relais ggf. nicht korrekt verlötet wurde, vielleicht auch defekt ist. Kannst du das mal testen.

Hallo Gerd,

danke für Deine Idee. Wie könnte ich das Testen bitte mit ... Boardmitteln ... machen? Du kannst Dir vorstellen, es sind nicht viele da.
Aber ich weiß inzwischen, welche Seite des Lötkolbens man anfassen muss :slight_smile:

Grüße
MIchael

Die I2C-Leitung geht über mehrere Meter ... die Stromzufuhr der Pumpe teilt gezwungenermaßen ein Kabelkanal mit der I2C-Leitung

Ähem, dafür geht das alles aber super ...

http://de.wikipedia.org/wiki/I²C:

Der I²C-Bus ist von der Definition her recht einfach, aber auch störanfällig. Diese Tatsache schränkt die Verwendung auf störungsarme Anwendungsbereiche ein, wo weder mit Übersprechen, Rauschen, EMV-Problemen noch mit Kontaktproblemen (Stecker, Buchsen) zu rechnen ist.

Das LCD Display ist vermutlich weit weg vom Arduino ?
Den PCF8574 könntest du aber beim Arduino einbauen, und eher die Steuersignal-Leitungen zur Relaiskarte verlängern.

Dass du an den Relais schon Pumpen angeschlossen hast, war (mir) bisher nicht klar. Wie meinst du das mit dem delay() ?

Die I2C-Leitung geht über mehrere Meter ... die Stromzufuhr der Pumpe teilt gezwungenermaßen ein Kabelkanal mit der I2C-Leitung

Ähem, dafür geht das alles aber super ...

:slight_smile: Habe ich auch gedacht. Aber die Störungen des Displays (wie das keypad auch ca. 5 m vom Mega entfernt) tauchen so sporadisch auf, dass ich die Entfernung - vielleicht unberechtigterweise - vernachlässigt habe.

Den PCF8574 könntest du aber beim Arduino einbauen, und eher die Steuersignal-Leitungen zur Relaiskarte verlängern.

Das ist auch fast der Fall: ein halber Meter trennt den Mega und den PCF8574. Und dann kommt auch schon die Relaiskarte.

Dass du an den Relais schon Pumpen angeschlossen hast, war (mir) bisher nicht klar. Wie meinst du das mit dem delay() ?

Eine hübsche Umwälzpumpe, die auf Max (ca. 100W) gestellt (sein muss) ihren Dienst bei Bedarf verrichtet. Hinter das Senden des Steuerbytes an die Relais über den PCF8574 habe ich den Delay(3000) gesetzt. Normalerweise wird dann das LCD mit der entsprechenden Info (Pumpe an) upgedatet und wenn die Pumpe anlief, störte das diese Datenübermittlung. Ich vermute, als Laie, dass dann I2C oder sowieso die Spannung des Mega in die Knie gingen und aus war die Maus. Mit einem Delay von 3 Sek. (und einem anschließendem Reset des Displays, was nur nötig bei der Pumpe ist, die anscheinend viel zieht) ist die Sache z.Z. fehlerfrei bedienbar.

Ob die Umstellung auf Chararrays weg von der String-Klasse für die nötige Dauerstabilität auf Dauer sorgt, berichte ich sicherlich in den nächsten tagen :slight_smile:

Aber für weitere Ideen (und Fragen, wenn nicht Antworten gar) bin ich dankbar!

Grüße
Michael

Das zu dem aktuellen Stand

[/quote]

Glückwunsch!
Gut dass du die Dioden auf der Relaiskarte noch nicht ausgelötet hast.
Deine Pumpe hat auch einen Entstörkondensator, von dem nie einer merkt ob er kaputt ist...
:wink:

Wie überträgst du denn das I2C Signal im Kabelkanal der Pumpe ? ( Telefondraht , CAT5 , ... )
Hast du am Ende schön kleine pullup Widerstände ?

michael_x:
Wie überträgst du denn das I2C Signal im Kabelkanal der Pumpe ? ( Telefondraht , CAT5 , ... )
Hast du am Ende schön kleine pullup Widerstände ?

Das Kabel für I2C ist ein verdrilltes, vieradriges Telefonkabel. GND und einer der SDA bzw. SCL (war jedenfalls der Richtige) sind zusammen.
Am Ende der I2C-Verbindungen (am PCF8574 des Relais und des LCD/Keypads) habe ich zwei 13K, die gerade zur Hand waren, gelegt. Da war ich allerdings ncith sicher, weil ich meinte gelesen zu haben, dass der Mega das schon hat. Sind aber seit heute Mittag dran :slight_smile:

Ich bete, dass in den nächsten Tagen das Teil nicht wie sonst abstürzt. Damit kann ich noch vor Weihnachten LCD und Keypad in irgendein hübsches Döschen kleben und niemand guckt vorm unter dem Weihnachsbaum mehr böse auf mich wegen der Drahtwirtschaft in der Ecke :slight_smile:

Grüße
Michael

http://www.i2c-bus.org/de/terminierung-und-kapazitaeten/

Wenn du noch 4*4k7 oder so hast ...
auch 2k Widerstände sind nicht zu klein, schätze ich mal. Soviel Strom vertragen alle Beteiligten und umso schwerer haben es die Pumpen-Störungsignale.

michael_x:
auch 2k Widerstände sind nicht zu klein, schätze ich mal. Soviel Strom vertragen alle Beteiligten und umso schwerer haben es die Pumpen-Störungsignale.

Aha, das ist aber schon Geheimwissen, Michael_X :wink:
Ich setze dann mal am Wochenende an SDA/SCL jeweils einen 2k Pull-up-Widerstand, richtig?
(Stimmt also nicht mit dem vorhandenen Pull-Up im Mega, und wieder ein "aha")

Grüße
Michael

Stimmt also nicht mit dem vorhandenen Pull-Up im Mega

Doch schon, aber diese "Not-Pullups" sind so groß, dass du dich schon an die Spezifikationen halten musst, damit es geht :wink:
Und ging doch gut, mit den LEDs, oder.

Psst, mein Geheim-Wissen hab ich z.B. von hier (einer der ersten google Treffer) :

Eine Frage muss ich dabei noch loswerden bitte: Terminierung hört sich danach an, als wenn bei jedem I2C-Slave und auch beim Mega die Terminierung jeweils nötig ist - ist das auch so? Alsi 2k-Widerstände an SDA sowie SCL eines jeden "Endes"?