Difference between revisions of "Arduino - Het 1602 LCD Display"
(Created page with " ===De schakeling=== Extra benodigdheden: *1 1602 LCD display *1 weerstand van 4.7k Onderstaande schakeling bevat vrij veel verbindingen en het is belangrijk dat elk draadje...") |
|||
| Line 9: | Line 9: | ||
{|class="wikitable" | {|class="wikitable" | ||
|- | |- | ||
| − | |[[File:LCD_1602.png]] | + | |[[File:LCD_1602 v3.png]] |
|- | |- | ||
|Verbindingen in het breadboard voor het LCD scherm | |Verbindingen in het breadboard voor het LCD scherm | ||
|} | |} | ||
| + | |||
| + | Het hier gebruikte display heeft 16x2 = 32 posities en op elke positie kan een groot aantal verschillende karakters worden getoond. Hoewel er al best veel draadjes nodig zijn om het display aan te sluiten, snap je vast dat al die karakters nooit in via die draadjes in een keer kunnen worden doorgegeven. Dat gaat dus deels serieel, waarbij zo'n display dus zelf over geheugen moet beschikken en de mogelijkheid moet hebben om seriele invoerdata te verwerken. In feite worden de karakters dus om beurten naar de display verstuurd. Deze schakeling gebruikt bovendien niet alle pins van de LCD. Als je goed kijkt, dan zie je dat aansluitingen D0 tm D3 niet worden gebruikt! Dit is een optie van dit type displays, waarbij elke byte (elke letter) in twee delen (twee ''nibbles'') naar de display wordt verstuurd. Dit gaat iets langzamer dan het alternatief waarbij alle 8 draadjes (D0 tm D7) worden gebruikt, maar heeft het voordeel dat er minder verbindingen nodig zijn. Uiteraard moet in het programma worden opgegeven of er van de 4-bit modus of van de 8-bit modus gebruik wordt gemaakt. Voor meer informatie kun je eens [https://lastminuteengineers.com/arduino-1602-character-lcd-tutorial/ hier] kijken. Daar staat bijvoorbeeld ook beschreven hoe je in plaats van de standaard karakters ook eigen "karakters" kunt maken. | ||
===Het programma=== | ===Het programma=== | ||
| Line 20: | Line 22: | ||
// maak het lcd object en geef aan welke hoe verbindingen lopen | // maak het lcd object en geef aan welke hoe verbindingen lopen | ||
| − | // | + | // parameters: (rs, enable, d4, d5, d6, d7) |
| − | LiquidCrystal lcd( | + | LiquidCrystal lcd(3, 2, 9, 10, 11, 12); |
void setup() { | void setup() { | ||
| Line 37: | Line 39: | ||
lcd.print(0.001 * millis()); | lcd.print(0.001 * millis()); | ||
lcd.print(" sec. bezig"); // na 100 seconden valt de laatste letter weg | lcd.print(" sec. bezig"); // na 100 seconden valt de laatste letter weg | ||
| − | delay( | + | delay(300+random(1000)); |
} | } | ||
</pre> | </pre> | ||
Latest revision as of 15:55, 5 December 2020
De schakeling
Extra benodigdheden:
- 1 1602 LCD display
- 1 weerstand van 4.7k
Onderstaande schakeling bevat vrij veel verbindingen en het is belangrijk dat elk draadje goed zit. Controleer de schakeling dus goed als er iets mis lijkt te gaan. De weerstand zorgt voor het juiste contrast in het display. Vaak wordt hier een 10k potmeter/instelweerstand gebruikt; als je dat zou doen zou je het contrast kunnen instellen.
|
| Verbindingen in het breadboard voor het LCD scherm |
Het hier gebruikte display heeft 16x2 = 32 posities en op elke positie kan een groot aantal verschillende karakters worden getoond. Hoewel er al best veel draadjes nodig zijn om het display aan te sluiten, snap je vast dat al die karakters nooit in via die draadjes in een keer kunnen worden doorgegeven. Dat gaat dus deels serieel, waarbij zo'n display dus zelf over geheugen moet beschikken en de mogelijkheid moet hebben om seriele invoerdata te verwerken. In feite worden de karakters dus om beurten naar de display verstuurd. Deze schakeling gebruikt bovendien niet alle pins van de LCD. Als je goed kijkt, dan zie je dat aansluitingen D0 tm D3 niet worden gebruikt! Dit is een optie van dit type displays, waarbij elke byte (elke letter) in twee delen (twee nibbles) naar de display wordt verstuurd. Dit gaat iets langzamer dan het alternatief waarbij alle 8 draadjes (D0 tm D7) worden gebruikt, maar heeft het voordeel dat er minder verbindingen nodig zijn. Uiteraard moet in het programma worden opgegeven of er van de 4-bit modus of van de 8-bit modus gebruik wordt gemaakt. Voor meer informatie kun je eens hier kijken. Daar staat bijvoorbeeld ook beschreven hoe je in plaats van de standaard karakters ook eigen "karakters" kunt maken.
Het programma
// Dit programma is ontleend aan: Bestanden | Voorbeelden | LiquidCrystal | HelloWorld
#include <LiquidCrystal.h> // dit is een standaard bibliotheek
// maak het lcd object en geef aan welke hoe verbindingen lopen
// parameters: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(3, 2, 9, 10, 11, 12);
void setup() {
// geef aan wat de maat is van de LCD (hier 16 karakters op twee regels)
lcd.begin(16, 2);
// plaats een boodschap
lcd.print("Hoera het werkt!"); // 16 karakters - meer plek is er niet
}
void loop() {
// plaats de cursor op de eerste positie van de tweede regel
// dat is positie (0,1) omdat men met 0 begint te tellen
lcd.setCursor(0, 1);
// print de tijd sinds de start:
lcd.print(0.001 * millis());
lcd.print(" sec. bezig"); // na 100 seconden valt de laatste letter weg
delay(300+random(1000));
}
Uitleg van het programma
In tegenstelling tot de schakeling met al zijn verbindingen is het programma vrij kort en eenvoudig. Dit komt door het gebruik van een library. Het gaat hier om regel 2:
#include <LiquidCrystal.h>
Door deze regel wordt een ingewikkelder stuk software meegenomen en kunnen we ons deel van het programma eenvoudig houden. LET OP: zo'n #include regel wordt niet afgesloten met een punt-komma. In regel 6 wordt een variabele aangemaakt van het type LiquidCrystal. Het gaat hier om een object-variabele waarmee we allerlei taken kunnen uitvoeren door functies ervan aan te roepen. In de setup() geven we eerst nog aan hoe groot onze LCD is. Dat is 16 karakters op 2 regels. Hieruit blijkt dat de LiquidCrystal library ook voor andere LCD's gebruikt moet kunnen worden en dat is goed om te weten. Daarna zetten we een tekst op de eertse regel. dat gaat dus via de print functie van het lcd object. Ditzelfde doen we in de loop() functie. Voordat we gaan printen wordt de cursor ingesteld op het eerste karakter van de tweede regel. Elke lcd.print() opdracht zou anders gewoon verder gaan waar hij gebleven was, waarna de regels gaan "scrollen" (doorrollen). Let op dat de laatste lcd.print() een vrij lange tekst heeft die na 100 seconden te lang wordt. De laatste letter valt dan van het scherm. Tenslotte wachten we even om de tekst leesbaar te houden. Zonder deze delay veranderen de laatste twee decimalen van de tekst zo snel dat ze onleesbaar zouden zijn. De delay heeft een willekeurige wachttijd (de random() functie) om het interval wat onvoorspelbaar te maken.
