For å etablere en god kommunikasjon mellom menneskelig verden og maskinverden spiller skjermenheter en viktig rolle. Og så er de en viktig del av innebygde systemer. Skjermenheter - store eller små, fungerer på samme grunnleggende prinsipp. Foruten komplekse skjermenheter som grafiske skjermer og 3D-visninger, må man vite å jobbe med enkle skjermer som 16x1 og 16x2 enheter. 16x1 displayenheten vil ha 16 tegn og er i en linje. Den 16x2 LCD vil ha 32 tegn totalt 16in 1 st linjen og en annen 16 i 2 ndlinje. Her må man forstå at i hvert tegn er det 5x10 = 50 piksler, så for å vise ett tegn må alle 50 piksler fungere sammen. Men vi trenger ikke bekymre oss for det fordi det er en annen kontroller (HD44780) i skjermenheten som gjør jobben med å kontrollere pikslene. (du kan se det på LCD-enheten, det er det svarte øyet på baksiden).
Komponenter kreves
Maskinvare:
ATmega32 mikrokontroller
Strømforsyning (5v)
AVR-ISP Programmerer
JHD_162ALCD (16x2 LCD)
100uF kondensator.
Programvare:
Atmel studio 6.1
Progisp eller flash magi
Kretsdiagram og forklaring
Som vist i LCD-grensesnittet med ATmega32-kretsen, kan du se at PORTA på ATMEGA32 er koblet til dataport-LCD. Her bør man huske å deaktivere JTAG-kommunikasjonen i PORTC til ATMEGA ved å endre sikringsbyte, hvis man vil bruke PORTC som en vanlig kommunikasjonsport. I 16x2 LCD er det 16 pinner overalt, hvis det er baklys, hvis det ikke er noe bakgrunnslys, vil det være 14 pinner. Man kan drive eller la baklysetappene ligge. Nå i de 14 pinnene er det 8 datapinner (7-14 eller D0-D7), 2 strømforsyningspinner (1 & 2 eller VSS & VDD eller GND & + 5V), 3. pinne for kontrastkontroll (VEE-styrer hvor tykke tegnene skal være vist), 3 kontrollpinner (RS & RW & E)
I kretsen ovenfor for å grensesnitt 16x2 LCD med AVR-mikrokontroller, kan du observere at jeg bare har tatt to kontrollpinner. Dette gir fleksibiliteten til bedre forståelse. Kontrastbiten og LES / SKRIV brukes ikke ofte slik at de kan kortsluttes til bakken. Dette setter LCD i høyest kontrast og lesemodus. Vi trenger bare å kontrollere ENABLE- og RS-pinner for å sende tegn og data tilsvarende.
Forbindelsene mellom ATmega32 mikrokontroller og 16x2 LCD er gitt nedenfor:
PIN1 eller VSS - bakken
PIN2 eller VDD eller VCC - + 5v strøm
PIN3 eller VEE - bakken (gir maksimal kontrast best for en nybegynner)
PIN4 eller RS (Register Selection) - PD6 til mikrokontroller
PIN5 eller RW (lese / skrive) - bakken (setter LCD i lesemodus forenkler kommunikasjonen for brukeren)
PIN6 eller E (Enable) - PD5 for mikrokontroller
PIN7 eller D0 - PA0 til mikrokontroller
PIN8 eller D1 - PA1
PIN9 eller D2 - PA2
PIN10 eller D3 - PA3
PIN11 eller D4 - PA4
PIN12 eller D5 - PA5
PIN13 eller D6 - PA6
PIN14 eller D7 - PA7
I kretsen kan du se at vi har brukt 8bit kommunikasjon (D0-D7) men dette er ikke obligatorisk, og vi kan også bruke 4bit kommunikasjon (D4-D7), men med 4 bit kommunikasjonsprogram blir det litt komplisert for nybegynnere, så bare vi gikk med 8-biters kommunikasjon.
Så fra bare observasjon fra tabellen ovenfor kobler vi 10 pinner LCD til kontrolleren der 8 pinner er datapinner og 2 pinner for kontroll.
Jobber
Nå for å komme i gang må du kjenne funksjonene til 10 pinner på 16x2 LCD (8 datapinner + 2 kontrollpinner). De 8 datapinnene er for å sende data eller kommandoer til LCD. I to kontrollpinner:
1. RS (Register selection) pin er å fortelle LCD-skjermen om vi sender data til den eller kommandoen til den.
For eksempel:
I tabellen ovenfor for en dataport (D7-D0) -verdi på "0b0010 1000 eller 0x28", blir LCD-skjermen vist "(" -symbol. I tabell to forteller den samme verdien på 0x28 LCD-skjermen "du er en 5x7-punkt LCD oppfører seg som en ”, så for samme verdi kan brukeren definere to ting. Nå blir denne situasjonen nøytralisert av Register Selection pin, hvis RS-pinnen er lav, forstår LCD at vi sender kommando. Hvis vi setter RS-pinnen til høy da LCD forstår at vi sender dataene, og i begge tilfeller respekterer LCD dataportverdien i henhold til RS-pinverdien.
2. E (Enable) -pinnen er ganske enkelt å fortelle "strømindikasjons-LED på en PC", denne pinnen er satt til høy for å fortelle LCD-skjermen "å motta dataportdataport til kontrolleren". Når denne pinnen er lav etter høy, behandler LCD mottatte data og viser det tilsvarende resultatet. Så denne pinnen er satt til høy før du sender data og trekkes ned til bakken etter at du har sendt data.
Nå etter at du har koblet til maskinvaren, start Atmel studio og start et nytt prosjekt for å skrive programmet. Åpne nå programmeringsskjermen og start vri programmet. Programmet må følge som viser etter.
Først forteller vi kontrolleren hvilke porter vi bruker for data og kontroll av LCD. Fortell deretter kontrolleren når du skal sende data eller en kommando tilsvarende ved å spille med RS- og E-pinner.
Kort forklaring av begrepene som brukes i programmet:
1. E er satt høyt (forteller LCD å motta data) og RS er lavt (forteller LCD at vi gir kommando)
2. Gi verdien 0x01 til dataporten som en kommando for å fjerne skjermen
3. E er satt høyt (forteller LCD å motta data) og RS er høyt (forteller LCD at vi gir data)
4. Tar en streng med tegn som sender hvert tegn i en streng en etter en.
5. E er satt lavt (forteller LCD at vi er ferdige med å sende data)
6. Etter den siste kommandoen avslutter LCD-kommunikasjonen og behandler dataene og viser tegnstrengen på skjermen.
I dette scenariet skal vi sende karakterene etter hverandre. Tegnene blir gitt til LCD med ASCII-koder (amerikansk standard kode for informasjonsutveksling).
Tabellen over ASCII-koder er vist ovenfor. Her for at LCD-skjermen skal vise tegnet "@", må vi sende en heksadesimal kode "64". Hvis vi sender '0x62' til LCD-skjermen, vises symbolet '>'. Som dette skal vi sende de riktige kodene til LCD-skjermen for å vise et navn.
Kommunikasjonsmåten mellom LCD og ATmega32 AVR-mikrokontroller forklares best trinn for trinn av C-koden nedenfor,