В този урок ще свържем модул на джойстика с микроконтролера atmega8. Една ръчка е входен модул, използван за комуникация. По същество улеснява комуникацията с потребителската машина. На долната фигура е показан джойстик.
Модулът на джойстика има две оси - едната е хоризонтална, а другата е вертикална. Всяка ос на джойстика е монтирана към потенциометър или гърне или променливо съпротивление. Средните точки са намалени като Rx и Ry. Тези щифтове носят като изводи за изходен сигнал за JOYSTICK. Когато пръчката се движи по хоризонтална ос, при налично захранващо напрежение, напрежението на Rx щифта се променя.
Напрежението в Rx се увеличава, когато се движи напред, напрежението в Rx щифта намалява, когато се движи назад. По същия начин напрежението в Ry се увеличава, когато се движи нагоре, напрежението на щифта Ry намалява, когато се движи надолу.
Така че имаме четири посоки на JOYSTICK на два ADC канала. В нормални случаи имаме 1V на всеки щифт при нормални обстоятелства. Когато пръчката се премести, напрежението на всеки щифт става високо или ниско в зависимост от посоката. Така че четири посоки като (0V, 5V на канал 0) за оста x; (0V, 5V на канал 1) за оста y.
Ще използваме два ADC канала на ATMEGA8, за да свършим работата. Ще използваме канал 0 и канал 1.
Необходими компоненти
Хардуер: ATMEGA8, захранване (5v), AVR-ISP PROGRAMMER, LED (4 броя), кондензатор 1000uF, кондензатор 100nF (5 броя), резистор 1KΩ (6 броя).
Софтуер: Atmel studio 6.1, progisp или flash magic.
Електрическа схема и работно обяснение
Напрежението на JOYSTICK не е напълно линейно; ще бъде шумно. За да филтрират шума, кондензаторите се поставят във всеки резистор във веригата, както е показано на фигурата.
Както е показано на фигурата, във веригата има четири светодиода. Всеки светодиод представлява всяка посока на JOYSTICK. Когато пръчката се премести в посока, тогава съответният светодиод свети.
Преди да продължим, трябва да поговорим за 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 да започне преобразуване. Този бит може да бъде деактивиран в програмата, когато трябва да спрем преобразуването.