Բովանդակություն:
- Քայլ 1. AVR միկրոկառավարիչի կիրառություն գրել և կառուցել C կոդով ՝ օգտագործելով ինտեգրված զարգացման հարթակ Atmel Studio 7
- Քայլ 2. HEրագրի HEX ֆայլը փոխանցել չիպի ֆլեշ հիշողության մեջ
- Քայլ 3. Սարքաշարի անջատիչից հրաժարվելը
- Քայլ 4: Էլեկտրական միացում
Video: AVR միկրոկոնտրոլեր: Միացրեք LED- ները ՝ սեղմելով կոճակի անջատիչը: Կոճակի վերացում. 4 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Այս բաժնում մենք կսովորենք, թե ինչպես կատարել ծրագրի C կոդը ATMega328PU- ի համար ՝ երեք LED- ների կարգավիճակը փոխելու համար ՝ ըստ կոճակի անջատիչի մուտքի: Բացի այդ, մենք ուսումնասիրել ենք «Switch Bounce» - ի խնդրի լուծումները: Սովորաբար, մենք էլեկտրական միացում կհավաքենք AVR ATmega328 բազայի վրա `ծրագրային կոդի աշխատանքը ստուգելու համար:
Քայլ 1. AVR միկրոկառավարիչի կիրառություն գրել և կառուցել C կոդով ՝ օգտագործելով ինտեգրված զարգացման հարթակ Atmel Studio 7
Եթե չունեք Atmel Studio, ապա պետք է ներբեռնեք և տեղադրեք այն:
www.microchip.com/mplab/avr-support/atmel-studio-7
Առաջին մի քանի տողերը, որոնք մենք ունենք որոշ կոմպիլյատոր, սահմանում է:
F_CPU- ն սահմանում է ժամացույցի հաճախականությունը Հերցում և տարածված է 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 () է:
Մենք օգտագործում ենք defines ՝ մեր կոճակը և LED- ի նավահանգիստներն ու կապումները հայտարարելու համար: Նման սահմանումներ պարունակող հայտարարությունների օգտագործումը մեզ թույլ է տալիս փոփոխել միայն 3 հեշտ գտվող տողերը, եթե LED- ն տեղափոխենք այլ մուտքի/ելքի պին կամ օգտագործենք այլ AVR:
#սահմանել BUTTON1 1 // կոճակի անջատիչը, որը միացված է B պին 1 պորտին
#սահմանել LED1 0 // Led1- ը միացված է B պին 0 -ին #սահմանել LED2 1 // Led2- ը միացված է C պին 1 -ին #սահմանել LED3 2 // Led3- ը միացված է D պին 2 պորտին
Վերջին երկուսը սահմանում են հայտարարությունների տեղադրման ժամանակը ՝ միլիվայրկյանում, անջատիչը անջատելու և կոճակի ևս մեկ սեղմում թույլ տալու համար սպասելու ժամանակը: Դեպոնսինգի ժամանակը պետք է հարմարեցվի այն ժամանակին, երբ ամբողջ ցատկումից հետո թվային բարձրից թվային ցածրի անցնելու համար անհրաժեշտ է: Ounատկման վարքագիծը տարբեր կլինի անջատիչից անջատիչ, բայց 20-30 միլիվայրկյանները սովորաբար բավական են:
#սահմանեք DEBOUNCE_TIME 25 // սպասելու ժամանակը «դե-ցատկել» կոճակին
#սահմանեք LOCK_INPUT_TIME 300 // կոճակը սեղմելուց հետո սպասելու ժամանակը
անվավեր init_ports_mcu ()
{
Այս գործառույթը մեր ծրագրի սկզբում կոչվում է ընդամենը մեկ անգամ `սկզբնականացնելու մուտքային ելքային կապերը, որոնք մենք օգտագործելու ենք:
Կոճակի համար մենք կօգտագործենք PORT և PIN գրանցամատյանները գրելու և կարդալու համար: AVR- ներով մենք կարդում ենք PIN- ը ՝ օգտագործելով PINx գրանցամատյանը և գրում ենք PIN- ին ՝ օգտագործելով PORTx գրանցամատյանը: Մենք պետք է գրենք կոճակների գրանցամատյանում `քաշքշուկները միացնելու համար:
LED- ի համար մեզ անհրաժեշտ է օգտագործել PORT գրանցամատյանը, սակայն մեզ անհրաժեշտ է նաև տվյալների ուղղության գրանցամատյան (DDR), քանի որ մուտքի/ելքի կապերը կանխադրված են որպես մուտքագրումներ:
Նախ, մենք LED- ի I/O կապումներն ենք որպես ելք ՝ օգտագործելով տվյալների ուղղության գրանցամատյանը:
DDRB = 0xFFu; // PORTB- ի բոլոր կապումներն ամրագրել որպես ելք:
Հաջորդը, հստակ սահմանեք կոճակի քորոցը որպես մուտք:
DDRB & = ~ (1 <
Հաջորդը, այն միացնելու համար PORTB կապում տեղադրված է բարձր (+5 վոլտ): Ելքային կապումներն ի սկզբանե բարձր են, և քանի որ մեր LED- ն միացված է ակտիվ-բարձր, այն կմիացվի, եթե այն հստակորեն չանջատենք:
Եվ, վերջապես, մենք միացնում ենք ներքին ձգվող դիմադրությունը մուտքի պինակի վրա, որը մենք օգտագործում ենք մեր կոճակի համար: Դա արվում է պարզապես մեկը նավահանգիստ դուրս բերելով: Երբ կազմաձևվում է որպես մուտքագրում, դա հանգեցնում է քաշքշուկների ակտիվացմանը և, երբ կազմաձևվում է որպես ելք, դա պարզապես բարձր լարման ելք կտա:
PORTB = 0xFF; // Սահմանեք PORTB- ի բոլոր կապումները որպես ԲԱՐՁՐ: Led- ը միացված է, // միացված է նաև առաջին կապի PORTB- ի ներքին Pull Up ռեզիստորը: DDRC = 0xFFu; // Սահմանեք PORTC- ի բոլոր կապումներն որպես ելք: PORTC = 0x00u; // Setածր դարձրեք PORTC- ի բոլոր կապումները, որն անջատում է այն: DDRD = 0xFFu; // Սահմանել PORTD- ի բոլոր կապումներն որպես ելք: PORTD = 0x00u; // Setածրացրեք PORTD- ի բոլոր կապումները, որն անջատում է այն: }
անստորագիր char button_state ()
{
Այս գործառույթը վերադարձնում է բուլյան արժեք ՝ նշելով կոճակը սեղմված է, թե ոչ: Սա այն կոդի բլոկն է, որն անընդհատ կատարվում է անվերջանալի օղակում և, հետևաբար, հարցում է կատարում կոճակի վիճակը: Սա նաև այն վայրն է, որտեղ մենք անջատում ենք անջատիչը:
Այժմ, հիշեք, որ երբ մենք սեղմում ենք անջատիչը, մուտքային ելքային կապը քաշվում է գետնին: Այսպիսով, մենք սպասում ենք, որ քորոցն իջնի:
/ * կոճակը սեղմվում է, երբ BUTTON1 բիթը պարզ է */
եթե (! (PINB & (1 <
Մենք դա անում ենք ՝ ստուգելով, արդյոք բիթը պարզ է: Եթե բիթը պարզ է ՝ նշելով, որ կոճակը սեղմված է, մենք նախ հետաձգում ենք DEBOUNCE_TIME- ով սահմանված ժամանակի համար, որը 25 մ է, այնուհետև նորից ստուգում ենք կոճակի վիճակը: Եթե կոճակը սեղմվում է 25 վայրկյանից հետո, ապա անջատիչը համարվում է անջատված և պատրաստ իրադարձություն սկսելու համար, ուստի մենք 1 -ը վերադառնում ենք մեր կանչող առօրյային: Եթե կոճակը սեղմված չէ, մենք 0 -ը վերադառնում ենք մեր զանգի ռեժիմին:
_delay_ms (DEBOUNCE_TIME);
եթե (! (PINB & (1 <
int հիմնական (անվավեր)
{
Մեր հիմնական առօրյան: Հիմնական գործառույթը եզակի է և տարբերվում է մյուս բոլոր գործառույթներից: Յուրաքանչյուր C ծրագիր պետք է ունենա մեկ հիմնական () գործառույթ: հիմնականը այն վայրն է, որտեղ AVR- ն սկսում է կատարել ձեր կոդը, երբ էներգիան առաջին անգամ միանում է, ուստի դա ծրագրի մուտքի կետն է:
անստորագիր նշան n_led = 1; // ի սկզբանե LED համարը այժմ միացված է
Օգտագործվող I/O կապում գործարկելու գործառույթի կանչը.
init_ports_mcu ();
անսահմանափակ հանգույց, որտեղ աշխատում է մեր ծրագիրը.
մինչդեռ (1)
{
Երբ button_state- ը վերադարձնում է մեկը ՝ նշելով, որ կոճակը սեղմվել և անջատվել է, այնուհետև LED- ների ընթացիկ կարգավիճակը միացնելով ՝ ըստ n_led պարամետրի:
եթե (button_state ()) // Եթե կոճակը սեղմված է, միացրեք LED- ի վիճակը և հետաձգեք 300 ms (#սահմանեք LOCK_INPUT_TIME)
{switch (n_led) {case 1: PORTB ^= (1 << LED1); PORTC ^= (1 << LED2); ընդմիջում;
Այս հայտարարությունները օգտագործում են բ բիթային օպերատորներ: Այս անգամ այն օգտագործում է բացառիկ OR օպերատորը: Երբ POR- ը XOR եք դնում այն բիտի բիթային արժեքով, որը ցանկանում եք միացնել, այդ մեկ բիթը փոխվում է ՝ առանց մյուս բիթերի վրա ազդելու:
դեպք 2:
PORTC ^= (1 << LED2); PORTD ^= (1 << LED3); ընդմիջում; դեպք 3: PORTD ^= (1 << LED3); PORTB ^= (1 << LED1); n_led = 0; // վերականգնել LED համարի ընդմիջումը; } n_led ++; // հաջորդ LED- ը միացված է _delay_ms (LOCK_INPUT_TIME); }} վերադարձ (0); }
Այսպիսով, այժմ, երբ գործարկում եք այս ծրագիրը, դուք պետք է կարողանաք սեղմել կոճակը LED- ների վրա: LOCK_INPUT_TIME- ով սահմանված մեր ուշացման պատճառով կարող եք սեղմել և պահել այն կոճակը, որը կհանգեցնի LED- ների անջատման և միացման կայուն արագությամբ (յուրաքանչյուր 275 մ -ից քիչ ավելի):
Programրագրավորումն ավարտված է:
Հաջորդ քայլը նախագծի կառուցումն է և ծրագրավորման վեցանկյուն ֆայլը միկրոկառավարիչի մեջ `օգտագործելով avrdude ծրագիրը:
Դուք կարող եք բեռնել main.c ֆայլը ծրագրով c կոդով ՝
Քայլ 2. HEրագրի HEX ֆայլը փոխանցել չիպի ֆլեշ հիշողության մեջ
Ներբեռնեք և տեղադրեք AVRDUDE- ը: Առկա վերջին տարբերակը 6.3 է: Ներբեռնեք zip ֆայլը
Նախ, պատճենեք ծրագրի վեցանկյուն ֆայլը AVRDUDE գրացուցակում: Իմ դեպքում դա ButtonAVR.hex է
Այնուհետև մուտքագրեք DOS- ի հուշման պատուհանը ՝ avrdude –c [ծրագրավորողի անունը] –p m328p –u –U flash: w: [ձեր վեցանկյուն ֆայլի անունը]:
Իմ դեպքում դա: avrdude –c ISPProgv1 –p m328p –u –U flash: w: ButtonAVR.hex
Այս հրամանը գրում է վեցանկյուն ֆայլ միկրոկառավարիչի հիշողության մեջ:
Դիտեք տեսանյութը միկրոկառավարիչի ֆլեշ հիշողության այրման մանրամասն նկարագրությամբ.
Միկրոկառավարիչի ֆլեշ հիշողությունը այրվում է…
Լավ! Այժմ, միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան: Եկեք ստուգենք այն:
Քայլ 3. Սարքաշարի անջատիչից հրաժարվելը
Softwareրագրային ապահովման անջատիչի ապամոնտաժումից բացի, մենք կարող ենք օգտագործել ապարատային անջատիչների ապամոնտաժման տեխնիկան: Նման տեխնիկայի հիմքում ընկած է կոնդենսատորի օգտագործումը անջատիչի ազդանշանի արագ փոփոխությունները զտելու համար:
Ո՞ր արժեքի կոնդենսատորը պետք է ընտրվի: Սա, ի վերջո, կախված կլինի նրանից, թե որքան վատ է աշխատում կոճակը տվյալ խնդրի վերաբերյալ: Որոշ կոճակներ կարող են ցուցադրել հսկայական ցատկող վարքագիծ, իսկ մյուսները ՝ շատ քիչ: Nanածր կոնդենսատորի արժեքը, ինչպիսին է 1.0 նանոֆարադը, շատ արագ կարձագանքի ՝ փոքր կամ առանց որևէ ազդեցության ցատկման վրա: Եվ հակառակը, կոնդենսատորի ավելի բարձր արժեքը, ինչպիսին է 220 նանոֆարադը (որը կոնդենսատորների առումով դեռ բավականին փոքր է), կապահովի դանդաղ անցում սկզբից մինչև վերջ լարման (5 վոլտից մինչև 0 վոլտ): Այնուամենայնիվ, 220 նանոֆարադի հզորությամբ անցումը դեռևս բավականին արագ է իրական իմաստով, և, հետևաբար, կարող է օգտագործվել վատ աշխատող կոճակների վրա:
Քայլ 4: Էլեկտրական միացում
Միացրեք բաղադրիչները սխեմատիկ սխեմայի համաձայն:
Խորհուրդ ենք տալիս:
Միացրեք հոսանքի անջատիչը Creator Ci40- ին: 4 քայլ
Էլեկտրահաղորդիչ սարքը Creator Ci40- ին միացնելը. Creator Ci40 տախտակը պարիսպի մեջ կառուցելը կարող է պահանջել կառավարման տախտակի հեռակա վերահսկում: Այս ուսանելի տեսքը նայում է, թե ինչպես ավելացնել տախտակին DC սնուցման աղբյուրը վերահսկելու պասիվ և ակտիվ տարբերակներ: Ինչ ձեզ հարկավոր կլինի 1 x Creator
Atollic TrueStudio- Միացրեք LED- ը ՝ սեղմելով կոճակը ՝ օգտագործելով STM32L100: 4 քայլ
Atollic TrueStudio- Միացրեք LED- ը ՝ սեղմելով կոճակը STM32L100- ի միջոցով. STM32- ի այս ձեռնարկում ես ձեզ կասեմ, թե ինչպես կարդալ STM32L100- ի GPIO կապը, այնպես որ այստեղ ես միայնակ կդարձնեմ Led փայլը սեղմելով կոճակը
AVR միկրոկոնտրոլեր: Ուլտրաձայնային հեռավորության սենսոր: HC-SR04 LCD NOKIA 5110: 4 քայլ
AVR միկրոկոնտրոլեր: Ուլտրաձայնային հեռավորության սենսոր: HC-SR04 LCD NOKIA 5110. Բարև բոլորին: Այս բաժնում ես պարզ էլեկտրոնային սարք եմ պատրաստում հեռավորությունը և այդ պարամետրերը ցուցադրվում են LCD NOKIA 5110-ում: Պարամետրերը ցուցադրվում են որպես դիագրամ և թվեր: Սարքը հիմնված է AVR ATMEG միկրոկառավարիչի վրա
AVR միկրոկոնտրոլեր: Իմպուլսի լայնության մոդուլյացիա: DC շարժիչի և LED լույսի ինտենսիվության վերահսկիչ. 6 քայլ
AVR միկրոկոնտրոլեր: Իմպուլսի լայնության մոդուլյացիա: DC շարժիչի և LED լույսի ինտենսիվության վերահսկիչ. Բարև բոլորին: Pulse Width Modulation (PWM) շատ տարածված տեխնիկա է հեռահաղորդակցության և էներգիայի կառավարման մեջ: այն սովորաբար օգտագործվում է էլեկտրական սարքի սնուցվող հզորությունը վերահսկելու համար ՝ լինի դա շարժիչ, LED, բարձրախոս և այլն: Հիմնականում դա մոդուլ է
Սեղմելով oldոդման դիսպենսեր գրիչ `6 քայլ
Սեղմելով oldոդման դիսպենսեր գրիչ. Սովորական սեղմող գրիչը վերածեք զոդիչ դիսպենսեր, յուրաքանչյուր սեղմումից մի փոքր զոդ է դուրս գալիս: Սա օգտվում է գրիչի մեխանիզմից, որն իրականում պտտվում է: Դուք դեռ կարող եք օգտագործել գրիչը որպես գրիչ: Ոգեշնչված ավելի պարզից (և ինչ -որ կերպ ավելի լավից)