Leon van der Horst - Projecten

LCD
Liquid Crystal Display
dot matrix met HD44780 controller


LCD display's zijn er in vele varianten, ik behandel op deze pagina de LCD display's gebaseerd op de HD44780 controller en deze worden parallel aangestuurd. Dit kan per 8-bits. maar ook 4-bits. Dat scheelt weer 4 I/O-lijnen. Echter naast de 4 of 8 bits (4 of 8 digitale poorten van de Arduino) zijn er ook nog een drietal besturingssignalen nodig: E, RS en RW (E = Enable, RS = Register Select, RW = Read/Write).
Behalve de datasheet (klik hierboven op de groene tekst "HD44780"), is er
hier meer info over dit type display's te vinden.

Deze display's komen in 14 of 16 pin uitvoeringen. De 2 extra pins zijn er puur voor de backlight. Verder zijn alle pinnen gelijk.
De display's zijn er als: 2x16, 2x20, 4x16, 4x20 en meer varianten. Met en zonder backlight en in verschillende kleuren. Meest gangbare is groen. Persoonlijk vind ik de blauwe achtergrond met witte letters veel mooier.

Hieronder het aansluitschema voor de Arduino:

Bouw de schakeling op een breadboard, sluit de Arduino via de USB-kabel aan op de computer en laad de sketch in de editor (Arduino IDE = Arduino Interface Development Environment). Sluit ook een potmeter aan op pin 3 van de LCD (wordt "C" genoemd), hiermee kun je het contrast instellen, dit maakt een groot verschil met wel of niet leesbare tekst te krijgen op de LCD!

Hieronder de sketch in de Arduino IDE:

De sketch kun je hier downloaden.

Uitleg bij deze sketch:

De software is rijkelijk voorzien van commentaar, waarin uitgelegd wordt welke pinnen van de Arduino aan welke pinnen van de display verbonden dienen te zijn.Na de commentaar regels die tussen de "/*" en de "*/" staan vermeld begint de eerste daadwerkelijk instructie in de sketch: "#include <LiquidCrystal.h>".
Deze instructie zorgt ervoor dat bij je eigen code extra code wordt toegevoegd waarin vooraf diverse functies zijn geprogrammeerd, dit zijn zogenaamde
libraries. De LiquidCrystal Library wordt standaard meegeleverd bij de Arduino software, voor meer info over de te gebruiken functies in de library klik hier.
Let op bij de eerstvolgende instructie "
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);" wordt ook een naam aangeven, hier "lcd". Dit kan ook een andere naam zijn, bijvoorbeeld: "scherm1". Vervang dan de overige aanroepen naar de library de tekst "lcd" in "scherm1". De getallen die meegegeven worden komen overeen met de pinnummers van de Arduino ten bate van respectievelijk de volgende LCD aansluitingen: RS, RW, E, D4, D5, D6, D7.
D4 t/m D7 zijn de hoogste vier bits die we gebruiken. Er zijn meer mogelijkheden met deze aanroep, zie daarvoor de link hierboven.

In het setup ("void setup()") gedeelte van de sketch wordt de LCD geïnitialiseerd via de "lcd.begin(16, 2)" functie (of bij een andere naam "scherm1.begin"). De naam "lcd" is een variabele van het type LiquidCrystal. Met de getallen wordt aangegeven dat er 16 karakters bij 2 regels op de LCD aanwezig zijn. Voor andere display's simpel deze waarden aanpassen. Vervolgens wordt een tekst geplaatst met de functie "lcd.print("Hello World!")".

In het hoofdprogramma onderdeel, de "void loop ()", wordt herhaald de cursorpositie op de LCD op de tweede regel en de eerste positie geplaatst, door middel van de functie "lcd.setCursor(0,1)". Dit om op de 2e regel het aantal seconden weer te geven dat de Arduino draait, dit met de functie "lcd.print(millis() / 1000)". Millis() geeft het aantal milliseconden, dus moeten we dat delen door 1000 om het aantal seconden te krijgen.



Uitleg bij de hardware:

Bij het uitproberen van verschillende display's wilde een 4x20 display het niet doen. Bij een bepaalde lichtinval zag ik nog wel heel lichtjes tekst in het display staan, maar de backlight deed niets. Nader onderzoek op de print aan de achterkant leverde op dat daar soldeer-jumpers zitten. Deze vormen een kruisverbinding voor pin 15 en 16, dit zijn de anode en kathode (ezelsbruggetje: KNAP = Kathode Negatief Anode Postief). Normaliter is pin 15 de anode aansluiting, dus daarop de min aansluiten en pin 16 is de kathode, daar dus de plus aansluiten.
Bij sommige display's zijn er 4 soldeerjumpers die je dan in een paar moet solderen (is reeds gedaan), bijvoorbeeld J1 en J3 solderen en dan J2 en J4 open laten. Een ander display heeft twee soldeer driehoekjes die je op de juiste manie moet combineren. Is dus alleen van belang als de backlight niet werkt, terwijl het wel werkt bij een ander display.

Voor het makkelijk uittesten op een breadboard heb ik de display voorzien van een 16-pin header, deze met de korte pennetjes vast solderen aan de display zodat de lange pennetjes in het breadboard gestoken kunnen worden (even stevig aanduwen).

Tip: De RW aansluiting kan aan massa (GND) gelegd worden, is alleen maar nodig als je met commando's zou willen lezen van de LCD, dit terwijl we er alleen commando's en gegevens naar toe sturen. De LiquidCrystal library heeft geen enkele lees-functies voor de LCD in zich, dus deze pin heeft verder geen nut aan te sturen, dus lekker aan massa leggen.
Bij de aanroep van de LiquidCrystal functie kun je dan deze parameter weglaten, bijvoorbeeld als volgt:
"LiquidCrystal lcd(12, 10, 5, 4, 3, 2)". Dit scheelt weer een I/O pin minder van de Arduino. Er zijn dan nog maar 6 I/O pinnen nodig.

En zelfs daar is nog winst uit te halen. Er zal dan de LCD via I2C™ aangesproken kunnen worden, waarbij dan nog slechts 2 pinnen van de Arduino nodig zijn.

 

Naar elektronica          Naar projecten          Naar hoofd pagina