Hallo, Ich habe ein Arduino Nano, dass ein Relayboard ansteuert welches 230V schaltet(ein Gebläse). An dem Nano hängt auch ein Display über I2C. Ohne Display läuft alles. Wenn ich aber das Display nutze hängt sich irgendwann das Nano auf wenn das Gebläse angeschaltet wird. Sogar der Watchdog hängt sich auf. ich habe scl und sda mit einer Diode mit Masse verbunden da druch hängt es sich nicht mehr so oft auf. Kann ich da noch was machen um die Verbindung besser zu schützen und gibt es eine Möglichkeit, dass wenn die Verbindung gestört ist der Nano das ignoriert und einfach weiter läuft? meine Lösungsansätze sind: 1. Ich nehme einen kleinem µC und bau mir da einen externen Watchdog. 2. ich nehme einen kleinen µC und beu den Display daran(als ein µC Steuerung und einen für den Bildschirm) Ich bin mit den Lösungsansetzen aber nicht wirklich zufrieden wenn das alles nur mit einem Nano umsetzbar ist wäre mir lieber. Danke schon mal im voraus.
2 einfache Fragen. 1. Welches Display 2. Welcher Treiber Ich benutze immer die 160* Displays mit Adapter-Board. Und hatte noch nie Stress damit. Allerdings reagieren die auf "unsauberen" Strom sehr problematisch (ominöse Zeichen bis Display aus, war alles da). . Aber NUR das Display den Nano juckt das nicht. Und ich hatte mal Probleme mit einen i2c-Treiber für das Display der mit der Arduino-Version nicht laufen wollte. (auch ein Grund warum ich B4R nehme.)
https://www.amazon.de/AZDelivery-HD44780-Display-Schnittstelle-Hintergrund/dp/B07JH6GHPR/ref=sr_1_5?keywords=arduino%2Bdisplay%2Bi2c&qid=1652366091&sprefix=qrduino%2Bdis%2Caps%2C142&sr=8-5&th=1 Der Treiber heist: PCF8574T
Lukas K. schrieb: > ich habe scl und sda mit einer Diode mit Masse verbunden Super Lukas, tolle Leistung! Gruss Chregu
Christian M. schrieb: > Lukas K. schrieb: >> ich habe scl und sda mit einer Diode mit Masse verbunden > > Super Lukas, tolle Leistung! > > Gruss Chregu Danke dein Beitrag war sehr hilfreich. Mal im ernst ich kann es mir auch nicht erklären aber es läuft dadurch stabiler.
Lukas K. schrieb: > Der Treiber heist: PCF8574T Falscher Treiber. https://funduino.de/nr-19-i%C2%B2c-display Du brauchst die "LiquidCrystal I2C" Libs. Es gibt in der Arduino-Ide ein Beispiel wo diese Worte "LiquidCrystal I2C" drinstehen. Damit sollte es laufen. Lukas K. schrieb: > Der Treiber heist: PCF8574T Dieser Treiber ist für Direktansteuerung. z.b. um LED's zu schalten. Etc. Er ist nur sehr schlecht für Display-Ansteuerung. Hinweis: Wenn du nix siehst ist das "normal". Die Chinesen verstellen bei der Auslieferung das Poti falsch. Als jede Menge drehen, irgendwann kommt das Display. Auch wenn es NICHT angesteuert wird. Man sieht dann die Matrix. Dann etwas zurück drehen bis die Matrix verschwindet. Dann ist es perfekt.
Lukas K. schrieb: > An dem Nano hängt auch ein Display über I2C. Ohne > Display läuft alles. Wenn ich aber das Display nutze hängt sich > irgendwann das Nano auf wenn das Gebläse angeschaltet wird. Lass mich Raten: Das Display hast du über lange, ungeschirmte Dupont-Wires mit dem Nano verbunden? Lösungsversuch 1: Der Nano weiß, wann er schaltet. Währenddessen nicht auf das Display zugreifen. Kurz warten, anschließend neu initialisieren. Lösung 2: Alles ordendlich entstören, lange Kabel schirmen.
Schlaumaier schrieb: > Lukas K. schrieb: >> Der Treiber heist: PCF8574T > > Falscher Treiber. > > https://funduino.de/nr-19-i%C2%B2c-display Hier wird doch der gleiche Treiber genutzt. > Du brauchst die "LiquidCrystal I2C" Libs. Nutze ich schon. > Dieser Treiber ist für Direktansteuerung. z.b. um LED's zu schalten. > Etc. Er ist nur sehr schlecht für Display-Ansteuerung. Welchen Treiber würdest du mir den empfehlen?
Εrnst B. schrieb: > Lukas K. schrieb: >> An dem Nano hängt auch ein Display über I2C. Ohne >> Display läuft alles. Wenn ich aber das Display nutze hängt sich >> irgendwann das Nano auf wenn das Gebläse angeschaltet wird. > > Lass mich Raten: Das Display hast du über lange, ungeschirmte > Dupont-Wires mit dem Nano verbunden? Ja das ist noch alles auf einer Steckplatiene. Wenn ich weiß, dass es funktioniert will ich die Bildschiermanschlüsse direkt auf die Platine mit dem Nano Löten. > Lösungsversuch 1: Der Nano weiß, wann er schaltet. Währenddessen nicht > auf das Display zugreifen. Kurz warten, anschließend neu initialisieren. Das werde ich jetzt nochmal testen.
Das mit dem Treiber ist nur Nebenschauplatz. Wenn du die Wahl hast, könntest du einen mit SPI statt I²C verwenden. Die SPI-Leitungen sind nicht OpenCollector mit Pullup sondern immer niederimpedant auf definiertem Pegel, und fangen sich deshalb weniger leicht Störungen vom Gebläse-Motor-Schaltvorgang ein. Du kannst aber dasselbe erreichen wenn dein Nano vor jedem Relais-Umschalten seinen I²C-Bus als GPIO mit fixem Pegel umkonfiguriert, und ausreichend lange nach dem Schaltvorgang wieder re-initialisiert. Ist aber nur ein Workaround. Eine echte Lösung wäre ein sauberes Entstören von Relais und Gebläse.
> Ist aber nur ein Workaround. Eine echte Lösung wäre ein sauberes > Entstören von Relais und Gebläse. Die Relais haben Freilaufdioden und das Gebläse hat einen Kondensator. Kann ich da sonst nochwas machen?
:
Bearbeitet durch User
Schaltplan und Foto vom Aufbau könnten helfen. Die eigentliche Fehlerursache muss nicht das Display sein. LG, Sebastian
Sebastian schrieb: > Schaltplan und Foto vom Aufbau könnten helfen. Die eigentliche > Fehlerursache muss nicht das Display sein. > > LG, Sebastia Das ist eine Steuerung für ein Holzvergaserofen. Ohne den Display ist die Steuerung über einen Monat gelaufen ohne Probleme.
Es fehlen Pull-Up Widerstände am I²C Bus. Nimm zwei mal 4,7kΩ. Welches Relais-Board verwendest du?
Schlaumaier schrieb: > Und ich hatte mal Probleme mit einen i2c-Treiber für das Display der mit > der Arduino-Version nicht laufen wollte. (auch ein Grund warum ich B4R > nehme.) Arduino kann nichts dafür, dass Du zu dumm bist, die Ansteuerung aus den massenhaft vorhandenen Beispielen zu kopieren. Eine Falle ist, dass die Chinesen unterschiedliche Versionen der I2C-Module liefern und man evtl. raten muß, wie man es korrekt initialisiert. Lukas K. schrieb: > Schlaumaier schrieb: >> Dieser Treiber ist für Direktansteuerung. z.b. um LED's zu schalten. >> Etc. Er ist nur sehr schlecht für Display-Ansteuerung. > Welchen Treiber würdest du mir den empfehlen? Ignoriere diesen Clown! So, wie in allen Beispielen:
1 | #include <Wire.h> |
2 | #include <LiquidCrystal_I2C.h> |
Da Dein Display ja funktioniert, gibt es keinen Grund einer Änderung. Lukas K. schrieb: > Kann ich da sonst nochwas machen? Ja, den ganzen Kram anständig verdrahten. Das beschriebene Problem taucht hier alle paar Wochen auf und ist immer durch Störeinkopplungen und / oder schlechte Stromversorgung begründet.
Stefan ⛄ F. schrieb: > Es fehlen Pull-Up Widerstände am I²C Bus. Nimm zwei mal 4,7kΩ. > > Welches Relais-Board verwendest du? https://www.amazon.de/Elegoo-Relaismodul-Optokoppler-Arduino-Raspberry/dp/B01M8G4Y7Z/ref=sr_1_4?crid=17V8OQQKIDMRU&keywords=arduino%2Brelais%2Bmodul&qid=1652380784&sprefix=arduino%2Brel%2Caps%2C235&sr=8-4&th=1
Lukas K. schrieb: > https://www.amazon.de/Elegoo-Relaismodul-Optokoppler-Arduino-Raspberry/dp/B01M8G4Y7Z/ref=sr_1_4?crid=17V8OQQKIDMRU&keywords=arduino%2Brelais%2Bmodul&qid=1652380784&sprefix=arduino%2Brel%2Caps%2C235&sr=8-4&th=1 Ich will diese Dinger nicht schlecht machen, aber oft haben diese "Arduino-Relaismodule" einen sehr geringen Isolations- abstand zwischen Netzspannung und Gleichspannungs-Seite. Also eigentlich zu gefährlich ... aber bei diesem weiss ich es nicht. Hier zur Illustration was gemeint ist (scheinbar wird beim Verkäufer gerne_ die Platinen-Unterseite _nicht abgebildet): Beitrag "Unglaublich was die Arduino-Gemeinde da vorgesetzt bekommt"
Bedenkenträger schrieb: > Lukas K. schrieb: >> > https://www.amazon.de/Elegoo-Relaismodul-Optokoppler-Arduino-Raspberry/dp/B01M8G4Y7Z/ref=sr_1_4?crid=17V8OQQKIDMRU&keywords=arduino%2Brelais%2Bmodul&qid=1652380784&sprefix=arduino%2Brel%2Caps%2C235&sr=8-4&th=1 > > Ich will diese Dinger nicht schlecht machen, aber oft haben > diese "Arduino-Relaismodule" einen sehr geringen Isolations- > abstand zwischen Netzspannung und Gleichspannungs-Seite. > Also eigentlich zu gefährlich ... aber bei diesem weiss ich > es nicht. > > Hier zur Illustration was gemeint ist (scheinbar wird beim > Verkäufer gerne_ die Platinen-Unterseite _nicht abgebildet): > > Beitrag "Unglaublich was die Arduino-Gemeinde da vorgesetzt bekommt" Bei dem Board sind Ausfräsungen zur isolation drin.
Lukas K. schrieb: >> Welches Relais-Board verwendest du? > https://www.amazon.de/Elegoo-Relaismodul-Optokoppler-Arduino-Raspberry/dp/B01M8G4Y7Z/ref=sr_1_4?crid=17V8OQQKIDMRU&keywords=arduino%2Brelais%2Bmodul&qid=1652380784&sprefix=arduino%2Brel%2Caps%2C235&sr=8-4&th=1 Dieses Board erfüllt nicht die Sicherheitsanforderungen des VDE. Es isoliert nur bis 1000 Volt, gefordert sind (mit gutem grund) jedoch 2500V für Geräte mit Netzstecker und 4000V für fest installierte. Lukas K. schrieb: > Bei dem Board sind Ausfräsungen zur isolation drin. Ändert nichts daran, dass schon die Relais unzureichend sind. Schau ins Datenblatt!
Diese Relais müssen unglaublich billig sein. Oder warum arbeiten praktisch alle chinesischen "Arduino" Releisboards mit diesem Typ? Der Relais-Footprint ist schon maximal ungünstig, wenn man mehr als Schutzkleinspannung damit schalten möchte. Und was soll der Unfug, in die Relais-Anteuerung noch Optokoppler zu legen? Zumal die Massen zusammengelegt sind es daher nix zu isolieren gibt...
Thorsten S. schrieb: > Diese Relais müssen unglaublich billig sein. Ja isso. Thorsten S. schrieb: > Und was soll der Unfug, in die Relais-Anteuerung noch Optokoppler zu > legen? Zumal die Massen zusammengelegt sind es daher nix zu isolieren > gibt... Vielleicht hast du es noch nicht bemerkt, ich schon: Sobald etwas verkaufsfähig ist (egal wie schlecht oder buggy), wird es in Massen produziert. Und dann wird es so lange verkauft, bis Leute die Ware nicht einmal mehr als Geschenk annehmen wollen. Chinesen ticken so: - Warum sollte man etwas verbessern, das sich auch so schon gut verkauft? - Warum sollte man nach Abschluss eines Geschäftes noch freundlich sein? - Warum soll man mangelhafte Ware zurück nehmen, wenn es doch der Fehler des Käufers war, sich über den Tisch ziehen zu lassen? - Warum sollte man mehr machen, als im Anforderungsdokument steht (z.B. mit denken)? Krassestes Beispiel das ich erlebt habe: Es wurde die Entwicklung einer Bedienoberfläche bestellt, wo man Elemente per Drag&Drop verschieben können sollte, sowie mit Buttons "Copy", "Paste" und "Delete". Genau das hatten sie geliefert. Nur dass die drei Buttons überhaupt keine Funktion hatten. Auf die Anfrage, warum sie "fertig" gemeldet haben obwohl die Buttons keine Funktion haben kam die Antwort: Im Anforderungsdokument steht nicht drin, dass die Button etwas bewirken sollen. Ich meine: Man hätte ja wenigstens mal nachfragen können, aber das tun Chinesen praktisch nie. Immer freundlich lächelnd nicken "wir schaffen das, ja auch in der halben Zeit, ja auch mit allen extras, auch zum halben Preis, alles was ihr wollt". Es dauert eine Weile, bis man sich an deren Mentalität gewöhnt/angepasst hat.
Stefan ⛄ F. schrieb: > Chinesen ticken so: > - Warum sollte man etwas verbessern, das sich auch so schon gut > verkauft? Tja, die Chinesen. Versuch mal ohne die Chinesen irgendwas elektronisches zu bauen. Unglaublich billig und meist brauchbar. Es gibt auch China-Schrott - aber nach meiner Erfahrung eher selten. Die i2c-Module sind Standardware, die eigentlich funktionieren müssten. Versuch mal bitbang-i2c. Das ist etwas langsamer - immer noch sehr schnell - und bestens geeignet um auszutesten, ob das Problem an der hardware oder der software liegt.
grundschüler schrieb: > Versuch mal bitbang-i2c. Was soll das bringen? Sein Problem ist: Der µC "stürzt ab", wenn er über ein Relais einen 230V-Motor schaltet und gleichzeitig mehrere lange Antennen-Drähte an diversen (zufälligerweise I²C) µC-Pins hängen. Das Problem sollte man zuallererst in Hardware lösen, also die "Sender" entstören, den "Empfänger" weniger empfindlich machen. Wenn das nicht geht, kann man versuchen mit Software etwas gegenzuhalten. Aber Bitbang-I²C ändert da Nichts, da sind die Pins auch auf Open-Collector/Input-mit-Pullup gestellt. An der Stelle kann man ansetzen. Also, wie schon geschrieben: In dem Moment, in dem die Störung zu erwarten ist, I²C abstellen und alle "Antennen-Pins" auf Output mit fixem Pegel bringen. So kann sich der AVR/Nano mit aller Kraft seiner GPIO-Treiber dem Störimpuls entgegenstemmen.
Εrnst B. schrieb: > Wenn das nicht geht, kann man versuchen mit Software etwas > gegenzuhalten. Aber Bitbang-I²C ändert da Nichts, da sind die Pins auch > auf Open-Collector/Input-mit-Pullup gestellt. Warum? Es wir ja nur geschrieben. scl ist ohnehin output sda muss gar nicht auf input gestellt werden. Input habe ich bei bitbang nur, wenn i2c_read ausgeführt wird. Das kommt bei einem twi-lcd gar nicht vor. Wenn "Open-Collector/Input-mit-Pullup" das Problem sein sollte, würde es mit bitbang gar nicht auftreten.
grundschüler schrieb: > scl ist ohnehin output Dann ist's kein I²C mehr. Clock-Stretching fällt damit z.B. Flach. grundschüler schrieb: > sda muss gar nicht auf input gestellt werden. wie liest du das ACK?
grundschüler schrieb: >> - Warum sollte man etwas verbessern, das sich auch so schon gut >> verkauft? > Tja, die Chinesen. Versuch mal ohne die Chinesen irgendwas > elektronisches zu bauen. Das ist das Problem. Deswegen sind wir überall von mangelhafter Technik umgeben. Qualitativ hochwertige Sachen kann ich mir allerdings nicht leisten.
Was einige offenbar nicht wissen: Die "echten" I²C Schnittstellen enthalten Filter gegen Störungen, welche man bei der Bit-Banging Methode nicht hat. Vermutlich sind die Störungen in diesem Fall aber auch dafür zu stark.
Εrnst B. schrieb: > grundschüler schrieb: >> sda muss gar nicht auf input gestellt werden. > > wie liest du das ACK? Gar nicht. Wird einfach vorausgesetzt. SDA low ziehen, fertig. Warum soll man sich über solche nebensächlichen Details groß Gedanken machen? Oliver
Εrnst B. schrieb: > wie liest du das ACK? ja stimmt - aber das Ack wird nicht gelesen während das Relais schaltet. das Lesen des Acks kann man bei bitbang auch leicht umgehen indem man die Abfrage durch einen Timer ersetzt. Bei einem twi-lcd kann da nicht viel passieren.
1 | uint8_t i2c_ReadAckBit() |
2 | {
|
3 | uint8_t x; |
4 | data_h; |
5 | => //change_d_in; |
6 | |
7 | _delay_us(1); |
8 | uint16_t timeout_timer1=5000; |
9 | clock_h; |
10 | while(data_in && timeout_timer1)timeout_timer1--; |
11 | if(data_in){x=1;} else {x=0;} |
12 | |
13 | => x=1; |
14 | |
15 | _delay_us(1); |
16 | clock_l; |
17 | change_d_out; |
18 | data_l; |
19 | return x; |
20 | }
|
grundschüler schrieb: > ja stimmt - aber das Ack wird nicht gelesen während das Relais schaltet. Genau das habe ich vorgeschlagen. Aber dafür muss man kein Software-I2C verwenden. Aber, wie gesagt, der TE hat ja kein Problem mit der I²C-Display-Ansteuerung, die funktioniert solange kein Störimpuls kommt. Also: Problem lösen, statt den funktionierenden Code an irgendwelchen Stellen zu verschlimmbessern, die mit dem Thema allenfalls peripher was zu tun haben.
Εrnst B. schrieb: > Aber, wie gesagt, der TE hat ja kein Problem mit der > I²C-Display-Ansteuerung, die funktioniert solange kein Störimpuls kommt. Frage an den TO: Was ist denn genau der Störimpuls? Das Schalten des Relais oder das Laufen des Motors? Vielleicht reicht es ja, den Abstand zwischen Motor und uc zu vergrößern?
grundschüler schrieb: > Frage an den TO: > Was ist denn genau der Störimpuls? Das Schalten des Relais oder das > Laufen des Motors? Vielleicht reicht es ja, den Abstand zwischen Motor > und uc zu vergrößern? Dumme Frage, wie nah ist das Ganze den Steckboard. Und wie fest sitzen die Verbindungen. Ich habe ein Steckboard (war mal super Preiswert + istt sehr billig gemacht) wo ein besseres anhauchen, schon zu micro-Wackel-Kontakten führt. Das ist hoch empfindlich wenn man es anfasst. Es könnte also theoretisch sein, das Erschütterungen zu einer Kontakt-Abriss führt. Besonders dann wenn die Steckverbindungen in die Kontakte (Löcher) fast reinfallen und es sehr wenig Gegendruck gibt.
Stefan ⛄ F. schrieb: > Qualitativ hochwertige Sachen kann ich mir allerdings nicht > leisten. Dann wirst Du wohl weiterhin mit Billigboards leben müssen.
Zeno schrieb: > Stefan ⛄ F. schrieb: >> Qualitativ hochwertige Sachen kann ich mir allerdings nicht >> leisten. > Dann wirst Du wohl weiterhin mit Billigboards leben müssen. Nicht unbedingt. Ich habe mir neulich wegen den Wackelproblem, ein Shield-Board für den Nano gekauft. Das ist wieder erwarten sogar sehr gut. https://www.christians-shop.de/Nano-V30-Prototype-Shield-mehr-Inputs-und-Outputs-am-Arduino-Nano Dazu für ein paar Cent meinen Vorrat an Mama-Mama-Kabeln erweitert. Ist viel Stabiler als die Papa-Enden in die Steckboards zu stecken. Und man kann sogar ein Netzteil (ab 7 Volt) da einstecken lt. Internet. Ne Anleitung habe ich da noch nicht wirklich gefunden. Aber ich kann zu not halt das Layout lesen ;)
Lukas K. schrieb: > Ich bin mit den Lösungsansetzen aber nicht wirklich zufrieden wenn das > alles nur mit einem Nano umsetzbar ist wäre mir lieber. Sehr guter Ansatz. Statt über I2C, Display-Lib und Watch-Dog zu philosophieren, wäre es sich besser, die Störungen an der Quelle zu unterbinden. Jetzt gilt es nur noch, diese zu identifizieren. Tritt das Problem auch auf, wenn nur das Relaisboard (ohne Gebläse) am µC hängt? Tritt das Problem auch auf, wenn ein Snubber über den Schaltkontakten des Relais sitzt? Tritt das Problem auch auf, wenn das Gebläse über eine Kabeltrommel aus einer anderen Phase des Netzes gespeist wird?
Beitrag #7063766 wurde vom Autor gelöscht.
Wolfgang schrieb: > Tritt das Problem auch auf, wenn nur das Relaisboard (ohne Gebläse) am > µC hängt? > Tritt das Problem auch auf, wenn ein Snubber über den Schaltkontakten > des Relais sitzt? > Tritt das Problem auch auf, wenn das Gebläse über eine Kabeltrommel aus > einer anderen Phase des Netzes gespeist wird? Ich werde das alles testen und nehme als Verbindung von Display zu Nano ein Lankabel.
:
Bearbeitet durch User
Stefan ⛄ F. schrieb: > Es fehlen Pull-Up Widerstände am I²C Bus. Höchstwahrscheinlich sind die üblichen zwei 10k-Pullups auf dem Display-Modul. Stefan ⛄ F. schrieb: > Nimm zwei mal 4,7kΩ. Heisst es nicht hier im Forum immer wieder, alles >=1k ist EMV-mässig nicht existent? Insofern vielleicht wirklich auf hochgetriebene I2C-Bedienung umstellen? LG, Sebastian
Thorsten S. schrieb: > Und was soll der Unfug, in die Relais-Anteuerung noch Optokoppler zu > legen? Zumal die Massen zusammengelegt sind es daher nix zu isolieren > gibt... Doch diese Karte kann man galvanisch trennen. Die Masse der Optokoppler geht an die pins des Nano. Deshalb schaltet das Relai wenn bei "digitalWrite(pin, LOW);". https://www.kollino.de/arduino/4-8-kanal-relais-anleitung/
Lukas K. schrieb: > Lankabel Das hört sich wie länger als 20cm an? Das fängt ungetrieben natürlich einiges ein ... LG, Sebastian
Sebastian schrieb: > Lukas K. schrieb: >> Lankabel > > Das hört sich wie länger als 20cm an? Das fängt ungetrieben natürlich > einiges ein ... Ne das sind 20cm. Das ist ein Stück Verlegekabel Lizen passen gut in die Steckplatine.
Da das Problem mit der Steckplatine immer wieder erwähnt wird. Mir ist bewusst das der Kontakt auf den Dingern nicht optimal ist aber ich will erst löten wenn alles funktioniert.
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.