Բովանդակություն:

Arduino - Պարբերական ընդհատում. 4 քայլ
Arduino - Պարբերական ընդհատում. 4 քայլ

Video: Arduino - Պարբերական ընդհատում. 4 քայլ

Video: Arduino - Պարբերական ընդհատում. 4 քայլ
Video: 7 Color E-Ink Display 2024, Նոյեմբեր
Anonim
Arduino - Պարբերական ընդհատում
Arduino - Պարբերական ընդհատում

Այս հրահանգը վերաբերում է Arduino ծրագրերում ժամանակի համար պարբերական ընդհատում օգտագործելուն: Սա քայլ է սկսնակ Arduino ծրագրավորողի համար, ով գիտի, որ Arduino- ն կարող է ավելին անել, բայց չգիտի, թե ինչպես դա իրականացնել:

Եթե կա աշխատանքի խնդիր, ես ենթադրում եմ, որ դուք օգտագործում եք մեկ կամ մի քանի ուշացման () գործառույթներ: Խնդիրն այն է, որ ազատվել ուշացման () գործառույթից (գործառույթներից) և փոխարինել ընդհատումը: Հետաձգման () գործառույթը ստիպում է Arduino- ին ոչինչ չանել, մինչ սպասում են ուշացման () ավարտին: Ընդհատման օգտագործումը թույլ է տալիս ձեր ծրագրին այլ բաներ անել ՝ սպասելով հետաձգման ավարտին: Սովորաբար գոյություն ունի չօգտագործված հսկայական ժամանակ, որը կարող է օգտագործվել այլ բաների համար `ուշացումն օգտագործելիս (): Ընդհատման օգտագործումը լուծում է այս խնդիրը:

Քայլ 1: Ընդհատել բեռնաթափողը

1. Ավելացրեք ընդհատումների կարգավորիչը ձեր ծրագրին: Պարզապես պատճենեք և տեղադրեք տեղադրման վերևում ();

const անստորագիր երկար TIMER0_COUNT = 500; // 500 մկվ ժմչփ ընդմիջում

// TIMER0 ընդհատում գործարկողի անկայուն bool time = false; ISR (TIMER0_COMPA_vect) {ստատիկ անստորագիր երկար հաշվարկ = 0; եթե (++ հաշվարկ> TIMER0_COUNT) {հաշվարկ = 0; ժամանակ = ճշմարիտ; // ժամանակը ճշգրիտ է սահմանվում յուրաքանչյուր TIMER0_COUNT մս.} // (ժամանակը պետք է մաքրվի հիմնական ռեժիմում)}

Քայլ 2: Սահմանեք պարբերական ժամանակի միջակայք

2. Սահմանեք ժամանակի միջակայքը: Այս սովորական խոզուկը վերադառնում է TIMER0 ընդհատմանը, որի վրա պետք է կրակվի յուրաքանչյուր 1 ֆունտ վրկ:

Ձեր «ընդմիջումը» TIMER0 ընդհատումների քանակն է, որոնք մշակվում են: Յուրաքանչյուր ընդմիջում m 1 վայրկյան է, այնպես որ դուք իսկապես սահմանում եք, թե քանի TIMER0 ընդմիջում կհաշվի ձեր ինտերվալը ակտիվացնելուց առաջ: IOW, սահմանեք TIMER0_COUNT փոփոխականը, այնքան միլիվայրկյան, որը ցանկանում եք սպասել: Օրինակ, օգտագործեք 500 -ը վայրկյանի կեսի համար: Օգտագործեք 3000 -ը 3 վայրկյան:

Քայլ 3: Ընդհատել սկզբնականացումը

3. Տեղադրման () մեթոդին ավելացրեք «TIMER0 սկզբնավորման» ծածկագիրը: Կրկին, պարզապես պատճենեք և տեղադրեք setup- ում ():

// *** TIMER0 նախաստորագրում ***

cli (); // անջատել բոլոր ընդհատումները TIMSK0 = 0; // անջատել ժամանակաչափը ցածր jitter- ի համար OCR0A = 0xBB; // կամայական ընդհատումների հաշվարկ TIMSK0 | = _BV (OCIE0A); // խոզուկ վերադառնալ ընդհատվող sei (); // անջատել նորից ընդհատումները

Քայլ 4: Որտեղ ավելացնել ձեր կոդը

4. Ձեր loop () մեթոդին ավելացրեք «ժամանակի ստուգում» ծածկագիրը: Պատճենեք և տեղադրեք օղակում ():

եթե (ժամանակ) {

ժամանակ = կեղծ; // ինչ -որ բան արա այստեղ}

«=ամանակ = կեղծ;» գիծը կարևոր է: Առանց այս տողի «ինչ -որ բան արա այստեղ» տողերը (ներ) ը կկատարվեին ամեն անգամ, երբ ծրագիրը կատարում է օղակ ():

Իհարկե, դուք փոխարինում եք ձեր սեփական գործունեությանը «այստեղ ինչ -որ բան անել» տողում: Սկսեք մի քանի տեքստ տպել կամ LED լուսարձակում:

Վերջացրել ես!

Խորհուրդ ենք տալիս: