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

AVR միկրոկառավարիչի ապահովիչների բիտերի կազմաձևում: Միկրոկոնտրոլերի ֆլեշ հիշողության մեջ LED թարթման ծրագրի ստեղծում և բեռնում. 5 քայլ
AVR միկրոկառավարիչի ապահովիչների բիտերի կազմաձևում: Միկրոկոնտրոլերի ֆլեշ հիշողության մեջ LED թարթման ծրագրի ստեղծում և բեռնում. 5 քայլ

Video: AVR միկրոկառավարիչի ապահովիչների բիտերի կազմաձևում: Միկրոկոնտրոլերի ֆլեշ հիշողության մեջ LED թարթման ծրագրի ստեղծում և բեռնում. 5 քայլ

Video: AVR միկրոկառավարիչի ապահովիչների բիտերի կազմաձևում: Միկրոկոնտրոլերի ֆլեշ հիշողության մեջ LED թարթման ծրագրի ստեղծում և բեռնում. 5 քայլ
Video: LDmicro 22: Arduino տախտակներ AVRDUDESS- ով (միկրոկառավարիչների ծրագրավորում LDmicro- ով) 2024, Հունիսի
Anonim
Image
Image

Այս դեպքում մենք կստեղծենք պարզ ծրագիր C կոդով և կայրենք այն միկրոկոնտրոլերի հիշողության մեջ: Մենք կգրենք մեր սեփական ծրագիրը և կկազմենք վեցանկյուն ֆայլ ՝ օգտագործելով Atmel Studio- ն որպես ինտեգրված զարգացման հարթակ: Մենք կկարգավորենք ապահովիչների բիթերը և վեցանկյուն ֆայլ կբեռնենք AVR ATMega328P միկրոկառավարիչի հիշողության մեջ ՝ օգտագործելով մեր սեփական ծրագրավորողը և ծրագրաշարը ՝ AVRDUDE:

AVRDUDE - դա ծրագիր է Atmel- ի AVR միկրոկոնտրոլերների չիպային հիշողությունները ներբեռնելու և վերբեռնելու համար: Այն կարող է ծրագրավորել Flash- ը և EEPROM- ը, իսկ սերիական ծրագրավորման արձանագրությամբ ապահովված վայրերում կարող է ծրագրավորել ապահովիչների և կողպման բիթեր:

Քայլ 1. Գրեք ծրագիր և կազմեք Hex ֆայլը ՝ օգտագործելով Atmel Studio- ն

Գրելու ծրագիր և կազմեք վեցանկյուն ֆայլ ՝ օգտագործելով Atmel Studio- ն
Գրելու ծրագիր և կազմեք վեցանկյուն ֆայլ ՝ օգտագործելով Atmel Studio- ն
Գրելու ծրագիր և կազմեք վեցանկյուն ֆայլ ՝ օգտագործելով Atmel Studio- ն
Գրելու ծրագիր և կազմեք վեցանկյուն ֆայլ ՝ օգտագործելով Atmel Studio- ն

Եթե դուք չունեք Atmel Studio, դուք պետք է ներբեռնեք և տեղադրեք այն ՝

Այս նախագիծը կօգտագործի C- ն, ուստի ընտրեք GCC C Executable Project տարբերակը կաղապարների ցանկից ՝ մերկ ոսկորների կատարելիք նախագիծ ստեղծելու համար:

Հաջորդը, անհրաժեշտ է նշել, թե որ սարքի համար է նախագիծը մշակվելու: Այս նախագիծը մշակվելու է AVR ATMega328P միկրոկառավարիչի համար:

Մուտքագրեք ծրագրի ծածկագիրը Atmel Studio- ի հիմնական աղբյուրի խմբագրի տարածքում: Հիմնական աղբյուրի խմբագիր - Այս պատուհանը ընթացիկ նախագծի հիմնական ֆայլերի հիմնական խմբագիրն է: Խմբագիրն ունի ուղղագրության ստուգում և ավտոմատ լրացման հնարավորություններ:

1. Մենք պետք է կազմողին ասենք, թե ինչ արագությամբ է աշխատում մեր չիպը, որ կարող է ճիշտ հաշվարկել ուշացումները:

#ifndef F_CPU

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

2. Մենք ներառում ենք նախաբանը, որտեղ մենք տեղադրում ենք մեր ներառած տեղեկատվությունը այլ ֆայլերից, որը սահմանում է գլոբալ փոփոխականներն ու գործառույթները:

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

#include // header ծրագրում հետաձգման գործառույթը միացնելու համար

3. Նախաբանից հետո գալիս է հիմնական () գործառույթը:

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

Հիմնական () գործառույթը եզակի է և առանձնացված է մյուս բոլոր գործառույթներից: Յուրաքանչյուր C ծրագիր պետք է ունենա մեկ հիմնական () գործառույթ: Main () - ն այն վայրն է, որտեղ AVR- ն սկսում է կատարել ձեր կոդը, երբ առաջին անգամ միանում է հոսանքին, ուստի դա ծրագրի մուտքի կետն է:

4. Տեղադրեք PORTB- ի 0 -ի կապը որպես ելք:

DDRB = 0b00000001; // Որպես ելք սահմանեք PORTB1- ը

Մենք դա անում ենք ՝ տվյալների ուղղման գրանցամատյանում երկուական թիվ գրելով: Տվյալների ուղղության գրանցամատյանը B- ն մեզ թույլ է տալիս մուտքագրել կամ ելնել գրանցամատյան B- ի բիթերը: 1 -ը գրելը դրանք դարձնում է ելքային, իսկ 0 -ը `մուտքային: Քանի որ մենք LED- ն ամրացնում ենք որպես ելք, մենք գրում ենք երկուական թիվ ՝ դարձնելով PORT B- ի 0 -ի քորոցը որպես ելք:

5. Օղակ:

մինչդեռ (1) {

Այս հայտարարությունը հանգույց է, որը հաճախ կոչվում է հիմնական հանգույց կամ իրադարձության օղակ: Այս ծածկագիրը միշտ ճշմարիտ է. հետևաբար, այն անընդհատ կատարում է անսահման օղակում: Այն երբեք չի դադարում: Հետևաբար, LED- ն թարթում է անսահմանության մեջ, եթե միկրոկառավարիչից հոսանքը անջատված չէ կամ ծածկագիրը ջնջված չէ ծրագրի հիշողությունից:

6. Միացրեք PB0 նավահանգստին ամրացված LED- ը

PORTB = 0b00000001; // միացնում է PB0 նավահանգստին ամրացված LED- ը

Այս գիծը, տալիս է 1 -ը PortB- ի PB0- ին: PORTB- ը սարքավորումների գրանցամատյան է AVR չիպի վրա, որը պարունակում է 8 կապ, PB7-PB0, ձախից աջ: 1 -ը վերջում դնելը 1 -ին է տալիս PB0- ին; սա սահմանում է PB0 բարձր, ինչը միացնում է այն: Հետեւաբար, PB0 կապում ամրացված LED- ը կմիանա եւ կլուսավորվի:

7. Հետաձգում

_ ուշացում (1000); // ստեղծում է 1 վայրկյան ուշացում

Այս հայտարարությունը ստեղծում է 1 վայրկյան ուշացում, այնպես որ LED- ն միանում և մնում է ուղիղ 1 վայրկյան:

8. Անջատեք բոլոր B կապերը, ներառյալ PB0- ն

PORTB = 0b00000000; // Անջատում է բոլոր B կապերը, ներառյալ PB0- ն

Այս գիծն անջատում է Port B- ի բոլոր 8 կապումներն այնպես, որ նույնիսկ PB0- ն անջատված է, ուստի LED- ն անջատվում է:

9. Հերթական ուշացում

_ ուշացում (1000); // ստեղծում է ևս 1 վայրկյան ուշացում

Այն անջատվում է ուղիղ 1 վայրկյան առաջ, նախքան օղակը նորից սկսելն ու հանդիպել գծին, որը այն նորից միացնում է ՝ կրկնելով գործընթացը ամբողջ ընթացքում: Դա տեղի է ունենում անսահման, այնպես որ LED- ն անընդհատ թարթում և անջատում է:

10. Վերադարձի քաղվածք

}

վերադարձ (0); // այս գիծը իրականում երբեք չի հասնում}

Մեր ծածկագրի վերջին տողը վերադարձի (0) հայտարարությունն է: Չնայած այս կոդը երբեք չի կատարվում, քանի որ կա անսահման մի հանգույց, որը երբեք չի ավարտվում, բայց այն ծրագրերի համար, որոնք աշխատում են աշխատասեղան համակարգիչներով, օպերացիոն համակարգի համար կարևոր է իմանալ ՝ դրանք ճիշտ են աշխատում, թե ոչ: Այդ իսկ պատճառով, GCC- ն ՝ մեր կազմողը, ցանկանում է, որ յուրաքանչյուր հիմնական () ավարտվի վերադարձի կոդով: Վերադարձի կոդերն ավելորդ են AVR կոդի համար, որն աշխատում է ցանկացած օժանդակ օպերացիոն համակարգի անկախ գործունեության վրա. այնուամենայնիվ, կազմողը նախազգուշացում կանի, եթե հիմնականը չվերջացնեք վերադարձով ():

Վերջնական քայլը նախագծի կառուցումն է: Դա նշանակում է հավաքել և վերջապես կապել բոլոր օբյեկտային ֆայլերը `գործարկվող ֆայլ (.hex) ֆայլ ստեղծելու համար: Այս վեցանկյուն ֆայլը գեներացվում է Debug պանակի ներսում, որը գտնվում է Project պանակի ներսում: Այս վեցանկյուն ֆայլը պատրաստ է բեռնվել միկրոկառավարիչի չիպի մեջ:

Քայլ 2. Միկրոհսկիչի ապահովիչների բիթերի կանխադրված կազմաձևի փոփոխություն

Միկրոհսկիչի ապահովիչների բիթերի կանխադրված կազմաձևի փոփոխում
Միկրոհսկիչի ապահովիչների բիթերի կանխադրված կազմաձևի փոփոխում
Միկրոհսկիչի ապահովիչների բիթերի կանխադրված կազմաձևի փոփոխում
Միկրոհսկիչի ապահովիչների բիթերի կանխադրված կազմաձևի փոփոխում
Միկրոհսկիչի ապահովիչների բիթերի կանխադրված կազմաձևի փոփոխում
Միկրոհսկիչի ապահովիչների բիթերի կանխադրված կազմաձևի փոփոխում

Կարևոր է հիշել, որ ապահովիչների որոշ հատվածներ կարող են օգտագործվել չիպի որոշ կողմերի կողպման համար և կարող են պոտենցիալ աղյուսավորել այն (դարձնել այն անօգտագործելի):

Ընդհանուր առմամբ կա 19 ապահովիչի բիթ, որոնք օգտագործվում են ATmega328P- ում, և դրանք բաժանված են երեք տարբեր ապահովիչների բայթերի: Ապահովիչի բիթերից երեքը պարունակվում են «Երկարաձգված ապահովիչների բայթում», ութը `« ապահովիչների բարձր բայթերում », և ևս ութը` «ապահովիչների ցածր բայթերում»: Կա նաև չորրորդ բայթ, որն օգտագործվում է կողպեքի բիթերը ծրագրավորելու համար:

Յուրաքանչյուր բայթ 8 բիթ է, և յուրաքանչյուր բիթ առանձին պարամետր կամ դրոշակ է: Երբ խոսում ենք տեղադրման, այլ ոչ թե կարգավորման, ծրագրավորված, ոչ ծրագրավորված ապահովիչների մասին, մենք իրականում օգտագործում ենք երկուական: 1 նշանակում է ոչ սահմանված, ոչ ծրագրավորված և զրո նշանակում է սահմանված, ծրագրավորված: Ապահովիչների ծրագրավորման ժամանակ կարող եք օգտագործել երկուական նշումներ կամ ավելի հաճախ վեցանկյուն նշումներ:

ATmega 328P չիպսերն ունեն ներկառուցված RC տատանում, որն ունի 8 ՄՀց հաճախականություն: Այս չիպով առաքվում են նոր չիպսեր ՝ որպես ժամացույցի աղբյուր և CKDIV8 ապահովիչը ակտիվ, որի արդյունքում ստացվում է 1 ՄՀց համակարգի ժամացույց: Գործարկման ժամանակը սահմանվում է առավելագույնի և ընդմիջման ժամանակահատվածը միացված է:

Նոր ATMega 328P չիպերը հիմնականում ունեն ապահովիչների հետևյալ կարգավորումները

Lowածր ապահովիչ = 0x62 (0b01100010)

Բարձր ապահովիչ = 0xD9 (0b11011001)

Ընդլայնված ապահովիչ = 0xFF (0b11111111)

Մենք կօգտագործենք ATmega 328 չիպ ՝ 16 ՄՀց արտաքին բյուրեղով: Հետևաբար, մենք պետք է համապատասխանաբար ծրագրավորենք «Ապահովիչի ցածր բայթ» բիթերը:

1. 3-0 բիթերը վերահսկում են տատանումների ընտրությունը, իսկ 0010-ի կանխադրված կարգավորումն այն է, որ մենք օգտագործում ենք չափագրված ներքին RC տատանում, որը մենք չենք ցանկանում: Մենք ցանկանում ենք, որ ցածր էներգիայի բյուրեղային տատանումների աշխատանքը սկսի 8.0-ից մինչև 16.0 ՄՀց, այնպես որ 3-1 բիթերը (CKSEL [3: 1]) պետք է սահմանվեն 111-ի:

2. 5-րդ և 4-րդ բիթերը վերահսկում են գործարկման ժամանակը, իսկ 10-ի կանխադրված պարամետրը նախատեսված է էներգիայի անջատումից և էներգախնայողությունից վեց ժամացույցի մեկնարկի հետաձգման համար, գումարած լրացուցիչ 14 ժամացույցի ցիկլի գործարկման հետաձգումը գումարած վերակայումից 65 միլիվայրկյան:

Powerածր էներգիայի բյուրեղային տատանումների համար ապահով լինելու համար մենք ցանկանում ենք, որ հնարավոր առավելագույն ձգձգումը լինի էներգիայի անջատումից և էներգախնայողությունից 16 000 ժամացույցի ցիկլ, այնպես որ SUT [1]-ը պետք է սահմանվի 1-ի, գումարած գործարկման լրացուցիչ հետաձգում: 14 ժամացույցի ցիկլ գումարած 65 միլիվայրկյան վերակայումից, այնպես որ SUT [0] - ը պետք է սահմանվի 1. Բացի այդ, CKSEL [0] - ը պետք է սահմանվի 1:

3. Bit 6 -ը վերահսկում է ժամացույցի ելքը դեպի PORTB0, ինչը մեզ չի հետաքրքրում: Այսպիսով, 6 -րդ բիթը կարելի է թողնել 1 -ի վրա:

4. Bit 7-ը վերահսկում է բաժանում -8-ի աշխատանքը և 0-ի կանխադրված պարամետրը միացված է գործառույթը, որը մենք չենք ցանկանում: Այսպիսով, 7 -րդ բիթը պետք է փոխվի 0 -ից 1 -ի:

Հետևաբար, ապահովիչի ցածր բայթը պետք է լինի 11111111, որը տասնվեցական նշումով 0xFF է:

«Ապահովիչի ցածր բայթ» -ի բիթերը ծրագրավորելու համար մենք կարող ենք օգտագործել մեր ծրագրավորողը (https://www.instructables.com/id/ISP-Programmer-fo…) և AVRDUDE ծրագրակազմը: AVRDUDE- ը հրամանի տող է, որն օգտագործվում է Atmel միկրոկառավարիչներից ներբեռնելու և դրանք վերբեռնելու համար:

Ներբեռնեք AVRDUDE ՝

Նախ, մենք պետք է նկարագրենք մեր ծրագրավորողին AVRDUDE- ի կազմաձևման ֆայլին: Windows- ում կազմաձևման ֆայլը սովորաբար նույն տեղում է, ինչ AVRDUDE- ի գործարկվող ֆայլը:

Տեղադրեք տեքստը կազմաձևման ֆայլում avrdude.conf:

# ISPProgv1

ծրագրավորող id = "ISPProgv1"; desc = "սերիական նավահանգիստի հարված, վերականգնում = dtr sck = rts mosi = txd miso = cts"; տիպ = "սերբ"; կապի_տիպ = սերիա; վերականգնել = 4; պարկ = 7; mosi = 3; miso = 8;;

Նախքան AVRDUDE- ը գործարկելը, մենք պետք է միացնենք միկրոկառավարիչը ծրագրավորողին, ըստ սխեմայի:

Բացեք DOS հուշման պատուհանը:

1. avrdude- ի աջակցվող ծրագրավորողի ցանկը դիտելու համար մուտքագրեք հրամանը avrdude -c c. Եթե ամեն ինչ կարգին է, ցանկում պետք է լինի ծրագրավորողի id «ISPProgv1»

2. Avdude աջակցվող Atmel սարքերի ցանկը դիտելու համար մուտքագրեք հրամանը avrdude -c ISPProgv1: Theանկում պետք է լինի m328p սարք Atmel ATMega 328P- ի համար:

Հաջորդը, մուտքագրեք avrdude -c ISPProgv1 –p m328p, հրամանը avrdude- ին ասեք, թե ինչ ծրագրավորող է օգտագործվում և ինչ Atmel միկրոկոնտրոլերը կցված է: Այն ներկայացնում է ATmega328P ստորագրությունը տասնվեցական նշումով ՝ 0x1e950f: Այն ներկայացնում է ապահովագրության բիթերի ծրագրավորում ներկայումս ATmega328P- ում, ինչպես նաև տասնվեցական նշումով; այս դեպքում ապահովիչների բայթերը ծրագրավորվում են ըստ գործարանի լռելյայն:

Հաջորդը, մուտքագրեք avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, դա հրաման է ՝ avrdude- ին պատմել, թե ինչ ծրագրավորող է օգտագործվում և ինչ Atmel միկրոկոնտրոլերը կցված է, և ապահովիչների ցածր բայթը փոխել 0xFF- ի:

Այժմ ժամացույցի ազդանշանը պետք է գա ցածր հզորության բյուրեղային տատանումից:

Քայլ 3. Bրագիրը այրելը ATMega328P միկրոկառավարիչի հիշողության մեջ

Bրագիրը այրելը ATMega328P միկրոկառավարիչի հիշողության մեջ
Bրագիրը այրելը ATMega328P միկրոկառավարիչի հիշողության մեջ
Bրագիրը այրելը ATMega328P միկրոկառավարիչի հիշողության մեջ
Bրագիրը այրելը ATMega328P միկրոկառավարիչի հիշողության մեջ

Նախ, պատճենեք ծրագրի վեցանկյուն ֆայլը, որը մենք պատրաստել էինք հրահանգի սկզբում AVRDUDE գրացուցակում:

Այնուհետև մուտքագրեք DOS հուշման պատուհանում avrdude –c ISPProgv1 –p m328p –u –U flash: w: [ձեր վեցանկյուն ֆայլի անունը]

Հրամանը գրում է վեցանկյուն ֆայլ միկրոկառավարիչի հիշողության մեջ: Այժմ, միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան: Եկեք ստուգենք այն:

Քայլ 4. Ստուգեք, թե ինչպես է միկրոկառավարիչը աշխատում մեր ծրագրի ցուցումներին համապատասխան

Ստուգեք, թե արդյոք միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան
Ստուգեք, թե արդյոք միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան
Ստուգեք, թե արդյոք միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան
Ստուգեք, թե արդյոք միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան
Ստուգեք, թե արդյոք միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան
Ստուգեք, թե արդյոք միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան

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

Նախ, մենք էներգիայի կարիք ունենք, ինչպես դա անում են բոլոր AVR սխեմաները: Մոտ 5 վոլտ հզորությունը բավարար է AVR չիպի շահագործման համար: Դուք կարող եք դա ստանալ կամ մարտկոցներից, կամ DC հոսանքի աղբյուրից: Մենք կապում ենք +5V հզորություն 7 -ի կապակցին և 8 -րդ կապը միացնում ենք գրատախտակին գետնին: Երկու կապանքների միջև մենք տեղադրում ենք 0.1μF կերամիկական կոնդենսատոր `էլեկտրամատակարարման հզորությունը հարթելու համար, որպեսզի AVR չիպը ստանա հարթ հոսանքի գիծ:

10KΩ ռեզիստորն օգտագործվում է սարքին Power On Reset (POR) ապահովելու համար: Երբ հոսանքը միացված է, կոնդենսատորի լարումը կլինի զրոյական, ուստի սարքը վերակայվում է (քանի որ վերականգնումը ցածր է), ապա կոնդենսատորը լիցքավորվում է VCC- ով, և վերականգնումն անջատված կլինի:

Մենք միացնում ենք մեր LED- ի անոդը AVR pin PB0- ին: Սա ATMega328P- ի 14 -րդ կապն է: Քանի որ դա LED է, մենք ցանկանում ենք սահմանափակել հոսանքը դեպի LED, որպեսզի այն չայրվի: Սա է պատճառը, որ մենք տեղադրում ենք 330Ω ռեզիստոր ՝ LED- ով շարքով: LED- ի կաթոդը միանում է գետնին:

16 ՄՀց բյուրեղը օգտագործվում է Atmega328 միկրոկառավարիչի ժամացույց ապահովելու համար, իսկ 22pF կոնդենսատորները `բյուրեղի աշխատանքը կայունացնելու համար:

Սրանք բոլոր միացումներն են, որոնք անհրաժեշտ են LED լուսավորելու համար: Սնուցման աղբյուր:

Լավ. LED- ը թարթում է մեկ վայրկյան ուշացումով: Միկրոհսկիչի աշխատանքը համապատասխանում է մեր առաջադրանքներին:

Քայլ 5: Եզրակացություն

Adիշտ է, դա երկար գործընթաց էր միայն LED լուսավորելու համար, բայց ճշմարտությունն այն է, որ դուք հաջողությամբ ջնջել եք հիմնական խոչընդոտները. Ստեղծել AVR միկրոկառավարիչի ծրագրավորման ապարատային հարթակ, Atmel Studio- ի օգտագործումը որպես ինտեգրված զարգացման հարթակ, AVRDUDE- ի օգտագործումը որպես ծրագրային ապահովում: AVR միկրոկառավարիչի կազմաձևում և ծրագրավորում:

Եթե ցանկանում եք տեղեկացված լինել իմ հիմնական միկրոկառավարիչների նախագծերին, բաժանորդագրվեք իմ YouTube- ին: Տեսանյութերիս դիտումը և տարածումը իմ գործին աջակցելու միջոց է:

Բաժանորդագրվեք YouTube FOG ալիքին

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