Pinbelegung des LCD-Displays. Anschließen und Arbeiten mit dem WH1602-Display. Bibliotheken für die Arbeit mit i2c-LCD-Displays

Im Laufe meiner Leidenschaft für Elektronik hatte ich die Gelegenheit, LCDs verschiedener Hersteller zu verwenden – DataVision, WINSTAR, Uniworld Technology Corp. Sie unterschieden sich in der Art des Controllers, der Anzahl der Pins und der Länge der Leitungen, hatten aber alle den gleichen Anschlussplan, das gleiche Befehlssystem und wurden vom gleichen Programm des Mikrocontrollers bedient. Daher werden wir jetzt zwar über das Display sprechen WH0802A von WINSTAR, alles, was unten gesagt wird, gilt für Zeichen-LCD-Displays anderer Unternehmen.

Also verbinden wir das WH0802A-YGH-CT-Display mit dem Mikrocontroller

WH0802A ist ein zweizeiliges Zeichendisplay für 8 Zeichen mit integriertem KS0066-Steuergerät.
Schauen wir uns den Zweck der Anzeigestifte an.

Einige Displays verfügen über zwei zusätzliche Pins – Hintergrundbeleuchtungspins +LED und –LED. Wenn es darüber hinaus Schlussfolgerungen gibt, bedeutet dies nicht, dass eine Hintergrundbeleuchtung vorliegt. Genauso wie umgekehrt. Mein Display hat eine Hintergrundbeleuchtung, aber keine Steuerpins.

Standardmäßig ist die Hintergrundbeleuchtung des WH0802A-YGH-CT-Displays deaktiviert. Um es einzuschalten, müssen Sie ein paar einfache Manipulationen vornehmen, nämlich zwei Jumper installieren und einen Strombegrenzungswiderstand anlöten (siehe Foto RK, JF bzw. RA).

Anschlussplan anzeigen

Dies ist ein typisches Diagramm zum Anschluss von Zeichen-LCDs. Wir werden den Steuerkreis für die Hintergrundbeleuchtung des Displays nicht verwenden, aber ich habe ihn für alle Fälle gezeichnet.

Code starten

Nachdem Sie den Stromkreis mit Strom versorgt haben, müssen Sie den Kontrastregler (Widerstand R1) einschalten. Wenn die oberste Zeile auf dem Bildschirm erscheint, bedeutet dies, dass sie aktiv ist und es Zeit ist, mit dem Schreiben von Code zu beginnen. In der Anfangsphase werden wir einen 8-Bit-Bus verwenden. Um die ersten Ergebnisse zu erhalten, müssen wir zwei Funktionen schreiben – eine Datenaufzeichnungsfunktion und eine Befehlsaufzeichnungsfunktion. Sie unterscheiden sich nur in einer Zeile: Wenn Daten geschrieben werden, muss das RS-Signal 1 sein, wenn ein Befehl geschrieben wird, muss RS 0 sein. Wir werden die Lesefunktionen vorerst nicht verwenden, daher wird das R/W-Signal immer 0 sein .

Der Schreibzyklus für einen 8-Bit-Bus sieht folgendermaßen aus:
1. RS einstellen (0 – Befehl, 1 – Daten)
2. Geben Sie den Wert des Datenbytes an den DB7…DB0-Bus aus
3. Setzen Sie E=1
4. Softwareverzögerung 1
5. Setzen Sie E=0
6. Softwareverzögerung 2

Der LCD-Zeichenanzeige-Controller ist nicht unendlich schnell, daher kommt es zwischen einigen Vorgängen zu Softwareverzögerungen. Der erste wird benötigt, um das Strobe-Signal für einige Zeit zu halten, der zweite, damit der Controller Zeit hat, Daten zu schreiben oder einen Befehl auszuführen. Die Verzögerungswerte sind immer in der Beschreibung des Display-Controllers angegeben und Sie müssen immer mindestens deren Mindestwert einhalten, da sonst Ausfälle im Betrieb des Controllers vorprogrammiert sind.

Im Allgemeinen verfügt der Display-Controller über ein sogenanntes Busy Flag – BF. Wenn das Flag 1 ist, ist der Controller beschäftigt, wenn es 0 ist, ist es frei. Anstelle einer zweiten Softwareverzögerung können Sie das Besetzt-Flag auslesen und prüfen, wann der Display-Controller frei ist. Da wir aber schnell erste Ergebnisse erhalten wollen, beschäftigen wir uns später mit der Busy Flag.

//Verbinden Sie das Zeichen-LCD-Display mit dem AVR
#enthalten
#enthalten

//Port, an den der LCD-Datenbus angeschlossen ist
#define PORT_DATA PORTD
#define PIN_DATA PIND
#DDRX_DATA DDRD definieren

//Port, an dem die Steuerpins angeschlossen sind
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

//Pin-Nummern des Mikrocontrollers
//an den die LCD-Steuerpins angeschlossen sind
#define RS 5
#define RW 6
#define DE 7

//Makros für die Arbeit mit Bits
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))

#define F_CPU 8000000
#define_delay_us(us) __delay_cycles((F_CPU / 1000000) * (us));
#define_delay_ms(ms) __delay_cycles((F_CPU / 1000) * (ms));

//Befehlsaufzeichnungsfunktion
Leere LcdWriteCom( unsigniertes Zeichen Daten)
{
ClearBit(PORT_SIG, RS); // RS auf 0 setzen
PORT_DATA = Daten; // Daten an den Bus ausgeben
SetBit(PORT_SIG, EN); // setze E auf 1
_delay_us(2);
ClearBit(PORT_SIG, EN); // setze E auf 0
_delay_us(40);

//Datenaufzeichnungsfunktion

Leere LcdWriteData( unsigniertes Zeichen Daten)
{
SetBit(PORT_SIG, RS); //RS auf 1 setzen
PORT_DATA = Daten; //Daten an den Bus ausgeben
SetBit(PORT_SIG, EN); //setze E auf 1
_delay_us(2);

ClearBit(PORT_SIG, EN); // setze E auf 0

Delay_us(40);
}

int hauptsächlich( Leere )
{
während (1);
zurückkehren 0;
}

Hier gibt es keine komplizierten Teile, alles sollte klar sein. Fortfahren.

Jedes LCD-Display muss vor der Verwendung initialisiert werden. Der Initialisierungsprozess wird normalerweise im Datenblatt des Display-Controllers beschrieben. Aber selbst wenn es dort keine Informationen gibt, wird die Reihenfolge höchstwahrscheinlich so sein.

1. Essen servieren

2. Warten Sie >40 ms

3. Geben Sie den Funktionssatzbefehl aus

D.L.– Busbreiten-Einstellungsbit
0 – 4-Bit-Bus, 1 – 8-Bit-Bus

N– Bit zum Einstellen der Anzahl der Anzeigezeilen
0 – einzeiliger Modus, 1 – zweizeiliger Modus

F– Schriftart-Einstellungsbit
0 – Format 5*8, 1 – Format 5*11

* – es spielt keine Rolle, was in diesen Bits enthalten sein wird

4. Geben Sie den Befehl „Anzeige EIN/AUS“ aus

D– Ein-/Aus-Bit anzeigen
0 – Display aus, 1 – Display ein

C– Cursor-Ein/Aus-Bit
0 – Cursor deaktiviert, 1 – Cursor aktiviert

B– Flicker-Aktivierungsbit
0 – flackernder Cursor aktiviert, 1 – flackernder Cursor deaktiviert

5. Geben Sie den Befehl „Anzeige löschen“ aus


6. Warten Sie > 1,5 ms

7. Geben Sie den Befehl „Entry Mode Set“ aus

AUSWEIS– Reihenfolge der steigenden/abfallenden DDRAM-Adresse (Anzeigedaten-RAM)
0 – Cursor bewegt sich nach links, Adresse verringert sich um 1, 1 – Cursor bewegt sich nach rechts, Adresse erhöht sich um 1

Sch– Reihenfolge der gesamten Anzeige verschieben
0 – keine Verschiebung, 1 – Verschiebung erfolgt entsprechend dem I/D-Signal – falls vorhanden. 0 – Anzeige verschiebt sich nach rechts, 1 – Anzeige verschiebt sich nach links

In unserem Beispiel sieht die Initialisierungsfunktion so aus

Wir haben gelernt, wie man: einen Mikrocontroller steuert und etwas mit einem Mikrocontroller steuert. Um unser Gerät benutzerfreundlicher zu machen, werden wir nun ein Display daran anschließen.

Lassen Sie mich gleich eine Reservierung vornehmen: Die Anzeige ist symbolisch. Das bedeutet, dass er in seinem Inneren, in seiner Erinnerung, bereits ein Alphabet hat. Wir müssen lediglich den Befehl zum Drucken der Zeile erteilen.

Die Anzeigen sind unterschiedlich: unterschiedliche Farben der Bildschirmhintergrundbeleuchtung, unterschiedliche Anzahl von Zeilen, unterschiedliche Anzahl von Zeichen pro Zeile. Daher betrachten wir hier das WH0802A-YGK-CT-Display, 2 Zeilen mit 8 Zeichen, gelbe LED-Hintergrundbeleuchtung.

Lassen Sie uns ein Projekt in CodeVision erstellen. Auf der Registerkarte LCD geben wir den Port an, an den unser Display angeschlossen wird (PORTD). In der Zeile „Char/Line“ geben wir die Anzahl der Zeichen unseres LCD-Displays an (8).

Wir generieren und speichern das Projekt. Wir bringen den Code in die folgende Form:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #enthalten #asm .equ __lcd_port= 0x12 ; PORTD #endasm #include void main(void ) ( PORTD= 0x00 ; DDRD= 0x00 ; lcd_init(8 ); while (1 ) ( ) ; )

#enthalten #asm .equ __lcd_port=0x12 ;PORTD #endasm #include void main(void) ( PORTD=0x00; DDRD=0x00; lcd_init(8); while (1) ( ); )

Ändern wir unseren Programmcode ein wenig:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #enthalten #asm .equ __lcd_port= 0x12 #endasm #include void main(void) ( PORTD= 0x00 ; DDRD= 0x00 ; lcd_init(8 ); #pragma rl- while (1 ) ( );

#enthalten #asm .equ __lcd_port=0x12 #endasm #include void main(void) ( PORTD=0x00; DDRD=0x00; lcd_init(8); lcd_gotoxy(0,0); lcd_putsf("lesson3"); #pragma rl+ lcd_gotoxy(0,1); lcd_putsf("Lesson3"); #pragma rl- while (1) ( )

Lassen Sie uns den resultierenden Code zur Simulation in ISIS Proteus ausführen. Wie Sie sehen, wird die erste Zeile korrekt angezeigt, die zweite Zeile ist jedoch beschissen. Tatsache ist, dass Proteus das russische Alphabet nicht erkennt und wenn Ihr Display es nicht unterstützt, dann wird das echte Display auch unverständliche Zeichen enthalten.

Jetzt müssen wir das Ganze auf einem echten Display ausprobieren. Hier gibt es einige Nuancen. Wir öffnen das Datenblatt auf unserem Display und sehen diese Tabelle mit Pinbelegung:

Wahrscheinlich ist hier alles klar, aber dennoch:

1 - Masse 0V.

2 - Stromversorgung +5V.

3 - Kontrastkontrolle. Verbunden über einen variablen Widerstand.

LED Lichter. Wir schließen es wie eine normale LED an.

A – über einen Strombegrenzungswiderstand mit „+“ verbinden, K – mit „Masse“ (GND) verbinden.

Ein weiterer wichtiger Punkt ist, dass der Mikrocontroller über einen Quarzresonator getaktet werden muss, da sonst ein korrekter Betrieb nicht gewährleistet ist.

Aussehen des Firmware-Geräts

Firmware und Proteus-Datei verfügbar

Bei der Arbeit mit Arduino ist es manchmal erforderlich, einige Daten auf dem Display anzuzeigen. Die Übertragung der Daten auf einen PC zu diesem Zweck ist jedoch nur dann sinnvoll, wenn das Gerät in Verbindung mit einem PC verwendet wird. Aber was ist mit autonomen Geräten? Hier kommen LCD-Displays zur Rettung. Schauen wir uns LCD-Displays an, die auf dem HD44780-Controller basieren

Dieses monochrome Display verfügt über eine optionale Hintergrundbeleuchtung und kann 2 Zeilen mit 16 Zeichen anzeigen. Die Zeichenauflösung beträgt 5x8 Pixel. Es gibt Unterstützung für das kyrillische Alphabet.

Welche Vorteile bieten diese Displays? Der HD44780-LCD-Bildschirm ist ein Standard und wird häufig bei kleinen monochromen LCD-Displays verwendet, daher wurde die darauf basierende Bibliothek für die Arbeit mit Displays von Profis geschrieben. Arduino-Entwickler haben eine Bibliothek für ihre Plattform geschrieben, die LiquidCrystal heißt. Wir verwenden es, um mit dem von mir gewählten Display zu arbeiten.

Zum Anschluss des LCD-Bildschirms benötigen wir folgende Komponenten

  • Jedes Arduino (in unserem Fall Arduino UNO)
  • LCD-Display basierend auf HD44780
  • Steckbrett
  • Verbindungsdrähte
  • Potentiometer (optional)

Anschließen eines LCD-Bildschirms

Anschließen eines LCD-Bildschirms an Arduino Selbst für ein Kind nicht schwierig. Befestigen Sie den Bildschirm am Steckbrett und verbinden Sie die +5-V-Stromversorgung und Masse vom Arduino mit den Stromschienen des Steckbretts, wie auf dem Foto gezeigt. (Da wir häufig Strom und Erde benötigen, ist der Anschluss an die Schienen bequemer, und im Allgemeinen muss man sich daran gewöhnen, ihn auf diese Weise anzuschließen.)


Für den vollständigen Betrieb von Arduino mit dem Display verbinden wir 12 Pins:

  • 1 - Vss, Masse ⇨ GND
  • 2 - Vdd, Leistung ⇨ +5 V
  • 3 - Vo, Kontrastspannungsregelung ⇨ Potentiometerausgang
  • 4 - RS, Registerauswahl ⇨ Pin 12 Arduino
  • 5 - R/W, Lesen/Schreiben ⇨ Masse (Schreibmodus)
  • 6 – E, auch bekannt als Enable, Fall Strobe ⇨ Pin 11 Arduino
  • 7-10 - DB0-DB3, niederwertige Bits der 8-Bit-Schnittstelle; nicht verbunden
  • 11-14 – DB4-DB7, High-Bits der Schnittstelle ⇨ Pins 5-2 Arduino
  • 15 - A, Stromversorgung für Hintergrundbeleuchtung ⇨ +5 V
  • 16 - K, Masse für Hintergrundbeleuchtung ⇨ GND

Dieses Display unterstützt, wie andere auf dem HD44780-Controller, zwei parallele Schnittstellenoptionen:

  • 8-Bit, Pins DB0-DB7, 1 Byte (8 Bit) wird pro Taktzyklus übertragen
  • 4-Bit, Pins DB4-DB7, pro Taktzyklus wird ein halbes Byte übertragen (4 Bits)

Es macht keinen Sinn, die 8-Bit-Option zu verwenden, da dafür mehr Beine erforderlich sind, und es gibt immer noch keinen Geschwindigkeitsgewinn: Die Bildwiederholfrequenz beträgt nicht mehr als 10 Mal pro Sekunde, sodass wir immer noch nichts sehen können häufig aktualisierte Daten. Daher lassen wir die Pins DB0-DB3 unbeschaltet.

Der Bildschirm ist angeschlossen und bereit, Daten zu empfangen. Es bleibt nur noch, ein Programm für Arduino zu schreiben.

Programmierung

Um Text von Arduino auszugeben, verwenden wir die Liquid Crystal-Bibliothek, über die wir oben gesprochen haben.

Um den Sensor auf Arduino zu betreiben, müssen Sie die DHT11-Bibliothek herunterladen und installieren.


Sie können die Bibliothek hier herunterladen.


Nachdem wir die erforderliche Bibliothek heruntergeladen haben, müssen wir sie korrekt installieren Installieren. Die heruntergeladenen Dateien müssen in den folgenden Pfad verschoben werden:

Disk C-Programmdateien Arduino-Bibliotheken



Nachdem wir alles erledigt haben, kommen wir zum wichtigsten Schritt, nämlich der Programmierung.


/* Bibliothek für die Arbeit mit LCD einbinden */
#enthalten

/* Erstellen Sie ein LCD-Anzeigeobjekt mit dem LiquidCrystal-Klassenkonstruktor
* mit 6 Argumenten. Die Bibliothek selbst bestimmt anhand der Anzahl der Argumente,
* dass Sie eine 4-Bit-Schnittstelle verwenden müssen.
* Wir geben an, mit welchen Arduino-Pins die Display-Pins verbunden sind:
*RS, E, DB4, DB5, DB6, DB7
*/
LiquidCrystal-LCD (12, 11, 5, 4, 3, 2);

Void setup()
{
/* Initialisierung der Anzeige: 2 Zeilen mit 16 Zeichen */
LCD. begin(16, 2);
/* Phrase anzeigen */
LCD. print("Hallo von HelpDuino!");
}

Leere Schleife()
{
/* Setzen Sie den Cursor auf Spalte 1 der 2. Zeile. Die Nummerierung beginnt bei Null
* Das erste Argument ist die Spaltennummer.
*/

LCD. setCursor(0, 1);
/* Zeigt die Anzahl der Sekunden an, die seit dem Start des Arduino vergangen sind */
LCD. print(millis()/1000);
}


Dies ist, was Sie bekommen sollten, dies ist die einfachste Skizze, sie enthält nur 4 Hauptlinien, aber Sie können es herausfinden und dieses Prinzip verwenden, um das zu erstellen, was Sie brauchen!

Jeder Funkamateur kommt nach einer gewissen Anzahl einfacher hausgemachter Projekte zu dem Ziel, mit Sensoren und Knöpfen etwas Grandioses zu konstruieren. Schließlich ist es viel interessanter, Daten auf einem Display anzuzeigen als auf einem Hafenmonitor. Doch dann stellt sich die Frage: Welches Display soll man wählen? Und im Allgemeinen, wie wird es angeschlossen, was wird zum Verbinden benötigt? Die Antworten auf diese Fragen werden in diesem Artikel besprochen.

LCD 1602

Unter den vielen Anzeigemöglichkeiten möchte ich besonders das LCD1602-Display auf Basis des HD4478-Controllers erwähnen. Dieses Display ist in zwei Farben erhältlich: weiße Buchstaben auf blauem Hintergrund, schwarze Buchstaben auf gelbem Hintergrund. Auch der Anschluss des LCD 1602 an Arduino bereitet keine Probleme, da eine integrierte Bibliothek vorhanden ist und kein zusätzlicher Download erforderlich ist. Displays unterscheiden sich nicht nur im Preis, sondern auch in der Größe. Funkamateure verwenden häufig 16 x 2, also 2 Zeilen mit 16 Zeichen. Es gibt aber auch 20 x 4, wo es 4 Zeilen mit 20 Zeichen gibt. Abmessungen und Farbe spielen beim Anschluss des LCD 1602-Displays an Arduno keine Rolle; Der Betrachtungswinkel beträgt 35 Grad, die Reaktionszeit des Displays beträgt 250 ms. Es kann bei Temperaturen von -20 bis 70 Grad Celsius arbeiten. Im Betrieb verbraucht es 4 mA für den Bildschirm und 120 mA für die Hintergrundbeleuchtung.

Wo wird es verwendet?

Dieses Display ist nicht nur bei Funkamateuren, sondern auch bei großen Herstellern beliebt. Beispielsweise nutzen auch Drucker und Kaffeemaschinen LCD1602. Dies liegt an seinem niedrigen Preis; auf chinesischen Websites kostet dieses Display 200-300 Rubel. Es lohnt sich dort zu kaufen, da in unseren Filialen die Aufschläge für dieses Display sehr hoch sind.

Anschließen an Arduino

Beim Anschluss des LCD 1602 an Arduino Nano und Uno ist es nicht anders. Sie können mit der Anzeige in zwei Modi arbeiten: 4 Bit und 8. Beim Arbeiten mit 8 Bit werden sowohl die niederwertigen als auch die höherwertigen Bits verwendet, bei 4 Bit nur die niederwertigen. Es macht keinen besonderen Sinn, mit 8-Bit zu arbeiten, da dadurch 4 weitere Kontakte für die Verbindung hinzugefügt werden, was nicht ratsam ist, da die Geschwindigkeit nicht höher ist und die Grenze für Anzeigeaktualisierungen 10 Mal pro Sekunde beträgt. Um den LCD 1602 mit dem Arduino zu verbinden, werden im Allgemeinen viele Drähte verwendet, was einige Unannehmlichkeiten verursacht, aber es gibt spezielle Abschirmungen, aber dazu später mehr. Das Foto zeigt den Anschluss des Displays an den Arduino Uno:

Beispielcode:

#enthalten // Die erforderliche LiquidCrystal-Bibliothek hinzufügen lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Stellen Sie die Bildschirmgröße ein lcd.setCursor(0, 0); // Stellen Sie den Cursor ein an den Anfang der 1. Zeile lcd.print("Hallo, Welt!"); // Den Text drucken lcd.setCursor(0, 1); // Den Cursor an den Anfang der Zeile 2 setzen lcd.print("site") ; // Den Text drucken) void loop ()( )

Was macht der Code? Der erste Schritt besteht darin, die Bibliothek anzuschließen, um mit dem Display arbeiten zu können. Wie oben erwähnt, ist diese Bibliothek bereits in der Arduino IDE enthalten und muss nicht zusätzlich heruntergeladen und installiert werden. Als nächstes werden die Kontakte bestimmt, die mit den Pins verbunden sind: RS, E, DB4, DB5, DB6, DB7. Anschließend wird die Bildschirmgröße eingestellt. Da wir mit einer Version mit 16 Zeichen und 2 Zeilen arbeiten, schreiben wir die folgenden Werte. Wir platzieren den Cursor am Anfang der ersten Zeile und zeigen unseren ersten Text Hello World an. Platzieren Sie als Nächstes den Cursor in der zweiten Zeile und zeigen Sie den Namen der Site an. Das ist alles! Der Anschluss von LCD 1602 an Arduino Uno wurde in Betracht gezogen.

Was ist I2C und warum wird es benötigt?

Wie oben erwähnt, erfordert der Anschluss des Displays viele Kontakte. Wenn Sie beispielsweise mit mehreren Sensoren und einem LCD-Display arbeiten, reichen 1602 Pins möglicherweise einfach nicht aus. Funkamateure verwenden häufig die Uno- oder Nano-Versionen, die nicht viele Kontakte haben. Dann erfanden die Leute spezielle Schilde. Zum Beispiel I2C. Es ermöglicht den Anschluss eines Displays mit nur 4 Pins. Das ist doppelt so viel. Das I2C-Modul wird sowohl separat verkauft, wo Sie es selbst anlöten müssen, als auch bereits an das LCD 1602-Display angelötet.

Anschluss über I2C-Modul

Der Anschluss des LCD 1602 an Arduino Nano mit I2C nimmt wenig Platz in Anspruch, nur 4 Pins: Masse, Strom und 2 Datenausgänge. Wir verbinden Strom und Masse mit 5 V bzw. GND am Arduino. Wir verbinden die verbleibenden zwei Kontakte: SCL und SDA mit beliebigen analogen Pins. Auf dem Foto sehen Sie ein Beispiel für den Anschluss eines LCD 1602 an ein Arduino mit einem I2C-Modul:

Programmcode

Wenn für die Arbeit mit einer Anzeige ohne Modul nur eine Bibliothek verwendet werden musste, sind für die Arbeit mit einem Modul zwei Bibliotheken erforderlich. Einer davon ist bereits in der Arduino IDE enthalten – Wire. Eine weitere Bibliothek, LiquidCrystal I2C, muss separat heruntergeladen und installiert werden. Um die Bibliothek in Arduino zu installieren, muss der Inhalt des heruntergeladenen Archivs in den Stammordner „Libraries“ geladen werden. Beispielprogrammcode mit I2C:

#enthalten #enthalten LiquidCrystal_I2C lcd(0x27,16,2); // Stellen Sie die Anzeige ein void setup() ( lcd.init(); lcd.backlight(); // Schalten Sie die Hintergrundbeleuchtung der Anzeige ein lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Setze den Cursor auf die zweite Zeile und das Nullzeichen. lcd.setCursor(0, 1); // Zeigt die Anzahl der Sekunden seit dem Start des Arduino an lcd.print(millis()/1000); )

Wie Sie sehen, ist der Code fast derselbe.

Wie füge ich mein eigenes Symbol hinzu?

Das Problem bei diesen Anzeigen besteht darin, dass kyrillische Buchstaben und Symbole nicht unterstützt werden. Sie müssen beispielsweise ein Symbol in die Anzeige laden, damit es es widerspiegeln kann. Dazu bietet Ihnen das Display die Möglichkeit, bis zu 7 eigene Symbole zu erstellen. Stellen Sie sich die Tabelle vor:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Bei 0 ist dort nichts, bei 1 handelt es sich um einen bemalten Bereich. Im obigen Beispiel sehen Sie die Entstehung des „lächelnden Smiley“-Symbols. Anhand eines Beispielprogramms in Arduino würde es so aussehen:

#enthalten #enthalten // Erforderliche Bibliothek hinzufügen // Bitmaske des Smile-Symbols byte smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal-LCD(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Stellen Sie die Bildschirmgröße ein lcd.createChar(1, smile); // Zeichennummer erstellen 1 lcd.setCursor(0, 0); // Setze den Cursor an den Anfang von Zeile 1 lcd.print("\1" // Einen Smiley drucken (Zeichennummer 1) - "\1" ) void loop( ) ( )

Wie Sie sehen können, wurde eine Bitmaske genauso erstellt wie die Tabelle. Einmal erstellt, kann es als Variable auf dem Display angezeigt werden. Denken Sie daran, dass Sie nur 7 Zeichen im Speicher speichern können. Im Prinzip reicht das aus. Zum Beispiel, wenn Sie ein Gradsymbol anzeigen müssen.

Probleme, bei denen die Anzeige möglicherweise nicht funktioniert

Es kann vorkommen, dass die Anzeige nicht funktioniert. Beispielsweise schaltet es sich ein, zeigt aber keine Zeichen an. Oder es lässt sich überhaupt nicht einschalten. Überprüfen Sie zunächst, ob Sie die Pins richtig angeschlossen haben. Wenn Sie eine LCD 1202-Verbindung zu Arduino ohne I2C verwendet haben, kann es sehr leicht passieren, dass sich die Drähte verheddern, was dazu führen kann, dass das Display nicht richtig funktioniert. Außerdem sollte darauf geachtet werden, dass der Displaykontrast erhöht wird, da bei minimalem Kontrast noch nicht einmal erkennbar ist, ob das LCD 1602 eingeschaltet ist oder nicht. Wenn dies nicht hilft, liegt das Problem möglicherweise an der Verlötung der Kontakte, dies ist bei Verwendung eines I2C-Moduls der Fall. Ein weiterer häufiger Grund dafür, dass die Anzeige möglicherweise nicht funktioniert, ist die falsche Einstellung der I2C-Adresse. Tatsache ist, dass es viele Hersteller gibt und diese eine andere Adresse angeben können. Sie müssen dies hier korrigieren:

LiquidCrystal_I2C lcd(0x27,16,2);

In Klammern sehen Sie zwei Werte, 0x27 und 16,2 (16,2 ist die Anzeigegröße und 0x27 die I2C-Adresse). Anstelle dieser Werte können Sie versuchen, 0x37 oder 0x3F einzustellen. Nun, ein weiterer Grund ist einfach ein fehlerhaftes LCD 1602. Wenn man bedenkt, dass fast alles für Arduino in China hergestellt wird, kann man nicht hundertprozentig sicher sein, dass das gekaufte Produkt nicht defekt ist.

Vor- und Nachteile von LCD 1602

Schauen wir uns die Vor- und Nachteile des LCD 1602-Displays an.

  • Preis. Dieses Modul kann zu einem sehr günstigen Preis in chinesischen Geschäften erworben werden. Der Preis beträgt 200-300 Rubel. Manchmal wird es sogar zusammen mit einem I2C-Modul verkauft.
  • Einfach anzuschließen. Wahrscheinlich verbindet heutzutage niemand mehr LCD 1602 ohne I2C. Und mit diesem Modul benötigt die Verbindung nur 4 Kontakte, es gibt keine „Drahtgeflechte“.
  • Programmierung. Dank vorgefertigter Bibliotheken ist die Arbeit mit diesem Modul einfach; alle Funktionen sind bereits geschrieben. Und wenn Sie Ihr eigenes Symbol hinzufügen müssen, dauert das nur ein paar Minuten.
  • Bei der Nutzung durch tausende Funkamateure konnten keine größeren Nachteile festgestellt werden, lediglich Fälle von Fehlkäufen kommen vor, da überwiegend chinesische Anzeigemöglichkeiten zum Einsatz kommen.

In diesem Artikel ging es um den Anschluss des 1602 an Arduino und es wurden auch Beispiele für Programme für die Arbeit mit diesem Display bereitgestellt. Es ist wirklich eines der besten seiner Kategorie; nicht umsonst wählen es Tausende von Funkamateuren für ihre Projekte!

Jeder ist seit langem daran gewöhnt, dass jedes elektronische Gerät über einen Bildschirm verfügt, mit dessen Hilfe es einem Menschen allerlei nützliche Informationen liefert. Der MP3-Player zeigt den Namen des gerade abgespielten Titels an, die Quadcopter-Fernbedienung zeigt Flugtelemetrie an, sogar die Waschmaschine zeigt die Zeit bis zum Ende des Waschvorgangs an und das Smartphone beherbergt in der Regel den gesamten Desktop eines Personalcomputers! Höchstwahrscheinlich könnte Ihr nächstes Gerät auch ein kleines Display verwenden :) Versuchen wir, eine einfache elektronische Uhr zu bauen! Und als Anzeigetafel verwenden wir die gängige und günstige Zeichen-Flüssigkristallanzeige 1602. Hier ist sie, genau wie auf dem Bild: Zusätzlich zu 16x2, einer 20x4-Zeichenanzeige (vier Zeilen à 20 Zeichen), sowie einer Grafikanzeige mit einer Auflösung von 128x64 Pixeln gelten als recht beliebt. Hier sind sie auf den Bildern:

1. Anschluss des Zeichen-LCD-Displays 1602

Das 1602-Display verfügt über 16 Pins. Normalerweise sind sie von links nach rechts nummeriert, wenn man es wie auf dem Bild betrachtet. Manchmal sind die Pins signiert, wie zum Beispiel: DB0, DB1, EN usw. Und manchmal geben sie einfach die Ausgabenummer an. In jedem Fall ist die Liste der Pins immer dieselbe: 1 – „GND“, Masse (minus Leistung); 2 – „Vcc“, Stromversorgung +5V; Registerauswahl; „R/W“, Datenübertragungsrichtung (Schreiben/Lesen); 7-14 – „DB0“, „DB1“, .., „DB7“ – Datenbus; ); 16 – Hintergrundbeleuchtungskathode (Masse). Die VEE-, RS-Leitungen und vier Datenleitungen DB4, DB5, DB6, DB7 werden an die digitalen Ausgänge des Controllers angeschlossen. Wir werden die „R/W“-Leitung mit der „Masse“ des Controllers verbinden (da wir nur die Funktion zum Schreiben in den Anzeigespeicher benötigen). Wir werden die Hintergrundbeleuchtung vorerst nicht anschließen, ich denke, Sie können das leicht selbst herausfinden :) Schematische Darstellung des Anschlusses des Displays an Arduino Uno
Aussehen des Layouts
Für alle Fälle, auch in Form eines Schildes:
LCD-Display 1602 1 2 4 6 11 12 13 14 15 16
Arduino Uno GND +5V 4 5 6 7 8 9 +5V GND

2. „Hallo Welt!“ programmieren

Um mit LCD-Displays verschiedener Größen und Typen arbeiten zu können, verfügt der Arduino IDE-Editor über eine spezielle Bibliothek Flüssigkristall. Um die Bibliothek einzubinden, schreiben wir den folgenden Ausdruck in die erste Zeile unseres Programms: #include Als nächstes müssen wir angeben, welche Arduino-Pins wir zum Anschluss des Displays verwendet haben. Wir geben diese Informationen bei der Initialisierung des Moduls an: LiquidCrystal lcd(4, 5, 6, 7, 8, 9); Hier sind die ersten beiden Argumente die RS- und EN-Pins und die restlichen vier sind der DB4-DB7-Datenbus Linien. Als nächstes geben wir die Anzeigegröße mit dem Befehl „begin“ an: lcd.begin(16, 2); Ich möchte Sie daran erinnern, dass unser Display zwei Zeilen mit jeweils 16 Zeichen hat. Zum Schluss benötigen wir noch eine einfache „Drucken“-Funktion, um Text auszugeben. Die Ausgabe dieses bekannten Satzes mit dieser Funktion sieht folgendermaßen aus: lcd.print("Hello, world!"); Das gesamte Programm sieht folgendermaßen aus: #include Flüssigkristall-LCD (4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); lcd.print("Hello, world!"); ) void loop())( ) Laden Sie es auf den Arduino Uno und sehen Sie, was auf dem Display passiert. Es kann drei Hauptsituationen geben 🙂 1) Auf dem Display wird „Hello, world!“ angezeigt. Das heißt, Sie haben alles richtig angeschlossen und der Kontrast war wie durch ein Wunder zunächst richtig eingestellt. Wir freuen uns und gehen zum nächsten Kapitel über. 2) Das Display zeigt eine Reihe schwarzer Rechtecke – Kontrastanpassung erforderlich! Aus diesem Grund haben wir der Schaltung ein Potentiometer mit Drehknopf hinzugefügt. Wir drehen es von einer Kante zur anderen, bis eine deutliche Aufschrift auf dem Display erscheint. 3) Zwei Reihen schwarzer Rechtecke. Höchstwahrscheinlich haben Sie beim Herstellen einer Verbindung einen Fehler gemacht. Überprüfen Sie alle Kabel dreimal. Wenn Sie keinen Fehler finden, bitten Sie Ihre Katze, dies zu überprüfen!

3. Programmierung der Uhr

Nachdem das Display nun ordnungsgemäß funktioniert, versuchen wir, unser einfaches Gerät in eine echte elektronische Uhr zu verwandeln. Aufmerksamkeit! Um die Zeit anzuzeigen, benötigen wir die Time-Bibliothek. Wenn es noch nicht installiert ist, können Sie das Archiv über den Link herunterladen. Verbinden wir es: #include Dann stellen wir das aktuelle Datum und die aktuelle Uhrzeit mit der Funktion „setTime“ ein: setTime(23, 59, 59, 12, 31, 2015); Hier ist alles klar: Stunden, Minuten, Sekunden, Monat, Tag, Jahr. Um das Datum anzuzeigen, verwenden wir eine Reihe von Funktionen:
  • year() – gibt uns das Jahr zurück;
  • Monat() – Monat;
  • Tag Tag;
  • Stunde() – Stunde;
  • minute() – gibt die Minute zurück;
  • second() – Sekunde.
Achten wir nun auf diese Tatsache. Wenn wir die Anzahl der Zeichen in einem typischen Datumseintrag zählen: „31.12.2015 23:59:59“, erhalten wir 19. Und wir haben nur 16! Es passt jedoch nicht in eine Zeile. Sie können das Problem mit einer anderen nützlichen Funktion lösen – „setCursor“. Diese Funktion setzt den Cursor an die gewünschte Position. Zum Beispiel: lcd.setCursor(0,1); Platziert den Cursor am Anfang der zweiten Zeile. Der Cursor ist die Position des Zeichens, ab dem die Textausgabe mit dem nächsten „Drucken“-Befehl beginnt. Mit dieser Funktion zeigen wir in der ersten Zeile das Datum und in der zweiten die Uhrzeit an. Mit der Anzeige von Datum und Uhrzeit ist jetzt alles klar. Es bleiben Routinedinge. Nachdem beispielsweise jede Anzeige gefüllt ist, löschen wir sie mit der Funktion „clear()“: lcd.clear(); Es macht auch keinen Sinn, dass wir Daten mehr als einmal pro Sekunde anzeigen, also pausieren wir 1000 Millisekunden zwischen zwei Iterationen. Wenn wir also alles zusammenfügen, erhalten wir das folgende Programm: #include #enthalten Flüssigkristall-LCD (4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7 Uhr morgens, 10. Januar 2015) void loop())( lcd.clear( ); lcd.print("."); lcd.print("."); (: „); lcd.print(“); (1000); Laden Sie die Skizze auf das Arduino Uno hoch und beobachten Sie den Fortschritt der Uhr! 🙂 Um das erworbene Wissen zu festigen, empfehle ich, unsere Uhr zu einem vollwertigen Wecker aufzurüsten. Alles was Sie tun müssen, ist ein paar Tasten und einen Summer hinzuzufügen :)