Debuggen eines 16x2 LCD-Displays auf einem Arduino


9

Ich habe ein Standard-16x2-LCD-Display (ich glaube, es ist mit Hitachi HD44780 kompatibel - siehe Zusammenfassung und Spezifikation unten), das wie hier beschrieben mit 4 Datenpins an ein Arduino Uno angeschlossen ist , obwohl ich parallel 2x 220-Ohm-Widerstände hinzugefügt habe (dh a 110 Ohm Widerstand) an Pin 16 (Hintergrundbeleuchtung Masse) und ersetzte den Pot durch statische Widerstände, um 4 V an Vo zu erzeugen.

Kurz gesagt, RW ist mit Masse verbunden, und RS, Enable und Data4-7 sind mit Arduino-Pins verbunden, während Data 0-3 schwebend sind.

Ich habe andere Dinge (Sensoren, einen Transistor mit einem optoisolierten SSR und einem Netzrelais, einige Tasten) an verschiedene Pins des Arduino angeschlossen. Der von mir verwendete Code schreibt mehrmals pro Sekunde Text in die Anzeige, und normalerweise funktioniert die Anzeige einwandfrei.

Wenn das Relais jedoch schließt (es dauert ungefähr 10 mA und wird von einem Transistor gesteuert, der wiederum von einem der Arduino-Pins gesteuert wird), wird das LCD manchmal verstümmelt. Es bleibt normalerweise verstümmelt, bis das Relais das nächste Mal schließt, aber manchmal, wenn das Relais öffnet oder nach einigen weiteren Zyklen des Öffnens / Schließens zum Zurücksetzen. Das Verstümmeln beginnt und stoppt immer gleichzeitig mit dem Öffnen oder Schließen des Relais.

Mit "verstümmelt" meine ich, dass ich jedes Mal, wenn ich darauf schreibe, nachdem es verstümmelt wurde, anstatt englische Zeichen zu schreiben, eine Zeichenfolge erhalte, die ich normalerweise nicht im Datenblatt identifizieren kann (obwohl ich einige kann). Diese Reihe verstümmelter Zeichen bewegt sich normalerweise links entlang des Bildschirms, wenn ich neuen Text auf das LCD schreibe.

Ich bin zuversichtlich, dass das Arduino selbst nicht verwirrt wird, da ich zur gleichen Zeit denselben Text auf den seriellen Monitor schreibe und er nicht verstümmelt ist.

Ich habe seitdem experimentiert, den RW-Pin mit einem Arduino-Ausgang und Data0-3 mit Masse zu verbinden, aber das hilft nicht. Ich habe das gesamte Gerät mit einer 9-V-Batterie oder mit USB betrieben, und es hilft nicht. Ich habe die Batterie ausgetauscht ... keine Änderung.

Das einzige, was zu funktionieren scheint, ist, dass keine Last an das Relais angeschlossen ist, aber das macht den Zweck zunichte :-)

Ich habe keinen Signalanalysator oder etwas Anspruchsvolleres als ein Multimeter, einen Laptop und ein Arduino ... Hat jemand Hinweise, wie ich das beheben kann?

LCD-Übersichtsblatt: http://oomlout.com/LCDD/LCDD-SUMM-BC1602A.pdf

LCD-Spezifikation: http://oomlout.com/LCDD/LCDD-DATA-BC1602A.pdf

Beispiel für verstümmelten Text: verstümmelter Text


1
Versuchen Sie, Ihren Stromschienen einen Kondensator von mindestens 1 uF hinzuzufügen, dh ein Ende des Kondensators an Vcc und das andere an GND. Seien Sie vorsichtig mit der Richtung des Kondensators, wenn es sich um ein Elektrolyt handelt :)
Abdullah Kahraman

1
Das ist wirklich bizarr. Sie fahren dieses große Relais nicht direkt, die Relaisbox, die Sie gekauft haben, verfügt tatsächlich über ein winziges DIP-SSR, das die Stromversorgung des großen Relais umschaltet, und das große Relais wird von der Wechselstromleitung getrennt. Daher sollte es wirklich keine Möglichkeit geben, dass die vom Relais, das betätigt wird, erzeugte Gegen-EMK in Ihren Stromkreis gelangt.
Connor Wolf

Dies riecht nach einem Erdungs- / Entkopplungsproblem. Wie viel Kapazität haben Sie über Ihre Stromschienen auf dem Steckbrett?
Connor Wolf

Wie nah ist die Relaisbox an der Steckbrettschaltung? Können Sie ein paar Meter Draht zwischen die Relaiskiste und den Rest des Stromkreises legen? Dies würde die Möglichkeit einer magnetischen Kopplung aufheben.
Connor Wolf

Danke für die Antworten. Sie haben Recht, dass das Relais mit einem SSR und verschiedenen anderen Komponenten entkoppelt ist. Ich habe eine Diode ausprobiert und später einen 220-uF-Elektrolytkondensator zwischen 5 V und GND auf den Stromschienen in der Nähe des LCD. Beides schien keine Wirkung zu haben. Ich habe die beiden (noch) nicht zusammen ausprobiert.
Richard Russell

Antworten:


5

Haben Sie eine Diode über Ihrem Relais? Wenn nicht, verursachen die induktiven Spitzen beim Schließen / Öffnen wahrscheinlich Probleme.

Wenn Sie beispielsweise den durch ein Relais fließenden Strom stoppen, versucht er, ihn am Laufen zu halten. Wenn es keinen Entladungsweg gibt, wird eine große Spannung erzeugt (im Wesentlichen steigt er weiter an, bis er einen Weg findet).
Insbesondere lautet die Formel V = L (dI / dT). Dies bedeutet, dass der Induktor Stromänderungen durch ihn entgegenwirkt, indem er eine Spannung über ihm entwickelt, die proportional zur Änderungsrate des Stroms ist.

Versuchen Sie, eine Diode über dem Relais zu platzieren, die so ausgerichtet ist, dass sie dem normalen Stromfluss entgegenwirkt.

BEARBEITEN - Wenn Sie die Produktseite überprüfen, scheint es sich um ein "fertig gerolltes" Relais in einer Box mit hinzugefügten Peripheriekomponenten zu handeln. Daher ist es unwahrscheinlich, dass dies der Fall ist. Trotzdem würde ich versuchen, die Diode über die Stromversorgung des Relais zu legen.
Stellen Sie außerdem sicher, dass Ihr Vorrat gut gefiltert ist, wie in den Kommentaren erwähnt. Platzieren Sie einige Kondensatoren mit mindestens 1 uF neben den ICs und dem LCD und eine Bulk-Kappe mit> 100 uF irgendwo (alle von Strom bis Masse).


Schauen Sie sich das Datenblatt für das "Relais" an. Der Eingang zum Relais steuert tatsächlich ein winziges SSR an, das die tatsächliche Leistung zum Relais selbst umschaltet. Da der Eingang zum Relais-Ding ein SSR-Eingang ist, sehe ich keine Diode, die wirklich etwas tut.
Connor Wolf

Ich habe einen Blick darauf geworfen (ich konnte ihn vorher nicht finden) und ich stimme zu, es war nur ein Vorschlag, der ohne weitere Informationen nicht schaden kann. Hoffentlich bekommen wir bald ein Update darüber, wie es ist, wenn die Entkopplung hinzugefügt wird.
Oli Glaser

Danke für die Antwort. Sie haben Recht, dass das Relais mit einem SSR und verschiedenen anderen Komponenten entkoppelt ist. Ich habe die Diode ausprobiert und später einen 220-uF-Elektrolytkondensator zwischen 5 V und GND auf den Stromschienen in der Nähe des LCD. Ich habe die beiden (noch) nicht zusammen ausprobiert.
Richard Russell

Ich habe auch versucht, die Wechselstromschaltung bewusst etwa einen Fuß vom 5-V-Stromkreis entfernt zu bewegen, wobei nur das 5-V-Relaissignalkabel übrig blieb, das sie verband, aber das half nicht. In meinen Experimenten habe ich festgestellt, dass eine kleine Last am Relais (85-W-Halogenlampe) keine großen Auswirkungen auf das Display zu haben scheint. Wenn ich jedoch eine große Last (2000-W-Wasserkocher) habe, ist es wahrscheinlicher, dass der Fehler verursacht wird. Ich habe dieses Problem mit der Lampe früher gesehen, wenn auch selten.
Richard Russell

Eine Keramikkappe von 1 uF oder so wäre besser für Transienten, fügen Sie eine parallel zu den 220 uF hinzu. Versuchen Sie, eine oder zwei weitere> 100uF-Kappen über + 5V und GND in der Nähe der Relaiskabel hinzuzufügen. Können Sie uns ein besseres Bild Ihres Setups zeigen?
Oli Glaser

1

Ich hatte das gleiche Problem mit einem 16x4 LCD - Display , wenn der Arduino wurde auch ein SainSmart Steuerung opto-isolierte Relaiskarte . Bei nicht angeschlossenen Relaiskontakten funktionierte alles einwandfrei. Als das Relais jedoch eine induktive Last (ein 24-VAC-Leistungsrelais) schaltete, verstümmelte die Anzeige. Es half keine Menge an Leistungsisolation und Filterkondensatoren.

Was das Problem löste, war ein Dämpfer (Kondensator und Widerstand in Reihe) über den SainSmart-Relaiskontakten. Ich habe einen vorverpackten Cornell Dubilier EMI / RFI- Filter verwendet, um die Sauberkeit zu gewährleisten, aber ein 0,1-ufd-Kondensator der Gartenvariante in Reihe mit einem 47-Ohm-Widerstand würde wahrscheinlich genauso gut funktionieren.


Darf ich den Schaltplan sehen, wie Sie den Kondensator und den Widerstand mit dem Relais in Reihe schalten. DANKE
Jam Ville

0

Ich habe mir den Kopf geschlagen, warum mein LCD "verstümmelt" ist, und es stellte sich heraus, dass ich mein Arduino GND nicht mit dem Steckbrett verbunden habe (wenn dies jemandem hilft). Grüße


Dies fügt vorhandenen Kommentaren nicht viel hinzu.
David

-1

Verwenden Sie ein abgeschirmtes Kabel am Ausgang und erden Sie es. Es hat das Problem für mich gelöst.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.