Arduino Nano I2C Display

#7062562
Lesenswert?

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.
Gast #7062569
Lesenswert?

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.)
Gast #7062599
Lesenswert?

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.
#7062610
Lesenswert?

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.
#7062615
Lesenswert?

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?
#7062619
Lesenswert?

Ε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.
#7062623
Lesenswert?

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.
Gast #7062771
Lesenswert?

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.
#7062789
Lesenswert?

Gast #7062800
Lesenswert?

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"
#7062811
Lesenswert?

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.
Gast #7063000
Lesenswert?

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!
#7063037
Lesenswert?

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...
Gast #7063040
Lesenswert?

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.
Gast #7063056
Lesenswert?

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.
#7063066
Lesenswert?

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.
Gast #7063112
Lesenswert?

Ε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.
Gast #7063179
Lesenswert?

Ε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
}
#7063190
Lesenswert?

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.
Gast #7063238
Lesenswert?

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.
Gast #7063269
Lesenswert?

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 ;)
Gast #7063345
Lesenswert?

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 von einem Moderator gelöscht.
#7063771
Lesenswert?

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.
Gast #7063783
Lesenswert?

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
#7063787
Lesenswert?

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/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren