Om een goede communicatie tussen mensenwereld en machinewereld tot stand te brengen, spelen display-units een belangrijke rol. En dus zijn ze een belangrijk onderdeel van embedded systemen. Displays - groot of klein, werken volgens hetzelfde basisprincipe. Naast complexe display-eenheden zoals grafische displays en 3D-displays, moet men weten hoe u met eenvoudige displays zoals 16x1 en 16x2-units kunt werken. Het 16x1 beeldscherm heeft 16 karakters en staat op één regel. Het 16x2 LCD-scherm heeft 32 tekens in totaal 16 op de 1e regel en nog eens 16 op de 2e regellijn. Hier moet men begrijpen dat er in elk teken 5x10 = 50 pixels zijn, dus om één teken weer te geven, moeten alle 50 pixels samenwerken. Maar daar hoeven we ons geen zorgen over te maken, want er is een andere controller (HD44780) in het beeldscherm die de pixels bestuurt. (je kunt het zien op de LCD-eenheid, het is het blauwe oog aan de achterkant).
Componenten vereist
Hardware:
ATmega32-microcontroller
Stroomvoorziening (5v)
AVR-ISP Programmer
JHD_162ALCD (16x2 LCD)
100uF condensator.
Software:
Atmel studio 6.1
Progisp of flitsmagie
Schakelschema en uitleg
Zoals te zien is op het LCD-interface met het ATmega32-circuit, kunt u zien dat PORTA van ATMEGA32 is aangesloten op datapoort LCD. Hier moet men onthouden om de JTAG-communicatie in PORTC van ATMEGA uit te schakelen door de zekeringbytes te wijzigen, als men de PORTC als een normale communicatiepoort wil gebruiken. In 16x2 LCD zijn er in totaal 16 pinnen, als er een achtergrondverlichting is, als er geen achtergrondverlichting is, zijn er 14 pinnen. Men kan de achterlichtpinnen van stroom voorzien of laten. Nu in de 14 pennen zijn er 8 datapennen (7-14 of D0-D7), 2 voedingspennen (1 & 2 of VSS en VDD en GND en + 5 V), 3 rd pin voor contrastregeling (VEE-bepaalt hoe dik de tekens moet afgebeeld), 3 controlepennen (RS & RW & E)
In het bovenstaande circuit om een 16x2 LCD-scherm te koppelen aan de AVR-microcontroller, kun je zien dat ik maar twee controlepinnen heb genomen. Dit geeft de flexibiliteit van een beter begrip. Het contrastbit en READ / WRITE worden niet vaak gebruikt, zodat ze kunnen worden kortgesloten naar aarde. Dit zet LCD in hoogste contrast en leesmodus. We hoeven alleen de ENABLE- en RS-pinnen te bedienen om tekens en gegevens dienovereenkomstig te verzenden.
De verbindingen tussen ATmega32-microcontroller en 16x2 LCD worden hieronder weergegeven:
PIN1 of VSS - aarde
PIN2 of VDD of VCC - + 5v vermogen
PIN3 of VEE - ground (geeft maximaal contrast het beste voor een beginner)
PIN4 of RS (registerselectie) - PD6 van microcontroller
PIN5 of RW (lezen / schrijven) - aarde (zet LCD in leesmodus om de communicatie voor de gebruiker te vergemakkelijken)
PIN6 of E (inschakelen) - PD5 van microcontroller
PIN7 of D0 - PA0 van microcontroller
PIN8 of D1 - PA1
PIN9 of D2 - PA2
PIN10 of D3 - PA3
PIN11 of D4 - PA4
PIN12 of D5 - PA5
PIN13 of D6 - PA6
PIN14 of D7 - PA7
In het circuit kun je zien dat we 8-bits communicatie (D0-D7) hebben gebruikt, maar dit is niet verplicht en we kunnen ook 4-bits communicatie gebruiken (D4-D7), maar met 4-bits communicatie wordt het programma een beetje ingewikkeld voor beginners, dus we gingen gewoon met 8 bit communicatie.
Dus van louter observatie van bovenaf, verbinden we 10 pinnen van het LCD-scherm met de controller waarin 8 pinnen datapinnen zijn en 2 pinnen voor controle.
Werken
Om nu aan de slag te gaan, moet u de functies kennen van 10 pinnen van 16x2 LCD (8 datapinnen + 2 controlepennen). De 8 datapinnen zijn voor het verzenden van gegevens of opdrachten naar het LCD-scherm. In twee controlepennen:
1. RS (Registerselectie) pin is om het LCD-scherm te vertellen of we er gegevens naartoe sturen of een commando ernaar sturen.
Bijvoorbeeld:
In bovenstaande tabel vertelt een voor een datapoort (D7-D0) waarde van "0b0010 1000 of 0x28" het LCD-scherm om het "(" -symbool weer te geven. In tabel twee geeft dezelfde waarde van 0x28 het LCD-scherm aan "je bent een 5x7 punts LCD en gedragen als één ”, dus voor dezelfde waarde kan de gebruiker twee dingen definiëren, nu wordt deze situatie geneutraliseerd door de registerselectie-pin, als de RS-pin laag is ingesteld, begrijpt het LCD-scherm dat we een commando verzenden. Als we de RS-pin op hoog zetten Het LCD-scherm begrijpt dat we de gegevens verzenden en dus respecteert het LCD-scherm in beide gevallen de datapoortwaarde volgens de RS-pinwaarde.
2. E (Enable) pin is simpelweg om "power indicatie LED van een PC" te vertellen, deze pin is ingesteld op hoog om de LCD te vertellen "om data te ontvangen van data port of controller". Zodra deze pin laag na hoog wordt, verwerkt het LCD-scherm de ontvangen gegevens en toont het bijbehorende resultaat. Dus deze pin is ingesteld op hoog voordat gegevens worden verzonden en naar beneden getrokken na het verzenden van gegevens.
Start nu na het aansluiten van de hardware Atmel studio en start een nieuw project voor het schrijven van het programma, open nu het programmeerscherm en start het wringsprogramma. Het programma moet volgen als volgt.
Eerst vertellen we de controller welke poorten we gebruiken voor gegevens en controle van LCD. Vertel de controller vervolgens wanneer hij gegevens of een commando moet verzenden door met RS- en E-pinnen te spelen.
Korte uitleg van de concepten die in het programma worden gebruikt:
1. E staat hoog (vertelt LCD om gegevens te ontvangen) en RS staat laag (vertelt LCD dat we het commando geven)
2. Waarde 0x01 geven aan de datapoort als een commando om het scherm leeg te maken
3. E staat hoog (vertelt LCD om gegevens te ontvangen) en RS staat hoog (vertelt LCD dat we gegevens geven)
4. Het nemen van een reeks tekens en elk teken in een reeks een voor een verzenden.
5. E staat laag (vertelt LCD dat we klaar zijn met het verzenden van gegevens)
6. Na het laatste commando beëindigt het LCD-scherm de communicatie, verwerkt het de gegevens en toont het de reeks tekens op het scherm.
In dit scenario gaan we de karakters achter elkaar verzenden. De tekens worden aan het LCD-scherm gegeven door middel van ASCII-codes (Amerikaanse standaardcode voor informatie-uitwisseling).
De tabel met ASCII-codes wordt hierboven weergegeven. Om het LCD-scherm een teken "@" te laten weergeven, moeten we een hexadecimale code "64" verzenden. Als we '0x62' naar het LCD-scherm sturen, wordt het symbool '>' weergegeven. Op deze manier gaan we de juiste codes naar het LCD-scherm sturen om een naam weer te geven.
De manier van communiceren tussen LCD en ATmega32 AVR-microcontroller kan het beste worden uitgelegd in stapsgewijze C-code hieronder,