Мазмұны:

AVR микроконтроллері. Жарық диодты қосқыштың көмегімен ауыстырыңыз. Басқару түймесі: 4 қадам
AVR микроконтроллері. Жарық диодты қосқыштың көмегімен ауыстырыңыз. Басқару түймесі: 4 қадам

Бейне: AVR микроконтроллері. Жарық диодты қосқыштың көмегімен ауыстырыңыз. Басқару түймесі: 4 қадам

Бейне: AVR микроконтроллері. Жарық диодты қосқыштың көмегімен ауыстырыңыз. Басқару түймесі: 4 қадам
Бейне: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Шілде
Anonim
Image
Image

Бұл бөлімде біз ATMega328PU үшін C бағдарламасының кодын үш батырманың қосқышына сәйкес үш жарықдиодты күйге ауыстыруды үйренеміз. Сонымен қатар, біз «Switch Bounce» мәселесінің шешімін қарастырдық. Әдетте, біз бағдарламалық кодтың жұмысын тексеру үшін AVR ATmega328 базасында электр тізбегін жинаймыз.

1 -қадам: Atmel Studio 7 интеграцияланған даму платформасын қолдана отырып, C кодында AVR микроконтроллер қосымшасын жазу және құру

Atmel Studio 7 интеграцияланған даму платформасын қолдана отырып, C кодында AVR микроконтроллер қосымшасын жазу және құру
Atmel Studio 7 интеграцияланған даму платформасын қолдана отырып, C кодында AVR микроконтроллер қосымшасын жазу және құру
Atmel Studio 7 интеграцияланған даму платформасын қолдана отырып, C кодында AVR микроконтроллер қосымшасын жазу және құру
Atmel Studio 7 интеграцияланған даму платформасын қолдана отырып, C кодында AVR микроконтроллер қосымшасын жазу және құру
Atmel Studio 7 интеграцияланған даму платформасын қолдана отырып, C кодында AVR микроконтроллер қосымшасын жазу және құру
Atmel Studio 7 интеграцияланған даму платформасын қолдана отырып, C кодында AVR микроконтроллер қосымшасын жазу және құру

Егер сізде Atmel Studio болмаса, оны жүктеп, орнату керек.

www.microchip.com/mplab/avr-support/atmel-studio-7

Алғашқы бірнеше жолдарда бізде компилятор анықтайды.

F_CPU Hertz сағат жиілігін анықтайды және avr-libc кітапханасын қолданатын бағдарламаларда жиі кездеседі. Бұл жағдайда уақытты кешіктіруді қалай есептеу керектігін анықтау үшін кешіктіру тәртібі қолданылады.

#ifndef F_CPU

#анықтау F_CPU 16000000UL // контроллердің кристалды жиілігін айту (16 МГц AVR ATMega328P) #endif

түйіндер бойынша деректер ағынын басқаруды қосу үшін #include // header. Ілгектерді, порттарды және т.б.

Бірінші файл avr-libc бөлігі болып табылады және сіз жұмыс істейтін кез келген AVR жобасында қолданылады. io.h сіз қолданатын процессорды анықтайды (сондықтан компиляция кезінде бөлікті көрсетесіз) және өз кезегінде біз қолданатын чипке сәйкес IO анықтамалық тақырыбын қосады. Ол барлық түйреуіштер, порттар, арнайы регистрлер және т.

Бағдарламада кідіріс функциясын қосу үшін #include // header

Util/delay.h кітапханасында қысқа кідірістерге арналған кейбір әрекеттер бар. Біз қолданатын функция _delay_ms ().

Біз түймені және жарықдиодты порттарды және түйреуіштерді жариялау үшін анықтамаларды қолданамыз. Осындай анықтамалық мәлімдемелерді қолдану, егер біз жарық диодты басқа енгізу-шығару түйреуішіне жылжытсақ немесе басқа AVR қолдансақ, табуға оңай 3 жолды өзгертуге мүмкіндік береді.

#define BUTTON1 1 // түйменің қосқышы В портына 1 қосылған

#анықтау LED1 0 // Led1 В портына қосылады 0 #анықтау LED2 1 // Led2 C портына қосылады 1 #анықтау LED3 2 // Led3 D ұясына қосылады 2

Соңғы екеуі түймені басуға рұқсат бермес бұрын коммутаторды өшіру үшін күту уақытын миллисекундта анықтайды. Шығу уақытын барлық секіруден кейін цифрлық биіктіктен цифрлық төменге өту үшін уақытты түзету қажет. Секіру әрекеті ауысудан ауысуға қарай әр түрлі болады, бірақ әдетте 20-30 миллисекунд жеткілікті.

#debine DEBOUNCE_TIME 25 // «өшіру» түймесі күтілетін уақыт

#dockine LOCK_INPUT_TIME 300 // батырманы басқаннан кейін күту уақыты

жарамсыз init_ports_mcu ()

{

Бұл функция біз қолданатын кіріс шығыс түйреуіштерін инициализациялау үшін біздің бағдарламаның басында бір рет шақырылады.

Түйме үшін біз PORT және PIN регистрлерін жазу мен оқу үшін қолданатын боламыз. AVR көмегімен біз PINx регистрі арқылы түйреуішті оқимыз, ал біз оны PORTx регистрі арқылы жазамыз. Біз тартуларды іске қосу үшін түйме регистріне жазуымыз керек.

Жарық диодты жарықтандыру үшін бізге тек PORT регистрін қолдану қажет, алайда бізге ақпараттың бағыт регистрі (DDR) қажет, себебі енгізу -шығару түйреуіштері әдепкі бойынша кіріс ретінде орнатылады.

Біріншіден, біз жарық диодты енгізу -шығару түйреуіштерін деректердің бағыт регистрін қолдана отырып шығыс ретінде орнатамыз.

DDRB = 0xFFu; // PORTB барлық түйреуіштерін шығыс ретінде орнатыңыз.

Содан кейін түйме түйреуішін кіріс ретінде анық орнатыңыз.

DDRB & = ~ (1 <

Әрі қарай, оны қосу үшін PORTB түйреуіштері жоғары (+5 вольт) орнатылады. Шығару түйреуіштері бастапқыда жоғары, ал біздің светодиод сым белсенді түрде қосылғандықтан, егер біз оны анық өшірмесек, ол қосылады.

Ақырында, біз түйме үшін қолданатын кіріс түйреуішіндегі ішкі тартқыш резисторды қосамыз. Бұл портқа біреуін шығару арқылы жасалады. Кіріс ретінде конфигурацияланған кезде, бұл тартылуды қосуға мүмкіндік береді және шығыс ретінде конфигурацияланған кезде, бұл жоғары кернеуді шығарады.

PORTB = 0xFF; // PORTB барлық түйреуіштерін ЖОҒАРЫ етіп орнатыңыз. Лед қосылды, // сонымен қатар PORTB бірінші істігінің ішкі тартқыш резисторы қосылады. DDRC = 0xFFu; // PORTC барлық түйреуіштерін шығыс ретінде орнатыңыз. PORTC = 0x00u; // Барлық PORTC түйреуіштерін төмен орнатыңыз, ол оны өшіреді. DDRD = 0xFFu; // PORTD барлық түйреуіштерін шығыс ретінде орнатыңыз. PORTD = 0x00u; // PORTD барлық түйреуіштерін төмен орнатыңыз, ол оны өшіреді. }

белгісіз char button_state ()

{

Бұл функция логикалық мәнді қайтарады, ол батырманың басылғанын немесе басылмағанын көрсетеді. Бұл код блогы үздіксіз циклде үнемі орындалады және осылайша түйменің күйін сұрайды. Бұл жерде біз коммутатордан бас тартамыз.

Есіңізде болсын, біз коммутаторды басқан кезде кіріс шығыс штыры жерге тартылады. Осылайша, біз түйреуіштің төмен түсуін күтеміз.

/ * түймесі BUTTON1 биті бос болған кезде басылады */

егер (! (PINB & (1 <

Біз мұны бит анық екенін тексеру арқылы жасаймыз. Егер бит анық болса, бұл батырманың басылғанын көрсетеді, біз алдымен DEBOUNCE_TIME анықтайтын уақытты 25 мс кешіктіреміз, содан кейін түймешіктің күйін қайтадан тексереміз. Егер түйме 25 секундтан кейін басылса, онда коммутатор жойылған болып саналады және оқиғаны бастауға дайын, сондықтан біз қоңырау шалу режиміне 1 -ді қайтарамыз. Егер түйме басылмаса, біз 0 -ге қоңырау шалу тәртібіне ораламыз.

_кідіріс_мінеттері (DEBOUNCE_TIME);

егер (! (PINB & (1 <

int main (жарамсыз)

{

Біздің негізгі тәртіп. Негізгі функция бірегей және басқа функциялардан ерекшеленеді. Әрбір C бағдарламасында бір main () функциясы болуы керек. Ең бастысы - AVR сіздің кодты іске қосуды бастайды, сондықтан бұл бағдарламаның кіру нүктесі.

белгісіз char n_led = 1; // бастапқыда жарық диодты нөмір қазір қосулы

Қолданылатын енгізу -шығару түйреуіштерін инициализациялау үшін функцияның шақыруы:

init_ports_mcu ();

біздің бағдарлама жұмыс істейтін шексіз цикл:

кезінде (1)

{

Button_state түймешіктің басылғанын және шығарылғанын көрсететін біреуін қайтарғанда, n_led параметріне сәйкес жарық диодтарының ағымдағы күйін ауыстырады.

if (button_state ()) // Егер түйме басылса, жарық диодтың күйін ауыстырыңыз және 300 мс кешіктіріңіз (#LOCK_INPUT_TIME анықтаңыз)

{switch (n_led) {1 -жағдай: PORTB ^= (1 << LED1); PORTC ^= (1 << LED2); үзіліс;

Бұл мәлімдемелерде C разрядты операторлары қолданылады. Бұл жолы эксклюзивті OR операторы қолданылады. Портты ауыстырғыңыз келетін бит мәнімен XOR орнатқанда, бір бит басқа биттерге әсер етпей өзгертіледі.

2 -жағдай:

PORTC ^= (1 << LED2); PORTD ^= (1 << LED3); үзіліс; 3 -жағдай: PORTD ^= (1 << LED3); PORTB ^= (1 << LED1); n_led = 0; // жарықдиодты санның үзілуін қалпына келтіру; } n_led ++; // келесі жарық диоды _delay_ms (LOCK_INPUT_TIME) қосылады; }} қайтару (0); }

Енді, бұл бағдарламаны іске қосқан кезде, жарықдиодты жарық диодты қосқышқа басу керек. LOCK_INPUT_TIME анықтаған кідірісімізге байланысты, жарықдиодты сәйкес жылдамдықпен өшіруге және қосуға мүмкіндік беретін түймені басып тұруға болады (әр 275 мс -тен сәл артық).

Бағдарламалау аяқталды.

Келесі қадам - avrdude бағдарламасының көмегімен жобаны және он алтылық файлды микроконтроллерге құру.

Main.c файлын c кодындағы бағдарламамен жүктеуге болады:

2 -қадам: бағдарламаның HEX файлын чиптің флэш -жадына тасымалдау

Бағдарламаның HEX файлын чиптің флэш -жадына тасымалдау
Бағдарламаның HEX файлын чиптің флэш -жадына тасымалдау
Бағдарламаның HEX файлын чиптің флэш -жадына тасымалдау
Бағдарламаның HEX файлын чиптің флэш -жадына тасымалдау

AVRDUDE жүктеп алыңыз және орнатыңыз. Қол жетімді соңғы нұсқа - 6.3: zip файлын жүктеңіз

Алдымен бағдарламаның он алтылық файлын AVRDUDE каталогына көшіріңіз. Менің жағдайда бұл ButtonAVR.hex

Содан кейін DOS шақыру терезесінде: avrdude –c [бағдарламашының аты] –p m328p –u –U жыпылықтау: w: [он алтылық файлдың атауы] пәрменін теріңіз.

Менің жағдайда бұл: avrdude –c ISPProgv1 –p m328p –u –U жарқыл: w: ButtonAVR.hex

Бұл пәрмен он алтылық файлды микроконтроллердің жадына жазады.

Микроконтроллердің флэш -жадының жануының толық сипаттамасы бар бейнені қараңыз:

Микроконтроллердің флэш жады жанып жатыр…

Жарайды ма! Енді микроконтроллер біздің бағдарламаның нұсқауларына сәйкес жұмыс істейді. Оны тексеріп көрейік!

3 -қадам: аппараттық құралдарды ауыстыру

Аппаратты ауыстыру
Аппаратты ауыстыру

Бағдарламалық қамтамасыз етуді ажыратудан басқа, біз аппараттық коммутатордың дебунгі техникасын қолдана аламыз. Мұндай техниканың негізгі идеясы - конденсаторды коммутатор сигналындағы жылдам өзгерістерді сүзу үшін қолдану.

Конденсатордың қандай мәнін таңдау керек? Бұл, сайып келгенде, түйменің осы мәселеге қатысты қаншалықты нашар жұмыс жасайтынына байланысты болады. Кейбір түймелер үлкен секіру әрекетін көрсете алады, ал басқаларында өте аз болады. 1.0 нанофарад сияқты конденсатордың төмен мәні өте тез әрекет етеді, бұл секіруге әсер етпейді немесе әсер етпейді. Керісінше, 220 нанофарад сияқты конденсатордың жоғары мәні (бұл конденсаторлар бойынша әлі де өте аз) бастапқы кернеуден (5 вольттан 0 вольтке) баяу өтуді қамтамасыз етеді. 220 нанофарад сыйымдылығы бар ауысу нақты мағынада әлі де өте жылдам, сондықтан оны нашар жұмыс істейтін түймелерде қолдануға болады.

4 -қадам: Электр тізбегі

Электр тізбегі
Электр тізбегі
Электр тізбегі
Электр тізбегі
Электр тізбегі
Электр тізбегі

Схемалық схемаға сәйкес компоненттерді қосыңыз.

Ұсынылған: