Ik vind het belangrijk dat Bas on Tech door iedereen kosteloos gebruikt kan worden.
Help mij de toekomst van Bas on Tech te verzekeren. Je donatie zal o.a. worden gebruikt voor hosting, video's en onderhoud.
Alvast bedankt!
iDEAL en Bancontact vind je onder het "Direct Debit" tabblad in de 4e stap.
Wat is er mooier dan informatie op een scherm kunnen weergeven? In les 11 hebben we al gekeken naar een I2C LCD karakter display. Nu gaan we een stapje verder met een groter dot-matrix display.
In deze les leer je hoe je de demo van de de U8g2 bibliotheek op je scherm kunt weergeven.
Onderaan op deze pagina vind je de knop lesmateriaal waarmee je het lesmateriaal kunt downloaden. Dit materiaal bestaat uit de code, schakelschema en andere bestanden die in de les worden gebruikt.
De ST7920 is een zogenaamd LCD wat staat voor Liquid Crystal Display. Dit scherm is opgebouwd uit vakjes die aan of uit kunnen worden gezet. Deze vakjes zijn in sommige schermpjes als een 8
geplaatst zoals bij een digitale klok, bij anderen als pixels.
Bij LCD lijkt het als of de vakjes bijvoorbeeld zwart gekleurd kunnen worden. Technisch gezien is dit niet waar maar wordt het licht anders doorgelaten waardoor het zwart lijkt. Meer daarover op Wikipedia
ST7920 verwijst naar de controller van het display. Deze is gemaakt door het Taiwanese Sitronix.
Type | LCD |
Formaat | 128x64 pixels |
Schermdiagonaal | 2.9 inch |
Afmetingen | 93x70mm |
Voeding | 2.7 tot 5.5V |
Kleur | blauw/wit of groen/zwart |
Uitgebreide technische informatie staan beschreven in de ST7920 datasheet
De U8g2 bibliotheek is speciaal gemaakt om monochrome displays op een universele manier, makkelijk aan te sturen. Met U8g2 kun je grafische elementen zoals lijnen, rechthoeken, cirkels op het scherm tekenen. Maar ook teksten zijn geen probleem.
Een overzicht van alle functies vind je op de U8g2 referentie pagina. Op dit moment ondersteund U8g2 een ruime 200 verschillende displays. Het grote voordeel is dat je niet voor elk display opnieuw hoeft uit te zoeken hoe je deze moet aansturen.
In deze schakeling maken we gebruik van een breadboard. Als je het display in het breadboard prikt zie je dat de pin labels niet meer zichtbaar zijn. Om dit op te lossen heb ik een pin overlay gemaakt. Print deze PDF en knip de overlay uit. Deze kun je vervolgens precies aan de onderkant van je display leggen. Zo zie je ook aan de voorkant het label van elke pin.
Het kan zijn dat de pin overlay niet precies past. Kijk dan goed bij je printer instellingen of de vergroting op 100% staat.
We beginnen met het breadboard te voorzien van 5V op de + rail
(rood) en GND
op de - rail
(blauw). Hiervoor verbinden we de 5V
op de Arduino met het breadboard. Hetzelfde doen we voor de GND
.
De volgende stap is om deze 5V naar het LCD door te lussen. Hiervoor gebruiken de Vcc
en GND
pins helemaal rechts op het display. Deze verbinden we met de + rail
en - rail
op het breadboard.
Dan is het tijd om de backlight aan te sluiten. Dit is een LED backlight met een anode (+) en kathode (-). De backlight LED's werken op 3.3V, sluit deze dus NIET aan op de 5V
want dan kun je het backlight beschadigen.
De 3V3
op de Arduino verbinden we met de BLA
(Backlight Anode), en de BLK
(BackLight Kathode) met de - rail
op het breadboard.
Nu moeten we het display vertellen hoe we de data gaan aanbieden. Wij gaan gebruik maken van het SPI (Serial Peripheral Interface) protocol. De naam zegt het al een beetje, de data is serieel. Met de PSB pin
kunnen we dit aangeven.
Maken we de PSB pin
hoog dan verwacht het display parallele data, bij LOW
serieel. In ons geval moeten we de PSB pin
dus LOW
maken door deze met de - rail
verbinden.
De laatste stap is het aansluiten van de datalijnen voor de SPI communicatie. SPI gebruikt drie verschillende lijnen:
SCK
MOSI
CS
Pin 13
op de Arduino (oranje lijn) gaan we gebruiken als seriële klok SCK
. Op het display is deze gelabeld als pin E
.
Voor de Master In Slave Out MOSI
van het SPI protocol verbinden we Arduino pin 11
(blauwe lijn) met de RW pin
(read/write) op het display.
De laatste stap is het aansluiten van de CS
(chip select) draad. Op het display is deze gelabeld als RS
wat staat voor Register Select en deze wordt verbonden met pin 10
op de Arduino.
De schakeling is nu helemaal klaar! Tijd voor de code 😎
Zoals eerder aangegeven maken we gebruik van de U8g2 bibliotheek. Deze gaan we eerst installeren via:
Zoek op U8g2
en druk op installeren
bij de bibliotheek U8g2 by Oliver
We gaan gebruik maken van de meegeleverde voorbeeldcode van U8g2.
Als je iets naar beneden scrollt zie je heel veel definities van beeldschermen die lijken op:
1 //U8G2_ST7920_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */);
2 //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
3 //U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
4 //U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
Voor ons display is deze regel van belang:
1 U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
Haal bij deze regel de //
weg zodat het geen commentaar meer is. Je ziet hier precies de Arduino pins staan waar we eerder de datalijnen op hebben aangesloten.
Ons programma is nu klaar om naar de Arduino te worden gestuurd. Om dit te doen koppel je de Arduino via de USB kabel aan je computer. Controleer in het menu of je het goede Arduino board hebt geselecteerd:
en daarnaast of je ook de goede poort hebt gekozen. Dit vind je in het menu:
Als je hier niet weet welke poort je nodig hebt is het een kwestie van ze allemaal proberen.
Linksboven zie je een ronde knop met een vinkje erop. Als je hierop drukt kijkt de IDE of je code in orde is. De IDE kijkt hier alleen of hij de code kan lezen. Hij weet dus niet of je de juiste code voor jouw programma hebt geschreven.
Als alles goed is gegaan staat er onderaan de tekst Compileren voltooid
. Uploaden doe je met de ronde knop met het pijltje naar rechts. Als er onderaan Avrdude done. Thank you.
staat weet je dat de code naar de Arduino is gestuurd. Na het uploaden start het programma meteen.
Als het goed is werkt de code nu op je Arduino. Zo niet, controleer dan of je alle draden goed hebt aangesloten en of er geen verbindingen los zitten.
Weer een les afgerond! Dan gaan we verder met een uitdaging:
🎓 Kijk naar de functies in de code en experimenteer door dingen aan te passen. Kijk bijvoorbeeld of je de vormen andere formaten kunt geven.
Succes!