Inhaltsverzeichnis:

3-Draht HD44780 LCD für weniger als 1 Dollar - Gunook
3-Draht HD44780 LCD für weniger als 1 Dollar - Gunook

Video: 3-Draht HD44780 LCD für weniger als 1 Dollar - Gunook

Video: 3-Draht HD44780 LCD für weniger als 1 Dollar - Gunook
Video: BitBastelei #287 - HD44780 LCDs mit Arduino 2024, Juli
Anonim
3-Draht HD44780 LCD für weniger als 1 Dollar
3-Draht HD44780 LCD für weniger als 1 Dollar

In diesem anweisbaren erfahren wir, wie wir ein LCD basierend auf dem HD44780-Chipsatz an den SPI-Bus anschließen und es mit nur 3 Drähten für weniger als 1 US-Dollar antreiben können. Obwohl ich mich in diesem Tutorial auf das alphanumerische Display HD44780 konzentrieren werde, funktioniert das gleiche Prinzip für alle anderen LCDs, die einen parallelen 8-Bit-Datenbus verwenden, ziemlich gleich und kann sehr einfach an Displays mit 16-Bit-Datenbussen angepasst werden. Die auf HD44780 (und kompatiblen) basierenden alphanumerischen Displays sind normalerweise in 16x2 (2 Zeilen bestehend aus 16 Zeichen) und 20x4 Konfigurationen erhältlich, können jedoch in vielen weiteren Formen gefunden werden. Das "komplizierteste" Display wäre ein 40x4-Display. Diese Art von Display ist etwas Besonderes, da es 2 HD44780-Controller hat, einen für die oberen beiden Reihen und einen für die unteren beiden Reihen. Einige Grafik-LCDs haben auch zwei Controller. Die HD44780 LCDs sind großartig, sie sind sehr günstig, gut lesbar und recht einfach zu handhaben. Aber sie haben auch einige Nachteile, diese Displays belegen viele I / O-Pins, wenn sie mit dem Arduino verbunden sind. In einfachen Projekten ist dies kein Problem, aber wenn Projekte groß werden, mit viel E/A oder wo bestimmte Pins für Dinge wie Analoges Lesen oder PWM benötigt werden, kann die Tatsache, dass diese LCDs mindestens 6 Pins benötigen, zu einem Problem werden Problem. Aber wir können dieses Problem auf kostengünstige und interessante Weise lösen.

Schritt 1: Erhalten der Komponenten

Ich habe TaydaElectronics für die meisten Komponenten verwendet, die ich in diesem Projekt verwendet habe. Sie können diese Teile auch bei ebay bekommen, aber der Einfachheit halber verlinke ich Sie zu Tayda. Shopping List2 - 74HC595-Paket DIP161 - Generic Stiftleiste - 2 Pins. Dies ist nicht erforderlich, ich habe dies verwendet, um die Hintergrundbeleuchtung dauerhaft zu deaktivieren.3 - Keramikkondensator - Kapazität 0,1 µF; Spannung 50V1 - Elektrolytkondensator - Kapazität 10µF; Spannung 35V1 - Keramikkondensator - Kapazität 220pF; Spannung 50V1 - NPN-Transistor - Art.-Nr. PN2222A*1 - 1k Ω Widerstand1 - Trimmer Potentiometer - maximaler Widerstand 5kΩ1 - 470 Ω Widerstand* Bei einem NPN-Transistor bleibt die Hintergrundbeleuchtung ausgeschaltet, bis sie per Software eingeschaltet wird. Wenn die Hintergrundbeleuchtung standardmäßig eingeschaltet sein soll, verwenden Sie einen PNP-Transistor. Es müssen jedoch Änderungen im Code der bereitgestellten Bibliothek vorgenommen werden. Die Zwischensumme für diese Liste beträgt 0,744 USD. Die Stiftleiste wird auch nicht benötigt, sodass Sie direkt dort 15 Cent sparen können und die Zwischensumme 0,6 USD beträgt.

Schritt 2: Kennen Sie Ihre Hardware Nr. 1

Kennen Sie Ihre Hardware Nr. 1
Kennen Sie Ihre Hardware Nr. 1

Hier ist ein Standard-Pin aus einem HD44780-LCD, der auch einigen Grafik-LCDs sehr ähnlich ist. Der HD44780 kann in zwei Modi arbeiten: 1. 4-Bit-Modus, bei dem jedes an das LCD gesendete Byte aus 2 4-Bit-Teilen besteht. 2. 8-Bit-Modus, auf den wir uns konzentrieren werden. Das LCD hat insgesamt 16 Pins, 3 Steuerpins und 8 Datenpins: RS - Steuert, ob wir einen Befehl oder Daten an das LCD senden möchten. Wobei 'high' Daten (ein Zeichen) und 'low' ein Befehlsbyte bedeutet. R/W - Der HD44780 Controller ermöglicht es Ihnen, aus seinem RAM zu lesen. Wenn dieser Pin 'high' ist, können wir Daten von seinen Datenpins lesen. Wenn es 'niedrig' ist, können wir Daten auf das LCD schreiben. Obwohl die Option zum Lesen vom LCD in einigen Fällen nützlich sein kann, werden wir in diesem Tutorial nicht darauf eingehen und diesen Pin einfach erden, um sicherzustellen, dass er sich immer im Schreibmodus befindet. E - E ist der 'Enable'-Pin, dieser Pin wird auf "high" und dann auf "low" umgeschaltet, um die Daten in seinen RAM zu schreiben und sie schließlich auf dem Bildschirm anzuzeigen. DB0-7 - Dies sind die Datenpins. Im 4-Bit-Modus verwenden wir nur die 4 High-Bits DB4-DB7, und im 8-Bit-Modus werden alle verwendet. VSS - Dies ist der Masse-Pin. VCC - Dies ist der Strom-Pin, das LCD wird mit einer 5V-Stromversorgung betrieben, wir können es leicht über den +5V-Pin des Arduino mit Strom versorgen. Vo - Dies ist der Pin, mit dem Sie den Kontrast für das Display einstellen können, es erfordert ein Potentiometer, normalerweise wird ein 5K-Ohm-Poti verwendet. LED + - Dies ist der Stromquelle für die Hintergrundbeleuchtung. Einige LCDs haben keine Hintergrundbeleuchtung und haben nur 14 Pins. In den meisten Fällen erfordert dieser Pin auch eine +5-V-Verbindung. LED- - Dies ist die Masse für die Hintergrundbeleuchtung.** Es ist wichtig, das Datenblatt des Displays zu überprüfen oder die Platine auf einen Hintergrundbeleuchtungswiderstand zu überprüfen -in, in diesem Fall müssen Sie nur LED+ mit Strom versorgen und LED- erden. Wenn Ihr LCD jedoch keinen eingebauten Widerstand für die Hintergrundbeleuchtung hat, ist es wichtig, dass Sie einen hinzufügen, da sonst die Hintergrundbeleuchtung viel Strom verbraucht und schließlich durchbrennt. In den meisten Fällen wird dieses LCD mit dem Arduino verbunden, indem es im 4-Bit-Modus verwendet und der R / W-Pin geerdet wird. Auf diese Weise verwenden wir die Pins RS, E und DB4-DB7. Der Betrieb im 4-Bit-Modus hat einen weiteren kleinen Nachteil, da das Schreiben von Daten auf den Bildschirm doppelt so lange dauert wie in einer 8-Bit-Konfiguration. Das LCD hat eine "Einschwingzeit" von 37 Mikrosekunden, dh Sie müssen 37 Mikrosekunden warten, bevor Sie den nächsten Befehl oder das nächste Datenbyte an das LCD senden. Da wir im 4-Bit-Modus Daten für jedes Byte zweimal senden müssen, beträgt die Gesamtzeit, die zum Schreiben eines einzelnen Bytes benötigt wird, bis zu 74 Mikrosekunden. Dies ist immer noch schnell genug, aber ich wollte, dass mein Design die bestmöglichen Ergebnisse liefert. Die Lösung unseres Problems mit der Anzahl der verwendeten Pins liegt in einem Seriell-zu-Parallel-Wandler…

Schritt 3: Kennen Sie Ihre Hardware #2

Kennen Sie Ihre Hardware #2
Kennen Sie Ihre Hardware #2

Was wir tun werden, ist einen Adapter zu bauen, der eine serielle Art der Kommunikation aus dem Arduino nimmt und die Daten in einen parallelen Ausgang umwandelt, der an unser LCD gespeist werden kann. In kommt der 74HC595-Chip. Dies ist ein sehr billiges und einfach zu bedienendes Schieberegister. Im Wesentlichen nimmt es einen Takt und Datensignale auf, die es verwendet, um einen internen 8-Bit-Puffer mit den 8 letzten Bits zu füllen, die "eingetaktet" wurden. Sobald der 'Latch' (ST_CP) Pin auf 'high' gebracht wurde, verschiebt er diese Bits in seine 8 Ausgänge. Der 595 hat eine sehr nette Funktion, er hat einen seriellen Datenausgangspin (Q7'), dieser Pin kann verwendet werden, um 2 oder mehr 595er miteinander zu verketten, um Seriell-zu-Parallel-Adapter zu bilden, die 16 oder mehr Bits breit sind. Für dieses Projekt benötigen wir 2 dieser Chips. Der Schaltplan kann auch so modifiziert werden, dass er mit einem einzelnen 595 im 4-Bit-Modus funktioniert, dies wird jedoch in diesem Tutorial nicht behandelt.

Schritt 4: Alles verkabeln

Alles verkabeln
Alles verkabeln

Jetzt, da wir wissen, wie unsere Hardware funktioniert, können wir alles verkabeln. Im Schaltplan sehen wir 2 595 Chips, die miteinander verkettet sind, um einen 16-Bit-Parallelausgang zu bilden. Der untere Chip ist eigentlich der Hauptchip, und der obere ist mit einer Daisy Chain verbunden. Was wir hier sehen, ist, dass der untere 595 die Datenpins des LCD in einer 8-Bit-Konfiguration steuert, der obere Chip steuert das RS-Signal und die Hintergrundbeleuchtung, indem er einen Transistor ein- oder ausschaltet. Denken Sie an die *Hinweise zur LCD-Hintergrundbeleuchtung auf der Seite Know your hardware #1. Falls Ihr LCD keinen Hintergrundbeleuchtungswiderstand hat, vergessen Sie nicht, einen in Ihre Schaltung aufzunehmen. In meinem Fall habe ich die LCDs bereits mit einem eingebauten Widerstand geliefert, daher habe ich diesen Schritt übersprungen. Der Kontrast wird über ein 5K Ohm Poti angelegt, ein Pin geht auf GND, der zweite auf VCC und der Wischer auf den Vo-Pin des LCD. Die Kondensatoren, die auf den VCC-Leitungen des LCD und des 595 verwendet werden, sind Entkopplungskondensatoren, die dazu dienen, Störungen zu beseitigen. Sie sind kein Muss, wenn Sie an einem Steckbrett arbeiten, sollten jedoch verwendet werden, wenn Sie Ihre eigene Version dieser Schaltung bauen, die außerhalb von "Laborbedingungen" verwendet werden soll. R5 und C9 in dieser ganz bestimmten Reihenfolge erzeugen eine RC-Verzögerung, die sicherstellt, dass die Daten in den Ausgängen des 595 Zeit haben, sich zu stabilisieren, bevor der Enable-Pin auf dem LCD auf "high" gesetzt wird und die Daten liest. Q7' des unteren 595 geht in den seriellen Dateneingang des 595 oben, dadurch entsteht eine Daisy Chain von 595s und damit eine 16-Bit-Schnittstelle. Die Verkabelung mit dem Arduino ist einfach. Wir verwenden eine 3-Draht-Konfiguration mit den SPI-Pins von Arduino. Dies ermöglicht sehr schnelle Datenübertragungen, das Senden von 2 Bytes an das LCD dauert normalerweise etwa 8 Mikrosekunden. Dies ist sehr schnell und tatsächlich viel schneller als die Zeit, die das LCD benötigt, um die Daten zu verarbeiten, daher ist zwischen jedem Schreibvorgang eine Verzögerung von 30 Mikrosekunden erforderlich. Ein sehr großer Vorteil der Verwendung von SPI besteht darin, dass die Pins D11 und D13 mit anderen SPI-Geräten geteilt werden. Dies bedeutet, dass, wenn Sie bereits über eine andere Komponente verfügen, die SPI verwendet, z. B. einen Beschleunigungsmesser, diese Lösung nur einen zusätzlichen Pin für das Aktivierungssignal verwendet. Auf der nächsten Seite sehen wir das Ergebnis. Ich habe einen Rucksack auf einem Perfboard gebaut und er funktioniert bei mir bisher sehr gut.

Schritt 5: Das Ergebnis + Bibliothek

Das Ergebnis + Bibliothek
Das Ergebnis + Bibliothek
Das Ergebnis + Bibliothek
Das Ergebnis + Bibliothek
Das Ergebnis + Bibliothek
Das Ergebnis + Bibliothek
Das Ergebnis + Bibliothek
Das Ergebnis + Bibliothek

"Ein Bild sagt mehr als tausend Worte", dieser Aussage stimme ich zu, daher hier einige Bilder des Endergebnisses für dieses Projekt. Dies sind Bilder des fertigen Produkts, die Fritzing-PCB-Ansicht ist das Perfboard-Layout, mit dem ich meinen Rucksack gebaut habe. Sie können es nützlich finden, wenn Sie Ihre eigenen bauen möchten. Mir hat es so gut gefallen, dass ich eine Leiterplatte mit DipTrace entworfen und eine Charge von 10 Leiterplatten bestellt habe. Ich benötige 2 oder 3 Einheiten für mich selbst, stelle den Rest jedoch zu einem symbolischen Preis zur Verfügung, wenn ich sie erhalte. Wenn also jemand Interesse hat, lass es mich wissen. * Bearbeiten: Die PCBs sind hier und sie funktionieren. Hier ist die vollständige Bildergalerie für dieses Projekt, einschließlich der tatsächlichen Leiterplatten. https://imgur.com/a/mUkpw#0 Natürlich habe ich das Wichtigste nicht vergessen, eine Bibliothek, um diese Schaltung zu verwenden. Es ist mit der in der Arduino IDE enthaltenen LiquidCrystal-Bibliothek kompatibel, sodass Sie die Deklarationen oben in Ihrem Sketch einfach ersetzen können und nichts anderes in Ihrem Sketch ändern müssen. Es gibt auch eine Beispielskizze, die zeigt, wie jede Funktion in der Bibliothek funktioniert, also sehen Sie sich das an.

Empfohlen: