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

AVR միկրոկոնտրոլեր: LED- ները փայլեցնում են ժմչփի միջոցով: Ersամաչափերի ընդհատումներ: Erամաչափ CTC ռեժիմ `6 քայլ
AVR միկրոկոնտրոլեր: LED- ները փայլեցնում են ժմչփի միջոցով: Ersամաչափերի ընդհատումներ: Erամաչափ CTC ռեժիմ `6 քայլ

Video: AVR միկրոկոնտրոլեր: LED- ները փայլեցնում են ժմչփի միջոցով: Ersամաչափերի ընդհատումներ: Erամաչափ CTC ռեժիմ `6 քայլ

Video: AVR միկրոկոնտրոլեր: LED- ները փայլեցնում են ժմչփի միջոցով: Ersամաչափերի ընդհատումներ: Erամաչափ CTC ռեժիմ `6 քայլ
Video: Blink LED Using AVR Atmega32 Microcontroller 2024, Նոյեմբեր
Anonim
Image
Image

Ողջույն բոլորին!

Ersամաչափերը կարևոր հասկացություն են էլեկտրոնիկայի ոլորտում: Յուրաքանչյուր էլեկտրոնային բաղադրիչ աշխատում է ժամանակի վրա: Այս ժամանակային բազան օգնում է բոլոր աշխատանքները համաժամեցնել: Բոլոր միկրոկոնտրոլերներն աշխատում են ժամացույցի որոշակի կանխորոշված հաճախականությամբ, նրանք բոլորն ունեն ժամաչափ սահմանելու դրույթ: AVR- ն կարող է պարծենալ, որ ունի շատ ճշգրիտ, ճշգրիտ և հուսալի ժամաչափ: Այն առաջարկում է բազմաթիվ հնարավորություններ դրանում ՝ դրանով իսկ դարձնելով այն լայն թեմա: Լավագույնն այն է, որ ժամաչափը ամբողջովին անկախ է պրոցեսորից: Այսպիսով, այն աշխատում է պրոցեսորին զուգահեռ և չկա պրոցեսորի միջամտություն, ինչը ժամաչափը դարձնում է բավականին ճշգրիտ: Այս բաժնում ես բացատրում եմ AVR ժամաչափերի հիմնական հասկացությունները: Ես գրում եմ պարզ ծրագիր C կոդով ՝ LED լուսաշողերը կառավարելու համար ՝ օգտագործելով ժամաչափեր:

Քայլ 1: Նկարագրություն

Խնդրի հայտարարություն 1. Եկեք առաջին լուսարձակը լուսավորենք (կանաչ) յուրաքանչյուր 50 Տ
Խնդրի հայտարարություն 1. Եկեք առաջին լուսարձակը լուսավորենք (կանաչ) յուրաքանչյուր 50 Տ

ATMega328- ում կա երեք տեսակի ժամաչափ

Erամաչափ/Counter0 (TC0) - ընդհանուր նշանակության 8 -բիթ ժամաչափ/հաշվիչ մոդուլ է ՝ երկու անկախ OutputCompare միավորով և PWM աջակցությամբ;

Erամաչափ/Հաշվիչ 1 (TC1) - 16 -բիթանոց erամաչափ/Հաշվիչ միավորը թույլ է տալիս ծրագրի կատարման ճշգրիտ ժամկետները (իրադարձությունների կառավարում), ալիքների առաջացման և ազդանշանների ժամանակաչափի չափումը

Erամաչափ/Counter2 (TC2) -ընդհանուր նպատակի, ալիքի, 8 -բիթանոց ժամաչափի/հաշվիչի մոդուլ է PWM- ով և ասինխրոն գործողությամբ;

Քայլ 2: Խնդրի հայտարարություն 1. Եկեք լուսավորենք առաջին LED- ը (կանաչ) յուրաքանչյուր 50 Տ

Խնդրի հայտարարություն 1. Եկեք առաջին լուսարձակը լուսավորենք (կանաչ) յուրաքանչյուր 50 Տ
Խնդրի հայտարարություն 1. Եկեք առաջին լուսարձակը լուսավորենք (կանաչ) յուրաքանչյուր 50 Տ
Խնդրի հայտարարություն 1. Եկեք առաջին լուսարձակը լուսավորենք (կանաչ) յուրաքանչյուր 50 Տ
Խնդրի հայտարարություն 1. Եկեք առաջին լուսարձակը լուսավորենք (կանաչ) յուրաքանչյուր 50 Տ

Մեթոդաբանությունը:

- օգտագործելով Timer0 նախալեզվիչ `բարձր հաճախականության էլեկտրական ազդանշանը ավելի ցածր հաճախականության իջեցնելու համար` ամբողջ թվերի բաժանմամբ.

- ընդմիջում օգտագործելով ամեն անգամ, երբ Timer0- ը գերբեռնվում է.

Erամաչափ 0 (8 բիթ) այն հաշվում է 0 -ից 255 -ից հետո, դրանք լցվում են, այս արժեքը փոխվում է յուրաքանչյուր ժամացույցի զարկերակին:

F_CPU = 16 ՄՀց. Ockամացույցի ժամանակահատված = 1000 մ / 16000000 Հց = 0.0000625 մգ

Erամաչափի հաշվարկ = (Պահանջվող ուշացում / ժամացույցի ժամանակաշրջան) -1 = (50 մգ / 0.0000625 մգ) = 799999

Theամացույցն արդեն թակել է 799999 անգամ, ինչը հետաձգում է ընդամենը 50 ms:

Մենք կարող ենք օգտագործել հաճախականությունների բաժանման տեխնիկան, որը կոչվում է նախալայնացում `ժամաչափի քանակը նվազեցնելու համար: AVR- ն մեզ առաջարկում է նախընտրական սակարկիչի հետևյալ արժեքները `8, 64, 256 և 1024: Տե՛ս աղյուսակը ամփոփում է տարբեր prescaler- ների օգտագործման արդյունքները:

Հաշվիչի արժեքը միշտ պետք է լինի ամբողջ թիվ: Եկեք ընտրենք նախնական սերիա 256:

Միկրոկոնտրոլերների մեծ մասում կա մի բան, որը կոչվում է ընդհատում: Այս ընդհատումը կարող է արձակվել, երբ որոշակի պայմաններ են բավարարվում: Այժմ, երբ ընդհատում է արձակվում, AVR- ն դադարում և պահպանում է հիմնական ռեժիմի կատարումը, հետևում է ընդհատման զանգին (կատարելով հատուկ ռեժիմ, որը կոչվում է «Ընդհատվող ծառայության ռեժիմ», ISR) և երբ դա արվի, վերադառնում է հիմնական առօրյան և շարունակում է այն կատարել:

Քանի որ պահանջվող ուշացումը (50 մգ) ավելի մեծ է, քան հնարավոր առավելագույն ուշացումը `4, 096 մմ = 1000 մ / 62500 Հց * 256, ակնհայտ է, որ ժամաչափը կհորդի: Եվ ամեն անգամ, երբ ժմչփը գերհոգնում է, ընդհատում է արձակվում:

Քանի՞ անգամ պետք է ընդհատումը կրակել:

50ms / 4.096ms = 3125 /256 = 12.207 Եթե ժամաչափը 12 անգամ թռիչք կատարեր, 12 * 4.096ms = 49.152ms կանցներ: 13 -րդ կրկնության դեպքում մեզ անհրաժեշտ է 50 մգ ուշացում `49.152 մմ = 0.848 մգ:

62500 Հց հաճախականությամբ (նախնական չափիչ = 256), յուրաքանչյուր տիզ տևում է 0,016 մկմ: Այսպիսով, 0.848 մ ուշացում հասնելու համար կպահանջվի 0.848 մ / 0.016 մ = 53 տիզ: Այսպիսով, 13 -րդ կրկնում, մենք թույլ ենք տալիս միայն ժամաչափը հաշվել մինչև 53, այնուհետև այն վերականգնել:

Initialize Timer0/Counter (տես նկարը)

TCCR0B | = (1 << CS02] // ժամանակաչափ սահմանել նախալեզվիչով = 256 TCNT0 = 0 // սկզբնական հաշվիչ TIMSK0 | = (1 << TOIE0] // միացնել overflow ընդհատման sei () // միացնել գլոբալ ընդհատումները tot_overflow = 0 // սկզբնավորել արտահոսքի հաշվիչի փոփոխականը

Քայլ 3: Խնդրի հայտարարություն 2. Եկեք յուրաքանչյուր 1 վայրկյանը լուսավորենք երկրորդ LED- ը (կապույտ)

Խնդիրի հայտարարություն 2. Եկեք լուսավորենք երկրորդ LED- ը (կապույտ) յուրաքանչյուր 1 վայրկյանում
Խնդիրի հայտարարություն 2. Եկեք լուսավորենք երկրորդ LED- ը (կապույտ) յուրաքանչյուր 1 վայրկյանում
Խնդիրի հայտարարություն 2. Եկեք լուսավորենք երկրորդ LED- ը (կապույտ) յուրաքանչյուր 1 վայրկյանում
Խնդիրի հայտարարություն 2. Եկեք լուսավորենք երկրորդ LED- ը (կապույտ) յուրաքանչյուր 1 վայրկյանում
Խնդիրի հայտարարություն 2. Եկեք լուսավորենք երկրորդ LED- ը (կապույտ) յուրաքանչյուր 1 վայրկյանում
Խնդիրի հայտարարություն 2. Եկեք լուսավորենք երկրորդ LED- ը (կապույտ) յուրաքանչյուր 1 վայրկյանում

Մեթոդաբանությունը:

- օգտագործելով բարձրաչափ հաճախականությամբ էլեկտրական ազդանշանը ավելի ցածր հաճախականության ՝ ամբողջ թվերի բաժանման միջոցով Timer1 նախալեզվիչ օգտագործելու համար.

- Clear Timer on Compare (CTC) ռեժիմի օգտագործում;

- օգտագործելով ընդհատումներ CTC ռեժիմով;

Erամաչափ 1 (16 բիթ) այն հաշվում է 0 -ից 65534 -ից հետո, դրանք վարարում են: Այս արժեքը փոխվում է յուրաքանչյուր ժամացույցի զարկերակին:

F_CPU = 16MHz: ockամացույցի ժամանակաշրջան = 1000ms / 16000000Hz = 0.0000625ms imամաչափի հաշվարկ = (Պահանջվող ուշացում / ժամացույցի ժամանակաշրջան) -1 = (1000ms / 0.0000625ms) = 15999999

Theամացույցն արդեն 15999999 անգամ թակել է ՝ 1 վայրկյան ուշացում տալու համար:

Մենք կարող ենք օգտագործել հաճախականությունների բաժանման տեխնիկան, որը կոչվում է նախալայնացում `ժամաչափի քանակը նվազեցնելու համար: AVR- ն մեզ առաջարկում է նախընտրական սակարկիչի հետևյալ արժեքները `8, 64, 256 և 1024: Տե՛ս աղյուսակը ամփոփում է տարբեր prescaler- ների օգտագործման արդյունքները: Հաշվիչի արժեքը միշտ պետք է լինի ամբողջ թիվ: Եկեք ընտրենք նախնական համար 256:

Համեմատել (CTC) ռեժիմում Clear timer- ում հաշվիչի բանաձևը շահարկելու համար օգտագործվում են OCR1A կամ ICR1 գրանցամատյանները: CTC ռեժիմում հաշվիչը մաքրվում է զրոյի, երբ հաշվիչի արժեքը (TCNT1) համընկնում է կամ OCR1A- ի կամ ICR1- ի հետ: OCR1A- ն կամ ICR1- ը սահմանում են հաշվիչի հիմնական արժեքը, հետևաբար նաև դրա լուծումը: Այս ռեժիմը թույլ է տալիս ավելի մեծ վերահսկողություն համեմատել համընկնումների ելքային հաճախականության հետ: Այն նաև պարզեցնում է արտաքին իրադարձությունների հաշվման աշխատանքը: Մենք պետք է AVR- ին ասենք, որ վերականգնի erամաչափ 1/Հաշվիչը, երբ դրա արժեքը հասնի 62500 արժեքի, դրանով իսկ հասնելով 1 վ ուշացման:

Initialize Timer1/Counter (տես նկարը)

TCCR1B | = (1 << WGM12] | (1 << CS12) // կարգավորել ժամանակաչափ նախալեզվիչով = 256 և CTC ռեժիմով TCNT1 = 0 // սկզբնական հաշվիչ TIMSK1 | = (1 << OCIE1A) // միացնել համեմատել ընդհատումը OCR1A = 62500 // սկզբնական համեմատել արժեքը

Քայլ 4. Խնդրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում

Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում
Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում
Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում
Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում
Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում
Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում
Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում
Խնդիրի հայտարարություն 3. Եկեք լուսավորենք երրորդ LED- ը (կարմիր) յուրաքանչյուր 16ms- ում

Մեթոդաբանությունը:

- օգտագործելով բարձրաչափ հաճախականությամբ էլեկտրական ազդանշանը ավելի ցածր հաճախականության `ամբողջ թվերի բաժանմամբ` Timer2 նախալեզվիչ սարքի օգտագործմամբ.

- Clear Timer on Compare (CTC) ռեժիմի օգտագործում;

- օգտագործելով ապարատային CTC ռեժիմ ՝ առանց ընդհատումների.

Timer2 (8 բիթ) այն հաշվում է 0 -ից մինչև 255 -ը դրանից հետո, դրանք լցվում են: Այս արժեքը փոխվում է յուրաքանչյուր ժամացույցի զարկերակին:

F_CPU = 16 ՄՀց. Ockամացույցի ժամանակահատված = 1000 մ / 16000000 Հց = 0.0000625 մգ

Erամաչափի հաշվարկ = (Պահանջվող ուշացում / ժամացույցի ժամանակաշրջան) -1 = (16 մգ / 0.0000625 մգ) = 255999

Theամացույցն արդեն 255999 անգամ թակել է ՝ 16 մգ ուշացում տալու համար:

Տես աղյուսակը, որն ամփոփում է տարբեր նախնական սակարկիչների օգտագործման արդյունքները: Հաշվիչի արժեքը միշտ պետք է լինի ամբողջ թիվ: Եկեք ընտրենք նախնական սալիկ 1024:

CTC ռեժիմում հաշվիչը մաքրվում է զրոյի, երբ հաշվիչի արժեքը (TCNT2) համընկնում է կամ OCR2A- ի կամ ICR2- ի հետ: Pin PB3- ը նաև TIMER2 - OC2A- ի արտադրանքի համեմատման քորոցն է (տես դիագրամ):

Erամաչափ/Counter2 Control Register A - TCCR2A Bit 7: 6 - COM2A1: 0 - Համեմատեք A միավորի համադրման ելքային ռեժիմը: Քանի որ մենք պետք է միացնենք LED- ը, մենք ընտրում ենք տարբերակը. Toggle OC2A on Compare Match Ամեն անգամ, երբ համընկնում է տեղի ունենում, OC2A կապը ինքնաբերաբար փոխարկվում է: Կարիք չկա ստուգել դրոշի որևէ բիթ, կարիք չկա ուշադրություն դարձնել որևէ ընդհատման:

Initialize Timer2/Counter

TCCR2A | = (1 << COM2A0] | (1 << WGM21) // կարգավորել ժմչփ OC2A կապը միացման ռեժիմում և CTC ռեժիմում TCCR2B | = (1 << CS22] | (1 << CS21) | (1 << CS20) // կարգավորել ժամանակաչափ նախալեզվիչով = 1024 TCNT2 = 0 // սկզբնական հաշվիչ OCR2A = 250 // սկզբնական համեմատել արժեքը

Քայլ 5. Codeրագրի համար ծածկագիր գրելը C. Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ

Գ. Codeրագրի համար ծածկագիր գրել C. Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ
Գ. Codeրագրի համար ծածկագիր գրել C. Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ
Գ. Codeրագրի համար ծածկագիր գրել C. Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ
Գ. Codeրագրի համար ծածկագիր գրել C. Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ

AVR միկրոկառավարիչի կիրառումը C կոդի մեջ գրելն ու կառուցելը `օգտագործելով ինտեգրված զարգացման պլատֆորմը` Atmel Studio:

F_CPU- ն սահմանում է ժամացույցի հաճախականությունը Հերցում և տարածված է avr-libc գրադարանից օգտվող ծրագրերում: Այս դեպքում այն օգտագործվում է հետաձգման ռեժիմի կողմից `որոշելու, թե ինչպես հաշվարկել ժամանակի ուշացումները:

#ifndef F_CPU

#սահմանել F_CPU 16000000UL // պատմող վերահսկիչ բյուրեղային հաճախականություն (16 ՄՀց AVR ATMega328P) #endif

#include // header ՝ կապերի վրա տվյալների հոսքի վերահսկումը միացնելու համար: Սահմանում է կապում, նավահանգիստներ և այլն:

Առաջին ներառող ֆայլը avr-libc- ի մի մասն է և կօգտագործվի գրեթե ցանկացած AVR նախագծում, որի վրա աշխատում եք: io.h- ն կորոշի ձեր կողմից օգտագործվող պրոցեսորը (դրա համար էլ կազմման ժամանակ նշում եք մասը) և իր հերթին կներառի համապատասխան IO սահմանման վերնագիրը այն չիպի համար, որը մենք օգտագործում ենք: Այն պարզապես սահմանում է ձեր բոլոր կապումների, նավահանգիստների, հատուկ գրանցամատյանների և այլնի հաստատունները:

#include // header ընդհատումը միացնելու համար

անկայուն uint8_t tot_overflow; // գլոբալ փոփոխական `հոսքերի քանակը հաշվելու համար

Խնդրի ձևակերպման մեթոդաբանություն. Flash առաջին (կանաչ) LED յուրաքանչյուր 50 ms

- օգտագործելով Timer0 նախալեզվիչ `բարձր հաճախականության էլեկտրական ազդանշանը ավելի ցածր հաճախականության իջեցնելու համար` ամբողջ թվերի բաժանմամբ.

- ընդմիջում օգտագործելով ամեն անգամ, երբ Timer0- ը գերբեռնվում է.

void timer0_init () // նախաստորագրել timer0, ընդհատում և փոփոխական

{TCCR0B | = (1 << CS02); // տեղադրեք ժամանակաչափ նախալեզվիչով = 256 TCNT0 = 0; // սկզբնական հաշվիչ TIMSK0 | = (1 << TOIE0]; // միացնել overflow nterrupt sei (); // միացնել գլոբալ ընդհատումները tot_overflow = 0; // սկզբնավորել արտահոսքի հաշվիչի փոփոխականը}

Խնդրի ձևակերպման մեթոդաբանություն. Flash երկրորդ LED (կապույտ) յուրաքանչյուր 1 վայրկյանում

- օգտագործելով բարձրաչափ հաճախականությամբ էլեկտրական ազդանշանը ավելի ցածր հաճախականության ՝ ամբողջ թվերի բաժանման միջոցով Timer1 նախալեզվիչ օգտագործելու համար.

- Clear Timer on Compare (CTC) ռեժիմի օգտագործում;

- օգտագործելով ընդհատումներ CTC ռեժիմով;

void timer1_init () // սկզբնականացնել ժամաչափ 1, ընդհատել և փոփոխել {TCCR1B | = (1 << WGM12) | (1 << CS12); // կարգավորեք ժամանակաչափ նախալեզվիչով = 256 և CTC ռեժիմով TCNT1 = 0; // սկզբնական հաշվիչ OCR1A = 62500; // սկզբնականացնել համեմատել արժեքը TIMSK1 | = (1 << OCIE1A); // միացնել համեմատության ընդհատումը}

Խնդրի ձևակերպման մեթոդաբանություն. Flashրամեկուսացման երրորդ LED (կարմիր) յուրաքանչյուր 16ms- ում

- օգտագործելով Timer2 նախալեզվիչ `բարձր հաճախականության էլեկտրական ազդանշանը ավելի ցածր հաճախականության իջեցնելու համար` ամբողջ թվերի բաժանմամբ.

- Clear Timer on Compare (CTC) ռեժիմի օգտագործում;

- օգտագործելով ապարատային CTC ռեժիմ ՝ առանց ընդհատումների.

void timer2_init () // նախաստորագրել timer2 {TCCR2A | = (1 << COM2A0] | (1 << WGM21); // սահմանել ժմչփ OC2A կապը միացման ռեժիմում և CTC ռեժիմում TCCR2B | = (1 << CS22] | (1 << CS21) | (1 << CS20); // տեղադրեք ժամանակաչափ նախալեզվիչով = 1024 TCNT2 = 0; // սկզբնական հաշվիչ OCR2A = 250; // սկզբնական համեմատել արժեքը}

TIMER0 գերհոսքի ընդհատման ծառայության ռեժիմը կոչվում է ամեն անգամ, երբ TCNT0- ը դուրս է գալիս.

ISR (TIMER0_OVF_vect)

{tot_overflow ++; // հետևել հեղեղումների քանակին}

Այս ISR- ն արձակվում է ամեն անգամ, երբ հանդիպում է տեղի ունենում, անջատումն առաջնորդվում է այստեղ.

ISR (TIMER1_COMPA_vect) {PORTC ^= (1 << 1); // անջատել led- ը այստեղ}

int հիմնական (անվավեր)

{DDRB | = (1 << 0); // միացնել 1 (կանաչ) led դեպի pin PB0 DDRC | = (1 << 1); // միացնել 2 (կապույտ) led to pin PC1 DDRB | = (1 << 3); // միացրեք 3 (կարմիր) հանգեցրեց PB3 (OC2A) timer0_init () կապին // նախաստորագրել timer0 timer1_init (); // սկզբնականացնել timer1 timer2_init (); // սկզբնականացնել ժմչփը 2 իսկ (1) // հանգույց ընդմիշտ {

Եթե Timer0- ը 12 անգամ թռիչք կատարեր, 12 * 4.096ms = 49.152ms կանցներ: 13 -րդ կրկնության դեպքում մեզ անհրաժեշտ է 50 մգ ուշացում `49.152 մմ = 0.848 մգ: Այսպիսով, 13 -րդ կրկնում, մենք թույլ ենք տալիս միայն ժամաչափը հաշվել մինչև 53, այնուհետև այն վերականգնել:

եթե (tot_overflow> = 12) // ստուգեք, եթե ոչ: of overflows = 12 ՈEՇԱԴՐՈԹՅՈՆ. '> =' օգտագործվում է

{if (TCNT0> = 53) // ստուգեք ՝ ժամաչափի թիվը հասնում է 53 -ի {PORTB ^= (1 << 0); // միացնում է led TCNT0 = 0; // զրոյական հաշվիչ tot_overflow = 0; // վերակայել արտահոսքի հաշվիչը}}}}

HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ բեռնելը

մուտքագրեք DOS հուշման պատուհանում հրամանը.

avrdude –c [ծրագրավորողի անունը] –p m328p –u –U flash: w: [ձեր վեցանկյուն ֆայլի անունը] Իմ դեպքում դա է ՝ avrdude –c ISPProgv1 –p m328p –u –U flash: w: Timers.hex

Այս հրամանը գրում է վեցանկյուն ֆայլ միկրոկառավարիչի հիշողության մեջ: Դիտեք տեսանյութը միկրոկառավարիչի ֆլեշ հիշողության այրման մանրամասն նկարագրությամբ.

Միկրոկառավարիչի ֆլեշ հիշողությունը այրվում է…

Լավ! Այժմ, միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան: Եկեք ստուգենք այն:

Քայլ 6: Էլեկտրական շղթայի պատրաստում

Էլեկտրական շղթայի պատրաստում
Էլեկտրական շղթայի պատրաստում
Էլեկտրական շղթայի պատրաստում
Էլեկտրական շղթայի պատրաստում
Էլեկտրական շղթայի պատրաստում
Էլեկտրական շղթայի պատրաստում

Միացրեք բաղադրիչները սխեմատիկ սխեմայի համաձայն:

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