![]() |
LCD
|
![]() |
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). 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. 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>". 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. 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. 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. |