В този проект ще свържем LDR с микроконтролера ATMEGA8 и с това можем да измерим ИНТЕНЗИТЕТА НА СВЕТЛИНАТА в района. В ATMEGA8 ще използваме 10bit ADC (Analog to Digital Conversion) функция за измерване на интензитета на светлината.
Am LDR е преобразувател, който променя съпротивлението си, когато LIGHT попадне върху повърхността му. LDR сензорът се предлага в различни размери и форми.
LDR са направени от полупроводникови материали, за да им позволят да имат своите чувствителни на светлина свойства. Използват се много видове материали, но един от най-популярните е КАДМИЕВ СУЛФИД (CdS). Тези LDR или PHOTO REISTORS работят на принципа на „ Фотопроводимост “. Сега този принцип казва, че когато светлината падне върху повърхността на LDR (в този случай) проводимостта на елемента се увеличава или с други думи съпротивлението на LDR намалява, когато светлината пада върху повърхността на LDR. Това свойство на намаляване на съпротивлението за LDR се постига, тъй като е свойство на полупроводников материал, използван на повърхността. LDR се използват в повечето случаи за откриване на наличие на светлина или за измерване на интензивността на светлината.
Съществуват различни видове LDR, както е показано на горната фигура и всеки има различни спецификации. Обикновено LDR ще има 1MΩ-2MΩ при пълна тъмнина, 10-20KΩ при 10 LUX, 2-5KΩ при 100 LUX. Типичната графика на устойчивост на LUX на LDR е показана на фигура.
Както е показано на горната фигура, съпротивлението между двата контакта на сензора намалява с интензивността на светлината или проводимостта между два контакта на сензора се увеличава.
Сега за преобразуване на тази промяна в съпротивлението към промяна в напрежението ще използваме верига на делителя на напрежението. В тази резистивна мрежа имаме едно постоянно съпротивление и друго променливо съпротивление. Както е показано на фигурата, R1 тук е постоянно съпротивление, а R2 е СИЛА СИЛА, която действа като съпротивление.
Средната точка на разклонението се измерва. Когато съпротивлението R2 се промени, Vout се променя с него линейно. Така че с това имаме напрежение, което се променя с теглото.
Сега е важно да се отбележи, че входът, взет от контролера за преобразуване на ADC, е само 50µAmp. Този ефект на натоварване на делител на напрежение, базиран на съпротивление, е важен, тъй като токът, извлечен от Vout на делителя на напрежението, увеличава процента на грешка, увеличава се, засега не е нужно да се тревожим за ефекта на натоварване
Това, което ще направим тук, е, че ще вземем два резистора и ще образуваме разделителна верига, така че за 25Volts Vin, ние ще получим 5Volt Vout. Така че всичко, което трябва да направим, е да умножим стойността на Vout с „5“ в програмата, за да получим реалното входно напрежение.
Компоненти
Хардуер: ATMEGA8, захранване (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), кондензатор 100uF, кондензатор 100nF (5 броя), резистор 10KΩ, LDR (резистор, зависим от светлината).
Софтуер: Atmel studio 6.1, progisp или flash magic.
Електрическа схема и работно обяснение
Във веригата PORTD на ATMEGA8 е свързан към порт за данни LCD. В 16 * 2 LCD има 16 щифта, ако има задно осветление, ако няма задно осветление, ще има 14 извода. Човек може да захранва или да оставя щифтовете на задното осветление. Сега в 14-те извода има 8 извода за данни (7-14 или D0-D7), 2 извода за захранване (1 & 2 или VSS & VDD или gnd & + 5v), 3 -ти извод за контрол на контраста (VEE - контролира колко дебели трябва да бъдат символите показани) и 3 контролни щифта (RS & RW & E)
Във веригата можете да забележите, че съм взел само два контролни щифта. Контрастният бит и READ / WRITE не се използват често, така че могат да бъдат късо заземени. Това поставя LCD в най-висок контраст и режим на четене. Просто трябва да контролираме ENABLE и RS щифтовете, за да изпращаме символи и данни по съответния начин.
Най връзки за LCD са дадени по-долу:
PIN1 или VSS ------------------ земя
PIN2 или VDD или VCC ------------ + 5v мощност
PIN3 или VEE --------------- земя (дава максимален контраст най-добър за начинаещи)
PIN4 или RS (Избор на регистър) --------------- PB0 от uC
PIN5 или RW (четене / запис) ----------------- земя (поставя LCD в режим на четене улеснява комуникацията за потребителя)
PIN6 или E (Активиране) ------------------- PB1 от uC
PIN7 или D0 ----------------------------- PD0 от uC
PIN8 или D1 ----------------------------- PD1 на uC
PIN9 или D2 ----------------------------- PD2 на uC
PIN10 или D3 ----------------------------- PD3 на uC
PIN11 или D4 ----------------------------- PD4 на uC
PIN12 или D5 ----------------------------- PD5 на uC
PIN13 или D6 ----------------------------- PD6 на uC
ПИН14 или D7 ----------------------------- PD7 на uC
Във веригата можете да видите, че сме използвали 8-битова комуникация (D0-D7), но това не е задължително, можем да използваме 4-битова комуникация (D4-D7), но с 4-битова програма за комуникация става малко сложна. Така че само от наблюдение от горната таблица ние свързваме 10 щифта LCD към контролер, в който 8 щифта са щифтове за данни и 2 щифта за управление.
Напрежението в R2 не е напълно линейно; ще бъде шумно. За филтриране на шумовите кондензатори се поставят през всеки резистор в разделителната верига, както е показано на фигурата.
В ATMEGA8 можем да дадем аналогов вход на всеки от ЧЕТИРИ канала на PORTC, няма значение кой канал ще изберем, тъй като всички са еднакви. Ще изберем канал 0 или PIN0 на PORTC. В ATMEGA8 ADC е с 10-битова разделителна способност, така че контролерът може да открие минимална промяна на Vref / 2 ^ 10, така че ако референтното напрежение е 5V, получаваме увеличение на цифровия изход за всеки 5/2 ^ 10 = 5mV. Така че за всеки 5mV прираст във входа ще имаме приращение от един при цифров изход.
Сега трябва да зададем регистъра на ADC въз основа на следните условия:
1. На първо място трябва да активираме функцията ADC в ADC.
2. Тук ще получите максимално входно напрежение за преобразуване ADC е + 5V. Така че можем да настроим максимална стойност или референция на ADC до 5V.
3. Контролерът има функция за преобразуване на задействане, което означава, че преобразуването на ADC се извършва само след външен спусък, тъй като не искаме да трябва да задаваме регистрите, за да може ADC да работи в режим на непрекъснат свободен ход.
4. За всеки ADC честотата на преобразуване (аналогова стойност в цифрова стойност) и точността на цифровия изход са обратно пропорционални. Така че за по-добра точност на цифровия изход трябва да изберем по-ниска честота. За нормален часовник ADC настройваме предварителната продажба на ADC на максимална стойност (2). Тъй като използваме вътрешния часовник от 1MHZ, часовникът на ADC ще бъде (1000000/2).
Това са единствените четири неща, които трябва да знаем, за да започнем с ADC.
Всички горни четири функции се задават от два регистъра,
ЧЕРВЕНО (ADEN): Този бит трябва да бъде настроен за активиране на функцията ADC на ATMEGA.
СИН (REFS1, REFS0): Тези два бита се използват за задаване на референтното напрежение (или максимално входно напрежение, което ще дадем). Тъй като искаме да имаме референтно напрежение 5V, от таблицата трябва да бъде зададен REFS0.
ЖЪЛТ (ADFR): Този бит трябва да бъде настроен, за да може АЦП да работи непрекъснато (режим на свободен ход).
PINK (MUX0-MUX3): Тези четири бита служат за казване на входния канал. Тъй като ще използваме ADC0 или PIN0, не е необходимо да задаваме никакви битове, както е показано в таблицата.
BROWN (ADPS0-ADPS2): тези три бита са за настройка на прескалара за ADC. Тъй като използваме прескалар от 2, трябва да зададем един бит.
ТЪМНО ЗЕЛЕНО (ADSC): този бит е зададен за ADC да започне преобразуване. Този бит може да бъде деактивиран в програмата, когато трябва да спрем преобразуването.
Така че с устойчивостта на LDR на LCD екрана 16x2, можем да го съпоставим с LUX графика за получаване на интензивността на светлината.