За да се установи добра комуникация между човешкия свят и машинния свят, дисплейните единици играят важна роля. И така те са важна част от вградените системи. Екранни дисплеи - големи или малки, работят на същия основен принцип. Освен сложни дисплейни единици като графични дисплеи и 3D дисплеи, човек трябва да знае и работата с прости дисплеи като 16x1 и 16x2 единици. Дисплеят 16x1 ще има 16 символа и е в един ред. LCD 16x2 ще има 32 символа общо 16 в 1- ви ред и още 16 във 2- рилиния. Тук трябва да се разбере, че във всеки знак има 5x10 = 50 пиксела, така че за да се покаже един знак, всички 50 пиксела трябва да работят заедно. Но не трябва да се притесняваме за това, защото в дисплея има друг контролер (HD44780), който върши работата по управление на пикселите. (можете да го видите в LCD устройство, това е черното око отзад).
Необходими компоненти
Хардуер:
Микроконтролер ATmega32
Захранване (5v)
Програмист AVR-ISP
JHD_162ALCD (16x2 LCD)
100uF кондензатор.
Софтуер:
Atmel studio 6.1
Прогисп или флаш магия
Електрическа схема и обяснение
Както е показано на LCD взаимодействието с веригата ATmega32, можете да видите, че PORTA на ATMEGA32 е свързан към LCD порт за данни. Тук трябва да запомните да деактивирате комуникацията JTAG в PORTC на ATMEGA, като промените байтовете на предпазителите, ако искате да използвате PORTC като нормален комуникационен порт. В 16x2 LCD има 16 щифта, ако има задно осветление, ако няма задно осветление, ще има 14 извода. Човек може да захранва или да оставя щифтове за задно осветяване. Сега в 14-те извода има 8 извода за данни (7-14 или D0-D7), 2 извода за захранване (1 & 2 или VSS & VDD или gnd & + 5v), 3 -ти извод за контрол на контраста (VEE - контролира колко дебели трябва да бъдат символите показани), 3 контролни щифта (RS & RW & E)
В горната схема за интерфейс 16x2 LCD с AVR микроконтролер можете да забележите, че взех само два контролни щифта. Това дава гъвкавост на по-добро разбиране. Контрастният бит и READ / WRITE не се използват често, така че могат да бъдат късо заземени. Това поставя LCD в най-висок контраст и режим на четене. Просто трябва да контролираме ENABLE и RS щифтовете, за да изпращаме символи и данни по съответния начин.
Връзките между микроконтролера ATmega32 и 16x2 LCD са дадени по-долу:
PIN1 или VSS - земя
PIN2 или VDD или VCC - + 5v мощност
PIN3 или VEE - земя (дава максимален контраст най-добър за начинаещи)
PIN4 или RS (Избор на регистър) - PD6 на микроконтролера
PIN5 или RW (четене / запис) - земя (поставя LCD в режим на четене улеснява комуникацията за потребителя)
PIN6 или E (Enable) - PD5 на микроконтролера
PIN7 или D0 - PA0 на микроконтролера
PIN8 или D1 - PA1
PIN9 или D2 - PA2
PIN10 или D3 - PA3
PIN11 или D4 - PA4
PIN12 или D5 - PA5
PIN13 или D6 - PA6
PIN14 или D7 - PA7
Във веригата можете да видите, че сме използвали 8-битова комуникация (D0-D7), но това не е задължително и можем да използваме и 4-битова комуникация (D4-D7), но с 4-битова програма за комуникация става малко сложна за начинаещи, така че просто тръгнахме с 8 битова комуникация.
Така че само от наблюдение от горната таблица ние свързваме 10 щифта LCD към контролер, в който 8 щифта са щифтове за данни и 2 щифта за управление.
Работещи
Сега, за да започнете, трябва да знаете функциите на 10 щифта от 16x2 LCD (8 щифта за данни + 2 контролни щифта). 8-те пина за данни са за изпращане на данни или команди на LCD. В два контролни щифта:
1. ПИН RS (регистър за избор) е да каже на LCD дисплея дали му изпращаме данни или команда към него.
Например:
В таблицата по-горе за порт за данни (D7-D0) стойност „0b0010 1000 или 0x28” казва на LCD дисплея да показва „(” символ. В таблица две същата стойност 0x28 казва на LCD „вие сте LCD с 5x7 точки и дръжте се като един ", така че за една и съща стойност потребителят може да дефинира две неща, сега тази ситуация се неутрализира чрез ПИН за регистрация за избор, ако RS пинът е зададен ниско, тогава LCD разбира, че изпращаме команда. LCD разбира, че изпращаме данните и така и в двата случая LCD зачита стойността на порта за данни според RS pin стойността.
2. E (Enable) щифтът е просто да казва „LED индикация за захранване на компютър“, този щифт е настроен на висок, за да казва на LCD дисплея „да получава данни от порта за данни на контролера“. След като този щифт стане нисък след висок, LCD обработва получените данни и показва съответния резултат. Така че този щифт е настроен на висок преди изпращане на данни и изваден на земята след изпращане на данни.
След като свържете хардуера, стартирайте Atmel studio и стартирайте нов проект за писане на програмата, сега отворете екрана за програмиране и започнете да извивате програма. Програмата трябва да следва, както е показано по-долу.
Първо казваме на контролера кои портове използваме за данни и контрол на LCD. След това кажете на контролера кога да изпрати съответно данни или команда, като играете с RS и E щифтове.
Кратко обяснение на понятията, използвани в програмата:
1. E е зададено високо (казва на LCD да получава данни), а RS е ниско (казва на LCD, че даваме команда)
2. Даване на стойност 0x01 на порта за данни като команда за изчистване на екрана
3. E е зададено високо (казва LCD за получаване на данни), а RS е високо (казва LCD, че даваме данни)
4. Вземане на низ от символи, изпращащи всеки знак в низ един по един.
5. E е зададено ниско (казва на LCD, че сме изпратили данни)
6. След последната команда LCD завършва комуникацията и обработва данните и показва низа от символи на екрана.
В този сценарий ще изпращаме символите един след друг. Символите се дават на LCD от ASCII кодове (американски стандартен код за обмен на информация).
Таблицата с ASCII кодове е показана по-горе. Тук, за да може LCD да показва знак „@“, трябва да изпратим шестнадесетичен код „64“. Ако изпратим „0x62“ на LCD дисплея, той ще покаже символа „>“. По този начин ще изпратим съответните кодове на LCD дисплея, за да покажем име.
Начинът на комуникация между LCD и ATmega32 AVR микроконтролер е най-добре обяснен в стъпка по стъпка от C код долу,