Inhoudsopgave:

Hoe maak je een statisch LCD-stuurprogramma met I²C-interface: 12 stappen
Hoe maak je een statisch LCD-stuurprogramma met I²C-interface: 12 stappen

Video: Hoe maak je een statisch LCD-stuurprogramma met I²C-interface: 12 stappen

Video: Hoe maak je een statisch LCD-stuurprogramma met I²C-interface: 12 stappen
Video: 🇳🇱 GRAFISCH 128x64 SPI LCD DISPLAY MET ST7920 CONTROLLER - Arduino les #16 2024, Juli-
Anonim
Hoe maak je een statisch LCD-stuurprogramma met I²C-interface
Hoe maak je een statisch LCD-stuurprogramma met I²C-interface

Liquid Crystal Displays (LCD) worden veel gebruikt voor commerciële en industriële toepassingen vanwege hun goede visuele eigenschappen, lage kosten en laag stroomverbruik. Deze eigenschappen maken het LCD-scherm de standaardoplossing voor apparaten die op batterijen werken, zoals draagbare instrumenten, rekenmachines, horloges, radio's, enz.

Om echter goed te kunnen controleren wat het LCD-scherm laat zien, moet het elektronische stuurprogramma van het LCD-scherm de juiste spanningsgolfvormen genereren voor de LCD-pinnen. De golfvormen moeten AC (wisselstroom) van aard zijn omdat DC (gelijkstroom) spanningen het apparaat permanent zullen beschadigen. De juiste driver zou deze signalen naar het LCD-scherm sturen met een minimum aan stroomverbruik.

Er zijn twee soorten LCD's, de statische, met slechts één backplane en één pin voor individuele segmentbesturing en de multiplexed, met meerdere backplanes en meerdere segmenten die voor elke pin zijn aangesloten.

Deze Instructable presenteert het ontwerp van één statisch LCD-stuurprogramma met SLG46537V GreenPAK ™ -apparaat. De ontworpen LCD-driver zou tot 15 LCD-segmenten aansturen, met behulp van een paar microampère stroom van de voeding en een I²C-interface bieden voor controle.

In de volgende secties wordt getoond:

● basiskennis informatie over LCD's;

● het ontwerp van de SLG46537V GreenPAK LCD-driver in detail;

● hoe u een statisch LCD-scherm van zeven segmenten met vier cijfers bestuurt met twee GreenPAK-apparaten.

Hieronder hebben we de stappen beschreven die nodig zijn om te begrijpen hoe de oplossing is geprogrammeerd om de statische LCD-driver met I²C-interface te maken. Als u echter alleen het resultaat van het programmeren wilt hebben, download dan GreenPAK-software om het reeds voltooide GreenPAK-ontwerpbestand te bekijken. Sluit de GreenPAK Development Kit aan op uw computer en klik op programma om het statische LCD-stuurprogramma met I²C-interface te maken.

Stap 1: Basisprincipes van LCD-schermen

Basisprincipes van LCD-schermen
Basisprincipes van LCD-schermen
Basisprincipes van LCD-schermen
Basisprincipes van LCD-schermen

Liquid Crystal Displays (LCD) is een technologie die geen licht uitstraalt, het regelt alleen hoe een externe lichtbron passeert. Deze externe lichtbron kan het beschikbare omgevingslicht zijn, in het reflecterende weergavetype, of het licht van een backlight led of lamp, in het doorlatende weergavetype. LCD's zijn geconstrueerd met twee glasplaten (boven en onder), een dunne laag vloeibaar kristal (LC) ertussen en twee lichtpolarisatoren (Application Note AN-001 – Basics of LCD Technology, Hitachi, Application Note AN-005 – Display Modes, Hitachi). De polarisator is een lichtfilter voor het elektromagnetische lichtveld. Alleen de lichtcomponenten in de juiste elektromagnetische veldrichting gaan door de polarisator, terwijl de andere componenten worden geblokkeerd.

Het vloeibare kristal is een organisch materiaal dat het elektromagnetische veld van het licht 90 graden of meer roteert. Wanneer er echter een elektrisch veld op de LC wordt aangelegd, roteert deze het licht niet meer. Met de toevoeging van transparante elektroden in het bovenste en onderste displayglas, is het mogelijk om te regelen wanneer het licht er doorheen gaat, en wanneer niet, met een externe bron van het elektrische veld. Afbeelding 1 (zie Application Note AN-001 – Basisprincipes van LCD-technologie, Hitachi) hierboven illustreert deze bediening. In afbeelding 1 is het scherm donker als er geen elektrisch veld is. Dit komt omdat beide polarisatoren het licht in dezelfde richting filteren. Als de polarisatoren orthogonaal zijn, is het display donker wanneer het elektrische veld aanwezig is. Dit is de meest voorkomende situatie voor reflecterende displays.

Het minimale elektrische veld, of spanning, om het LCD-scherm te besturen, wordt de AAN-drempel genoemd. De LC wordt alleen beïnvloed door de spanning en er is nauwelijks stroom in LC-materiaal. De elektroden in LCD vormen een kleine capaciteit en dit is de enige belasting voor een driver. Dit is de reden dat een LCD-scherm een apparaat met laag vermogen is om visuele informatie weer te geven.

Het is echter belangrijk op te merken dat het LCD-scherm niet te lang kan werken met een gelijkstroom (DC) spanningsbron. De toepassing van gelijkspanning veroorzaakt chemische reacties in LC-materiaal, waardoor het permanent wordt beschadigd (Application Note AN-001 – Basics of LCD Technology, Hitachi). De oplossing is om een alternatieve spanning (AC) toe te passen in de elektroden van LCD's.

In statische LCD's is een backplane-elektrode ingebouwd in het ene glas en worden afzonderlijke LCD-segmenten of pixels in het andere glas geplaatst. Dit is een van de eenvoudigste LCD-types en degene met de beste contrastverhouding. Dit type display vereist echter meestal te veel pinnen om elk afzonderlijk segment te besturen.

In het algemeen verkrijgt een stuurcontroller een blokgolfkloksignaal voor het achtervlak en een kloksignaal voor de segmenten in het voorvlak samen. Wanneer de backplane-klok in fase is met de segmentklok, is de root-mean-square (RMS) spanning tussen beide vlakken nul en is het segment transparant. Anders wordt het segment donker als de RMS-spanning hoger is dan de LCD AAN-drempel. De golfvormen voor het backplane, aan en uit-segment worden getoond in figuur 2. Zoals te zien is in de afbeelding, is het ON-segment uit fase ten opzichte van het backplane-signaal. Het uit-segment is in fase ten opzichte van het backplane-signaal. De aangelegde spanning kan tussen 3 en 5 volt zijn voor goedkope displays met een laag vermogen.

Het kloksignaal voor de backplane en segmenten van het LCD-scherm ligt meestal in het bereik van 30 tot 100 Hz, de minimale frequentie om een visueel flikkereffect op het LCD-scherm te voorkomen. Hogere frequenties worden vermeden om het stroomverbruik van het totale systeem te verminderen. Het systeem bestaande uit LCD en drivers zou weinig stroom verbruiken, in de orde van microampères. Dit maakt ze perfect geschikt voor toepassingen met laag vermogen en batterijvoeding.

In de volgende paragrafen wordt het ontwerp van een statische LCD-driver met GreenPAK-apparaat dat het kloksignaal van de backplane en het individuele segmentkloksignaal voor een commercieel LCD-scherm kan genereren, in detail gepresenteerd.

Stap 2: GreenPAK Design basisblokdiagram

GreenPAK Design basisblokdiagram
GreenPAK Design basisblokdiagram
GreenPAK Design basisblokdiagram
GreenPAK Design basisblokdiagram

Een blokdiagram dat het GreenPAK-ontwerp illustreert, wordt getoond in figuur 3. De basisblokken van het ontwerp zijn de I²C-interface, de outputsegmentdriver, de interne oscillator en de backplane-klokbronselector.

Het I²C-interfaceblok regelt elke afzonderlijke segmentuitgang en de backplane-klokbron van het LCD-scherm. Het I²C-interfaceblok is de enige systeemingang voor de regeling van de segmentuitgang.

Wanneer de interne segmentcontrolelijn is ingesteld (hoog niveau), is het respectieve LCD-segment donker ondoorzichtig. Wanneer de interne segmentcontrolelijn wordt gereset (laag niveau), is het respectieve LCD-segment transparant.

Elke interne segmentbesturingslijn is verbonden met een uitgangsdriver. Het aandrijfblok van het uitgangssegment genereert een in-fase kloksignaal met betrekking tot de klok van de achterplaat voor transparante segmenten. Voor donkere segmenten is dit signaal uit fase met betrekking tot de klok van de backplane.

De backplane-klokbron is ook geselecteerd met I²C-interface. Wanneer de interne klokbron van de backplane is geselecteerd, wordt de interne oscillator ingeschakeld. De interne oscillator genereert een klokfrequentie van 48Hz. Dit signaal wordt gebruikt door het uitgangssegmentdriverblok en is geadresseerd aan de uitgangspin van de klok van de backplane (GreenPAK-pin 20).

Als de externe backplane-klokbron is geselecteerd, wordt de interne oscillator uitgeschakeld. De driverreferentie van het uitgangssegment is de externe klokingang van de backplane (GreenPAK-pin 2). In dit geval zou de uitgangspen van de klokuitgang van het moederbord kunnen worden gebruikt als een extra segmentbesturingslijn, het segment OUT15.

Er kan meer dan één GreenPAK-apparaat op dezelfde I²C-lijn worden gebruikt. Om dit te doen, moet elk apparaat worden geprogrammeerd met een ander I²C-adres. Op deze manier is het mogelijk om het aantal aangestuurde LCD-segmenten uit te breiden. Eén apparaat is geconfigureerd om de backplane-klokbron te genereren, waarbij 14 segmenten worden aangestuurd, en de andere zijn geconfigureerd om een externe backplane-klokbron te gebruiken. Elk extra apparaat zou op deze manier meer 15 segmenten kunnen aansturen. Het is mogelijk om maximaal 16 apparaten op dezelfde I²C-lijn aan te sluiten en vervolgens is het mogelijk om maximaal 239 segmenten van een LCD-scherm te bedienen.

In deze Instructable wordt dit idee gebruikt om 29 segmenten van een LCD te besturen met 2 GreenPAK-apparaten. De pinout-functionaliteit van het apparaat is samengevat in Tabel 1.

Stap 3: Ontwerp stroomverbruik

Een belangrijk aandachtspunt bij dit ontwerp is het stroomverbruik, dat zo laag mogelijk moet zijn. De geschatte ruststroom van het GreenPAK-apparaat is 0,75 µA voor 3,3 V-voeding en 1,12 µA voor 5 V-voeding. Het stroomverbruik van de interne oscillator is 7,6 µA en 8,68 µA voor respectievelijk 3,3 V en 5 V voeding. Er wordt geen significante toename van het stroomverbruik door schakelverliezen verwacht, omdat dit ontwerp op een lage klokfrequentie werkt. Het geschatte maximale stroomverbruik voor dit ontwerp is lager dan 15 µA wanneer de interne oscillator aan staat, en 10 µA wanneer de interne oscillator uit staat. De gemeten stroom die in beide situaties wordt verbruikt, wordt weergegeven in de sectie Testresultaten.

Stap 4: GreenPAK-apparaatschema

GreenPAK-apparaatschema
GreenPAK-apparaatschema

Het project dat in GreenPAK-software is ontworpen, wordt weergegeven in figuur 4. Dit schema zal worden beschreven met behulp van de basisblokdiagrammen als referentie.

Stap 5: I²C-interface

I²C-interface
I²C-interface
I²C-interface
I²C-interface

I²C-interfaceblok wordt gebruikt als het hoofdbesturingsblok van de bediening van het apparaat. Een close-up van de blokverbindingen en geconfigureerde eigenschappen wordt getoond in Afbeelding 5.

Dit blok is verbonden met PIN 8 en PIN 9, dat zijn respectievelijk I²C SCL- en SDA-pinnen. In het apparaat biedt het I²C-blok 8 virtuele ingangen. De beginwaarde voor elke virtuele invoer wordt weergegeven in het eigenschappenvenster (zie afbeelding 5). Virtuele ingangen van OUT0 tot OUT6 worden gebruikt als segmentbesturingslijnen. Deze stuurlijnen komen overeen met segmentuitgang 1 tot en met segmentuitgang 7 en zijn verbonden met de segmentuitgangsdriver. Virtuele ingang OUT7 wordt gebruikt als backplane-klokbronselectielijnbesturing, met netnaam BCKP_SOURCE. Dit net zal door andere blokken in het ontwerp worden gebruikt. De I²C-besturingscode is geconfigureerd met een andere waarde voor elke IC in het project.

Er zijn nog 8 interne segmentbesturingslijnen beschikbaar in de Asynchronous State Machine (ASM) -uitgang, zoals weergegeven in Afbeelding 6 hierboven. Segmentuitgangslijn 8 (SEG_OUT_8 in eigenschappenvenster) via segmentuitgangslijn 15 (SEG_OUT_15) worden bestuurd door ASM-uitgang op toestand 0. Er is geen toestandsovergang in ASM-blok, het is altijd in toestand 0. De uitgangen van ASM zijn aangesloten op segmentuitgangsdrivers.

De segmentuitgangsstuurprogramma's genereren het uitgangssignaal van het apparaat.

Stap 6: Uitgangssegmentstuurprogramma

Het uitvoersegmentstuurprogramma is in wezen een opzoektabel (LUT) die is geconfigureerd als een logische XOR-poort. Voor elk uitgangssegment moet het een XOR-poort zijn die is aangesloten op de segmentbesturingslijn en op de backplane-klok (BCKP_CLOCK). De XOR-poort is verantwoordelijk voor het genereren van het in-fase en uit-fase signaal naar het uitgangssegment. Wanneer de segmentbesturingslijn op een hoog niveau is, zal de XOR-poortuitgang het kloksignaal van de backplane omkeren en een uit-fase-signaal genereren naar de segmentpen. Het spanningsverschil tussen LCD-backplane en LCD-segment zal in dit geval het LCD-segment instellen als een donker segment. Wanneer de segmentbesturingslijn zich op een laag niveau bevindt, zal de XOR-poortuitgang het kloksignaal van de backplane volgen en vervolgens een in-fase signaal genereren naar de segmentpen. Omdat er in dit geval geen spanning tussen de LCD-backplane en het segment staat, is het segment lichtdoorlatend.

Stap 7: Interne Oscillator en Backplane Clock Source Control

Interne Oscillator en Backplane Klok Bronregeling
Interne Oscillator en Backplane Klok Bronregeling

De interne oscillator wordt gebruikt wanneer het signaal BCKP_CLOCK van de I²C-interface op een hoog niveau is ingesteld. Een close-up van het klokbronbesturingsdiagram wordt getoond in Afbeelding 7 hierboven.

De oscillator is geconfigureerd als 25 kHz RC-frequentie, met de hoogste uitgangsdeler die beschikbaar is bij oscillator OUT0 (8/64). De volledige configuratie is te zien in het eigenschappenvenster in figuur 7. Op deze manier genereert de interne oscillator een klokfrequentie van 48 Hz.

De oscillator is alleen actief wanneer het BCKP_SOURCE-signaal samen met het POR-signaal op een hoog niveau is. Deze besturing wordt gedaan door deze twee signalen aan te sluiten op de NAND-poort van de 4-L1 LUT. De uitgang van de NAND is dan verbonden met de ingang van de besturingspin voor het uitschakelen van de oscillator.

Signaal BCKP_SOURCE bestuurt de MUX gebouwd met 3-L10 LUT. Wanneer het BCKP_SOURCE-signaal op een laag niveau is, komt de backplane-klokbron van PIN2. Wanneer dit signaal op een hoog niveau is, komt de backplane-klokbron van de interne oscillator.

Stap 8: Backplane-klokuitgang of Segment 15-uitgangspenbesturing

Backplane Klokuitgang of Segment 15 Uitgang Pinregeling
Backplane Klokuitgang of Segment 15 Uitgang Pinregeling

Pin 20 in dit ontwerp heeft een dubbele functie, die afhankelijk is van de geselecteerde backplane-klokbron. De werking van deze pin wordt bestuurd met één LUT met 4 ingangen, zoals weergegeven in figuur 8. Met een 4-bit LUT is het mogelijk om de werking van de XOR-poort te associëren met een uitgangs-MUX. Wanneer het BCKP_SOURCE-signaal op een hoog niveau is, zal de LUT-uitgang de interne oscillatorklok volgen. Dan werkt pin 20 als een backplane-klokuitgang. Wanneer het BCKP_SOURCE-signaal op een laag niveau is, zal de LUT-uitgang de XOR-bewerking zijn tussen SEG_OUT_15, van ASM-uitgang en backplane-kloksignaal. De 4-bit LUT-configuratie om deze bewerking uit te voeren wordt getoond in Afbeelding 8.

Stap 9: LCD-systeemprototype

LCD-systeemprototype
LCD-systeemprototype
LCD-systeemprototype
LCD-systeemprototype

Om het gebruik van de GreenPAK-ontwerpoplossing te demonstreren, werd een prototype van een LCD-systeem op een breadboard gemonteerd. Voor het prototype wordt een statisch LCD-scherm met zeven segmenten en vier cijfers aangestuurd door twee GreenPAK-apparaten op een DIP-bord. Eén apparaat (IC1) gebruikt de interne oscillator om de LCD-backplane aan te sturen, en het andere apparaat (IC2) gebruikt dit signaal als backplane-ingangsreferentie. Beide IC's worden bestuurd via de I²C-interface door een STM32F103C8T6-microcontroller (MCU) in een minimaal ontwikkelbord.

Afbeelding 9 toont het schema van de verbindingen tussen de twee GreenPAK IC's, het LCD-scherm en het MCU-bord. In het schema stuurt het GreenPAK-apparaat met U1 (IC1)-referentie LCD-cijfer één en twee (LCD-linkerkant). Het GreenPAK-apparaat met U2 (IC2)-referentie stuurt LCD-cijfers drie en vier aan, plus het COL-segment (LCD rechterkant). De voeding voor beide apparaten komt van de regelaar in het ontwikkelbord van de microcontroller. Twee verwijderbare jumpers tussen de voeding en VDD-pinnen van elk GreenPAK-apparaat zijn toegevoegd voor stroommeting met een multimeter.

Een afbeelding van het geassembleerde prototype wordt getoond in figuur 10.

Stap 10: I²C-opdrachten voor LCD-bediening

I²C-opdrachten voor LCD-bediening
I²C-opdrachten voor LCD-bediening
I²C-opdrachten voor LCD-bediening
I²C-opdrachten voor LCD-bediening
I²C-opdrachten voor LCD-bediening
I²C-opdrachten voor LCD-bediening

De twee GreenPAK-apparaten op het breadboard zijn geprogrammeerd met hetzelfde ontwerp, behalve door de Control Byte-waarde. De besturingsbyte van IC1 is 0 (I²C-adres 0x00), terwijl de I²C-besturingsbyte 1 is (I²C-adres 0x10). De verbindingen tussen weergavesegmenten en apparaatstuurprogramma's zijn samengevat in de bovenstaande tabel.

De aansluitingen zijn op deze manier gekozen om een duidelijker schema te creëren en de montage van de breadboard-aansluitingen te vereenvoudigen.

De besturing van de output van het segment wordt gedaan door I²C-schrijfcommando's naar I²C Virtual Inputs en ASM-outputregisters. Zoals beschreven in de Application Note AN-1090 Simple I²C IO Controllers met SLG46531V (zie Application Note AN-1090 Simple I²C IO Controllers with SLG46531V, Dialog Semiconductor), is het I²C-schrijfcommando als volgt gestructureerd:

● Begin;

● Besturingsbyte (R/W-bit is 0);

● Woord adres;

● Gegevens;

Stop.

Alle I²C-schrijfcommando's worden gemaakt naar Word Address 0xF4 (I²C Virtual Inputs) en 0xD0 (ASM Output for state 0). De commando's die in IC1 moeten worden geschreven en de cijfers 1 en 2 van het besturings-LCD moeten worden weergegeven, zijn samengevat in Tabel 3. In de weergave van de commandoreeks geeft het open haakje "["geeft het startsignaal aan en het haakje sluiten "]" het stopsignaal aan.

De twee bytes boven controlesegmenten van LCD-cijfer 1 en cijfer 2 samen. Hier is de benadering om voor elk cijfer een individuele opzoektabel (LUT) in software te gebruiken, rekening houdend met de segmenten in beide bytes. De bytewaarden uit de opzoektabel moeten worden gemengd met behulp van een bitsgewijze OF-bewerking en vervolgens naar de IC worden verzonden. Tabel 4 toont de Byte0- en Byte1-waarde voor elke numerieke waarde die in elk displaycijfer moet worden geschreven.

Om bijvoorbeeld in het cijfer 1 het getal 3 te schrijven en in het cijfer 2 het cijfer 4, is Byte0 0xBD (0x8D bitsgewijs OF met 0xB0) en is Byte 1 0x33 (0x30 bitsgewijs OF met 0x03).

De opdracht om in IC2 te schrijven en cijfer 3 en 4 te besturen, wordt beschreven in Tabel 5.

De besturingslogica van de cijfers 3 en 4 is vergelijkbaar met de besturingslogica van de cijfers 1 en 2. Tabel 6 toont de LUT voor deze twee cijfers.

Het verschil in IC2 is het COL-segment. Dit segment wordt beheerd door Byte1. Om dit segment donker in te stellen, moet een bitsgewijze OF-bewerking tussen de Byte1 en de waarde 0x40 worden uitgevoerd.

Stap 11: I²C-opdrachten voor LCD-test

I²C-opdrachten voor LCD-test
I²C-opdrachten voor LCD-test

Voor LCD-test is een firmware ontwikkeld in C-taal voor het MCU-bord. Deze firmware stuurt een reeks opdrachten naar beide IC's op het breadboard. De broncode voor deze firmware staat in de bijlage. De volledige oplossing is ontwikkeld met behulp van Atollic TrueStudio voor STM32 9.0.1 IDE.

De volgorde van de opdrachten en de respectieve waarden die op het display worden weergegeven, zijn samengevat in Tabel 7 hierboven.

Stap 12: Testresultaten

Test resultaten
Test resultaten
Test resultaten
Test resultaten

De prototypetest bestaat uit het verifiëren van de weergavewaarden na een MCU-commando en het meten van de stroomafname door elk IC tijdens bedrijf.

Afbeeldingen van het LCD-scherm voor elke opdrachtwaarde worden getoond in Tabel 8 hierboven.

De stroomafvoer voor elk apparaat werd gemeten met een multimeter, in het laagste stroombereik van 200 A. Afbeeldingen van de gemeten stroom voor elk apparaat, tijdens opstarten en normaal bedrijf, worden weergegeven in Tabel 9 hierboven.

Conclusie en resultaten Discussie

Het ontwerp van een statische LCD-driver met laag vermogen en een GreenPAK-apparaat werd gepresenteerd. Dit ontwerp toont duidelijk een van de grootste kenmerken van de GreenPAK-apparaten: hun lage ruststroom. Omdat GreenPAK-apparaten een op hardware gebaseerde oplossing zijn, is het mogelijk om met een lage frequentie te werken, in dit geval 48 Hz. Een op MCU gebaseerde oplossing vereist een hogere bedrijfsfrequentie, zelfs voor periodiek korte perioden, en zal dan meer stroom verbruiken. En als we een GreenPAK-apparaat vergelijken met een CPLD (Complex Programmable Logic Device), is het duidelijk te zien dat een CPLD meestal een ruststroom heeft van meer dan 20 µA.

Het is interessant om op te merken dat dit ontwerp gemakkelijk kan worden aangepast om beter te passen bij de vereisten van een specifiek project. Een goed voorbeeld is de pinout voor segmentbesturing. Ze konden eenvoudig worden gewijzigd om tegelijkertijd de printplaat en de softwareontwikkeling te vereenvoudigen. Dit is een interessante functie wanneer het apparaat wordt vergeleken met een standaard ASIC (Application Specific Integrated Circuit). Gewoonlijk zijn ASIC's ontworpen om op een breed scala aan toepassingen te passen, en er moet een eerste softwareroutine worden geschreven om de IC vóór de operatie correct te configureren. Een configureerbaar apparaat zou kunnen worden ontworpen om na het opstarten klaar voor gebruik te zijn. Op deze manier is het mogelijk om de softwareontwikkelingstijd voor de initiële configuratie van de IC te verkorten.

De broncode van de applicatie is hier te vinden in bijlage A.

Aanbevolen: