В този урок ще свържем FLEX сензор с микроконтролер ATMEGA8. В ATMEGA8 ще използваме 10bit ADC (Analog to Digital Conversion) функция, за да свършим тази работа. Сега ADC в ATMEGA не може да приема вход повече от + 5V.
Какво е Flex сензор?
А FLEX датчик е датчик, който променя своята устойчивост, когато си форма се променя. Това е показано на фигурата по-долу.
Този сензор се използва за усещане на промените в линейността. Така че, когато сензорът FLEX е огънат, съпротивлението се огъва драстично. Това е показано на фигурата по-долу.
Сега за преобразуване на тази промяна в съпротивлението към промяна в напрежението ще използваме верига на делителя на напрежението. В тази резистивна мрежа имаме едно постоянно съпротивление и друго променливо съпротивление. Както е показано на фигурата по-долу, R1 тук е постоянно съпротивление, а R2 е FLEX сензор, който действа като съпротивление. Средната точка на разклонението се измерва. Когато съпротивлението R2 се промени, Vout се променя с него линейно. Така че с това имаме напрежение, което се променя с линейност.
Сега е важно да се отбележи, че входът, взет от контролера за преобразуване на ADC, е само 50µAmp. Този ефект на натоварване на делител на напрежение, базиран на съпротивление, е важен, тъй като токът, извлечен от Vout на делителя на напрежението, увеличава процента на грешка, за сега не е нужно да се притесняваме за ефекта на натоварване
Ще вземем два резистора и ще образуваме разделителна верига, така че за 25Volts Vin, ние ще получим 5Volt Vout. Така че всичко, което трябва да направим, е да умножим стойността на Vout с „5“ в програмата, за да получим реалното входно напрежение.
Необходими компоненти
ХАРДУЕР: ATMEGA8, Захранване (5v), AVR-ISP ПРОГРАММЕР, JHD_162ALCD (16x2LCD), кондензатор 100uF, кондензатор 100nF (5 броя), резистор 100KΩ.
СОФТУЕР: Atmel studio 6.1, прогисп или флаш магия.
Електрическа схема и работно обяснение
Във веригата PORTD на ATMEGA8 е свързан към порт за данни LCD. В 16x2 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 връзките с ATmega8 са както следва:
ПИН1 или 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
ПИН11 или D4 до D4 на uC
PIN12 или D5 до PD5 на uC
PIN13 или D6 до PD6 на uC
PIN14 или D7 до PD7 на uC
Във веригата можете да видите, че сме използвали 8-битова комуникация (D0-D7), но това не е задължително, можем да използваме 4-битова комуникация (D4-D7), но с 4-битова програма за комуникация става малко сложна, така че ние просто отидохме с 8 бита комуникация. (Проверете и този урок: 16x2 LCD взаимодействие с AVR микроконтролер)
Така че само от наблюдение от горната таблица ние свързваме 10 щифта LCD към контролер, в който 8 щифта са щифтове за данни и 2 щифта са за контрол.
Напрежението в R2 не е напълно линейно; ще бъде шумно. За филтриране на шумовите кондензатори се поставят през всеки резистор в разделителната верига, както е показано на фигурата.
Тук 1K потът е да настроите точността на ADC. Сега нека да обсъдим ADC на ATMEGA8.
В 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 да започне преобразуване. Този бит може да бъде деактивиран в програмата, когато трябва да спрем преобразуването.
FLEX взаимодействието на сензора с ATmega8 е обяснено стъпка по стъпка в C кода, даден по-долу.