Bekijk de 38 andere Arduino lessen

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.

16 · 128x64 ST7920 Grafisch/dot-matrix SPI LCD


Introductie

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.

Lesmateriaal

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.

ST7920 LCD dot-matrix display

het ST7920 LCD display
ST7920 LCD dot-matrix display

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.

De specificaties van de ST7920 LCD

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

U8g2 bibliotheek

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.

ST7920 pin overlay printen

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.

ST7920 pin overlay
ST7920 pin overlay

De schakeling

Stap 1 - breadboard

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.

ST7920 schakelschema stap 1
Schakelschema stap 1

Stap 2 - LCD stroom

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.

ST7920 schakelschema stap 2
Schakelschema stap 2

Stap 3 - LCD backlight (optioneel)

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.

ST7920 schakelschema stap 3
Schakelschema stap 3

Stap 4 - Seriële data

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.

ST7920 schakelschema stap 4
Schakelschema stap 4

Stap 5 - SPI

De laatste stap is het aansluiten van de datalijnen voor de SPI communicatie. SPI gebruikt drie verschillende lijnen:

  • Serial Clock SCK
  • Master In Slave Out MOSI
  • Chip Select 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.

ST7920 schakelschema stap 5
Schakelschema stap 5

De schakeling is nu helemaal klaar! Tijd voor de code 😎

Arduino Code

Zoals eerder aangegeven maken we gebruik van de U8g2 bibliotheek. Deze gaan we eerst installeren via:

Schets â–¸ Bibliotheken gebruiken â–¸ Bibliotheken beheren...

Zoek op U8g2 en druk op installeren bij de bibliotheek U8g2 by Oliver

We gaan gebruik maken van de meegeleverde voorbeeldcode van U8g2.

Bestand â–¸ Voorbeelden â–¸ U8g2 â–¸ page_buffer â–¸ GraphicsTest

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.

Code uploaden naar Arduino

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:

Hulpmiddelen â–¸ Board â–¸ Arduino/Genuino UNO

en daarnaast of je ook de goede poort hebt gekozen. Dit vind je in het menu:

Hulpmiddelen â–¸ Poort

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.

U8g2 demo code op scherm

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.

U8g2 demo code op Arduino UNO
U8g2 demo code op Arduino UNO

Uitdaging 🚀

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!