Բովանդակություն:
- Քայլ 1. Ստեղծեք փորձնական խորհուրդ
- Քայլ 2: Տեղադրեք Assembler- ը և Avrdude- ը
- Քայլ 3: Բարև աշխարհ
- Քայլ 4: Hello.asm տող առ տող
- Քայլ 5: Եզրակացություն
Video: AVR Assembler ձեռնարկ 1: 5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Ես որոշեցի գրել մի շարք ձեռնարկներ, թե ինչպես գրել հավաքման լեզվի ծրագրեր Atmega328p- ի համար, որը Arduino- ում օգտագործվող միկրոկոնտրոլերն է: Եթե մարդիկ հետաքրքրված մնան, ես կշարունակեմ շաբաթը մեկ անգամ թողնել, մինչև ազատ ժամանակս չավարտվի, այլապես մարդիկ կդադարեն կարդալ դրանք:
Ես վարում եմ Arch linux- ը և աշխատում եմ հացահատիկի վրա տեղադրված atmega328p-pu- ի վրա: Դուք կարող եք դա անել այնպես, ինչպես ես, կամ կարող եք պարզապես միացնել arduino- ն ձեր համակարգչին և այդ կերպ աշխատել միկրոկառավարիչի վրա:
Մենք 328p- ի համար ծրագրեր ենք գրելու, ինչպես arduino- ում, բայց պետք է նկատել, որ այս նույն ծրագրերն ու տեխնիկան կաշխատեն նաև Atmel միկրոկոնտրոլերներից որևէ մեկի համար, իսկ հետագայում (եթե հետաքրքրություն լինի) մենք կաշխատենք որոշների հետ: մյուսները նույնպես: Միկրոկառավարիչի մանրամասները կարելի է գտնել Atmel- ի տվյալների թերթերում և Հրահանգների հավաքածուի ձեռնարկում: Ես դրանք կցում եմ այս խրատականին:
Ահա այն, ինչ ձեզ հարկավոր կլինի.
1. Հացաթուղթ
2. Arduino, կամ պարզապես միկրոկոնտրոլեր
3. Linux- ով աշխատող համակարգիչ
4. Avra հավաքողը օգտագործելով git: git clone https://github.com/Ro5bert/avra.git կամ եթե օգտագործում եք ubuntu կամ debian համակարգ, պարզապես մուտքագրեք «sudo apt install avra» և դուք կստանաք և avr հավաքողը և ավրդուդե: Այնուամենայնիվ, եթե դուք ստանում եք github- ի վերջին տարբերակը, ապա դուք նույնպես կստանաք բոլոր անհրաժեշտ ֆայլերը, այլ կերպ ասած ՝ այն արդեն ունի m328Pdef.inc և tn85def.inc ֆայլերը:
5. avrdude
Իմ AVR հավաքողի ձեռնարկների ամբողջական փաթեթը կարելի է գտնել այստեղ ՝
Քայլ 1. Ստեղծեք փորձնական խորհուրդ
Կարող եք պարզապես օգտագործել ձեր arduino- ն և, եթե ցանկանում եք, անել ամեն ինչ այս ձեռնարկներում: Այնուամենայնիվ, քանի որ մենք խոսում ենք հավաքագրման լեզվով կոդավորման մասին, մեր փիլիսոփայությունն է, ըստ էության, հեռացնել բոլոր պերիֆերալները և ուղղակիորեն փոխազդել բուն միկրոկառավարիչի հետ: Այսպիսով, չե՞ք կարծում, որ ավելի հաճելի կլինի դա անել այդպես:
Ձեզանից յուրաքանչյուրի համար, ով համաձայն է, կարող եք միկրոկառավարիչը դուրս բերել ձեր arduino- ից և այնուհետև սկսել ՝ կառուցելով «Breadboard Arduino» ՝ հետևելով այստեղ տրված հրահանգներին ՝
Նկարում ես ցույց եմ տալիս իմ կազմաձևը, որը բաղկացած է երկու առանձին Atmega328p- ից ՝ մեծ տախտակի վրա (ես ցանկանում եմ, որ նախորդ ձեռնարկը լարված լինի և բեռնված լինի մեկ միկրոկառավարիչի վրա ՝ մյուսի վրա աշխատելիս): Ես ունեմ էլեկտրամատակարարում այնպես, որ վերին երկաթուղին 9 Վ է, իսկ մնացած բոլորը `5 Վ լարման կարգավորիչից: Չիպերը ծրագրավորելու համար ես օգտագործում եմ նաև FT232R ջարդման տախտակ: Ես գնել եմ դրանք և ինքս եմ տեղադրել դրանք բեռնախցիկներ, բայց եթե դուք դրանք պարզապես հանել եք Arduino- ից, ապա արդեն լավ է:
Նկատի ունեցեք, որ եթե դա փորձում եք ATtiny85- ի միջոցով, ապա կարող եք պարզապես ձեռք բերել Sparkfun Tiny Programmer- ը այստեղ ՝ https://www.sparkfun.com/products/11801# և այն պարզապես միացնել ձեր համակարգչի USB պորտին: Նախ պետք է տեղադրել bootloader- ը Attiny85- ի վրա, և ամենահեշտ ձևը պարզապես օգտագործել Arduino IDE- ն: Այնուամենայնիվ, ձեզ հարկավոր է կտտացնել ֆայլը և նախասիրությունները, այնուհետև ավելացնել այս նոր տախտակների URL- ը ՝ https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json, որը Ձեզ հնարավորություն է տալիս տեղադրել բեռնիչը (եթե ձեր ATtiny85- ը դեռ չէր եկել):
Քայլ 2: Տեղադրեք Assembler- ը և Avrdude- ը
Այժմ կարող եք ներբեռնել և տեղադրել հավաքողն ու avrdude- ն այս ձեռնարկի առաջին քայլին տրված հղումներից: Հավանական է, որ եթե արդեն աշխատել եք Arduino- ի հետ, ապա արդեն տեղադրել եք avrdude- ը:
Avra- ի տեղադրումից հետո դուք կիմանաք, որ դրա հետ եկող ենթաուղեկույց կա, որը կոչվում է «աղբյուրներ», և այդ գրացուցակի ներսում կան մի քանի ներառված ֆայլեր: Սրանք բոլորը այն միկրոկոնտրոլերներն են, որոնք կարող եք ծրագրավորել avra- ով: Անմիջապես կնկատեք, որ 328p- ի համար ֆայլ չկա, որը մենք այստեղ օգտագործում ենք: Ես կցել եմ մեկին: Ֆայլը պետք է կոչվի m328Pdef.inc, և դուք պետք է տեղադրեք ներառված գրացուցակում կամ ցանկացած այլ վայրում, որը Ձեզ դուր է գալիս: Մենք այն կներառենք մեր հավաքների լեզվի ծրագրերում: Այս ամենը տալիս է տվյալների թերթիկից միկրոկոնտրոլերի անունների գրանցամատյաններից յուրաքանչյուրին, որպեսզի մենք ստիպված չլինենք օգտագործել դրանց վեցանկյուն անունները: Վերոնշյալ ֆայլը պարունակում է «պրագմայի հրահանգներ», քանի որ այն նախատեսված էր C և C ++ ծրագրավորման համար: Եթե դուք հոգնել եք տեսնել, որ հավաքողը թքում է «անտեսելով պրագմայի հրահանգը» բողոքները, պարզապես մտեք ֆայլ և ջնջեք կամ մեկնաբանեք #պրագմայով սկսվող բոլոր տողերը:
Լավ, հիմա, երբ դուք ունեք ձեր միկրոկառավարիչը պատրաստ, ձեր հավաքողը պատրաստ է, և ձեր ծրագրավորողը պատրաստ է, մենք կարող ենք գրել մեր առաջին ծրագիրը:
Նշում. Եթե դուք ATmega328P- ի փոխարեն օգտագործում եք ATtiny85- ը, ապա ձեզ հարկավոր է tn85def.inc կոչվող այլ ներառող ֆայլ: Ես նաև կցեմ այն (նշեմ, որ այն պետք է անվանեի tn85def.inc.txt, որպեսզի Instructables- ը թույլ տա ինձ ներբեռնել այն): Այսպիսով, ես խորհուրդ եմ տալիս այն ձեռք բերել և ինքներդ կազմել ՝ git clone
Քայլ 3: Բարև աշխարհ
Այս առաջին ձեռնարկի նպատակն է կառուցել ստանդարտ առաջին ծրագիրը, որը գրում է ցանկացած նոր լեզու սովորելիս կամ էլեկտրոնիկայի ցանկացած նոր հարթակ ուսումնասիրելիս: "Բարեւ աշխարհ!." Մեր դեպքում մենք պարզապես ցանկանում ենք գրել հավաքման լեզվի ծրագիր, հավաքել այն և վերբեռնել այն մեր միկրոկոնտրոլերի վրա: Րագիրը կհանգեցնի LED- ի միացման: LED- ի «թարթել», ինչպես անում են սովորական Arduino բարև աշխարհի ծրագրի համար, իրականում հավաքների լեզվով շատ ավելի բարդ ծրագիր է, ուստի մենք դա դեռ չենք անի: Մենք պատրաստվում ենք գրել ամենապարզ «մերկ ոսկորների» ծածկագիրը նվազագույն անհարկի բմբուլով:
Նախ միացրեք LED- ը PB5- ից (տե՛ս pinout դիագրամը), որը նաև կոչվում է Digital Out 13 arduino- ում, 220 օհմ ռեզիստորին, այնուհետև GND- ին: Այսինքն
PB5 - LED - R (220 օհմ) - GND
Հիմա ծրագիրը գրելու համար: Բացեք ձեր նախընտրած տեքստային խմբագրիչը և ստեղծեք «hello.asm» անունով ֆայլ
բարև: ոգեշնչում
; միացնում է LED, որը միացված է PB5- ին (թվային ելք 13): ներառել "./m328Pdef.inc" ldi r16, 0b00100000 out DDRB, r16 out PortB, r16 Սկիզբ. rjmp Սկիզբ
Վերը նշվածը ծածկագիրն է: Մենք այն կանցնենք տող առ տող մեկ րոպեում, բայց նախ թույլ տվեք համոզվել, որ կարող ենք այն գործի դնել ձեր սարքի վրա:
Ֆայլը ստեղծելուց հետո տերմինալում այն հավաքում եք հետևյալ կերպ.
ավրա բարև: ոգեշնչում
սա կհավաքի ձեր ծածկագիրը և կստեղծի hello.hex անունով ֆայլ, որը մենք կարող ենք այն վերբեռնել հետևյալ կերպ.
avrdude -p m328p -c stk500v1 -b 57600 -P /dev /ttyUSB0 -U flash: w: hello.hex
եթե դուք օգտագործում եք տախտակի arduino, ապա ստիպված կլինեք սեղմել տախտակի arduino- ի վերակայման կոճակը `վերը նշված հրամանը կատարելուց անմիջապես առաջ: Նկատի ունեցեք, որ հնարավոր է նաև ստիպված լինեք ավելացնել sudo- ն առջևում կամ կատարել այն որպես արմատ: Նաև նկատի ունեցեք, որ որոշ arduino- ների վրա (ինչպես Arduino UNO- ն), հավանաբար, պետք է փոխեք բիթ -բիթը -b 115200 և նավահանգիստ -P /dev /ttyACM0 (եթե avrdude- ից սխալ եք ստանում սարքի անվավեր ստորագրության վերաբերյալ, պարզապես ավելացրեք ՝ F հրամանին)
Եթե ամեն ինչ աշխատել է այնպես, ինչպես պետք է, ապա այժմ լուսադիոդ կվառվի….. «Ողջույն աշխարհ»:
Եթե դուք օգտագործում եք ATtiny85- ը, ապա avrdude հրամանը կլինի.
avrdude -p attiny85 -c usbtiny -U flash: w: hello.hex
Քայլ 4: Hello.asm տող առ տող
Այս ներածական ձեռնարկը ավարտելու համար մենք հերթով կանցնենք hello.asm ծրագրի միջոցով `տեսնելու, թե ինչպես է այն աշխատում:
բարև: ոգեշնչում
; միացնում է LED- ը, որը միացված է PB5- ին (թվային ելք 13)
Կիսակետից հետո ամեն ինչ անտեսվում է հավաքողի կողմից, ուստի այս առաջին երկու տողերը պարզապես «մեկնաբանություններ» են, որոնք բացատրում են, թե ինչ է անում ծրագիրը:
. ներառել "./m328Pdef.inc"
Այս տողը հուշում է հավաքողին ներառել ձեր ներբեռնած m328Pdef.inc ֆայլը: Դուք կարող եք տեղադրել այն նմանատիպ ֆայլերի գրացուցակում և այնուհետև փոխել վերը նշված տողը ՝ դրան մատնանշելով այնտեղ:
ldi r16, 0b00100000
ldi- ն նշանակում է «բեռը անմիջականորեն» և հավաքողին ասում է, որ վերցնի աշխատանքային գրանցամատյանը, այս դեպքում ՝ r16, և դրանում բեռնեք երկուական թիվ ՝ այս դեպքում 0b00100000: Առջևի 0b- ն ասում է, որ մեր թիվը երկուական է: Եթե մենք ցանկանայինք, կարող էինք ընտրել մեկ այլ հիմք, ինչպիսին է վեցերորդը: Այդ դեպքում մեր թիվը կլիներ 0x20, որը վեցանկյուն է 0b00100000- ի համար: Կամ մենք կարող էինք օգտագործել 32 -ը, որը նույն հիմքի համար 10 տասնորդական է:
Exորավարժություն 1. Փորձեք վերը նշված տողում համարը փոխել վեցանկյունականի, այնուհետև տասնորդականի և հաստատել, որ այն դեռ գործում է յուրաքանչյուր դեպքում:
Երկուական օգտագործելը ամենապարզն է, չնայած նավահանգիստների և գրանցիչների աշխատանքի եղանակի պատճառով: Մենք ավելի մանրամասն կքննարկենք atmega328p- ի նավահանգիստներն ու գրանցամատյանները ապագա ձեռնարկներում, բայց առայժմ ես պարզապես կասեմ, որ մենք օգտագործում ենք r16- ը որպես մեր «աշխատանքային գրանցամատյան», ինչը նշանակում է, որ մենք պարզապես այն կօգտագործենք որպես պահվող փոփոխական: թվերը ներսում «գրանցամատյանը» 8 բիթանոց հավաքածու է: Նշանակում է 8 կետ, որոնք կարող են լինել 0 կամ 1 («անջատված» կամ «միացված»): Երբ մենք վերբեռնում ենք 0b00100000 երկուական համարը գրանցամատյանում ՝ օգտագործելով վերը նշված տողը, մենք պարզապես այդ թիվը պահում ենք գրանցամատյանում r16:
դուրս DDRB, r16
Այս տողը կոմպիլյատորին ասում է, որ r16 գրանցամատյանի բովանդակությունը պատճենվի DDRB գրանցամատյանում: DDRB- ը նշանակում է «Տվյալների ուղղման գրանցամատյան B» և այն սահմանում է «կապում» PortB- ում: 328p- ի pinout քարտեզի վրա կարող եք տեսնել, որ կան 8 PIN պիտակ ՝ PB0, PB1,…, PB7: Այս կապանքները ներկայացնում են «PortB» - ի «բիթերը», և երբ 00100000 երկուական համարը տեղադրում ենք DDRB գրանցամատյանում, մենք ասում ենք, որ մենք ցանկանում ենք, որ PB0, PB1, PB2, PB3, PB4, PB6 և PB7 համարները տեղադրվեն որպես INPUT կապում Դրանցում 0 -ն է, իսկ PB5- ը դրված է որպես ԵԼՔ փին, քանի որ այդ տեղում մենք դնում ենք 1:
դուրս PortB, r16
Այժմ, երբ մենք ամրագրել ենք կապանքների ուղղությունները, այժմ կարող ենք սահմանել դրանց վրա լարումները: Վերոնշյալ տողը պատճենում է նույն երկուական համարը մեր պահեստային ռեգիստր r16- ից PortB: Սա սահմանում է բոլոր կապումներն 0 վոլտի, բացառությամբ PB5 կապի բարձրության, որը 5 վոլտ է:
Ercորավարժություն 2. Վերցրեք թվային բազմաչափ, միացրեք սև կապարը գետնին (GND), ապա փորձարկեք PB0- ից PB7 կապանքներից յուրաքանչյուրը կարմիր կապարով: Արդյո՞ք յուրաքանչյուր կապում առկա լարումները ճիշտ այնպիսին են, որ համապատասխանում են PortB- ում 0b00100000 դնելուն: Եթե կան, որ չկան, ինչո՞ւ եք կարծում, որ դա այդպես է: (տես կապի քարտեզը)
Սկիզբ:
rjmp Սկիզբ
Ի վերջո, վերևի առաջին տողը «պիտակ» է, որը պիտակավորում է ծածկագրում տեղ: Այս դեպքում այդ տեղը նշելով որպես «Սկսել»: Երկրորդ տողում ասվում է «հարաբերական անցում դեպի սկիզբ պիտակի վրա»: Theուտ արդյունքն այն է, որ համակարգիչը տեղադրվում է անսահմանափակ հանգույցի մեջ, որը պարզապես հեծանիվը հետ է պահում դեպի Սկիզբ: Սա մեզ պետք է, քանի որ մենք չենք կարող այնպես անել, որ ծրագիրը պարզապես ավարտվի կամ ընկնի ժայռից, ծրագիրը պարզապես պետք է շարունակի աշխատել, որպեսզի լույսը լուսավորված մնա:
Ercորավարժություն 3. Հեռացրեք վերը նշված երկու տողերը ձեր ծածկագրից, որպեսզի ծրագիրը ընկնի ժայռից: Ինչ է կատարվում? Դուք պետք է տեսնեք մի բան, որը նման է ավանդական «թարթել» ծրագրին, որն օգտագործվում է Արդուինոյի կողմից որպես իրենց «բարև աշխարհ»: Ձեր կարծիքով, ինչո՞ւ է դա այդպես գործում: (Մտածեք, թե ինչ պետք է տեղի ունենա, երբ ծրագիրը ընկնի ժայռից …)
Քայլ 5: Եզրակացություն
Եթե այսքան հեռու եք հասել, ապա շնորհավորում եմ: Այժմ դուք կարող եք գրել հավաքման ծածկագիր, հավաքել այն և բեռնել այն ձեր միկրոկոնտրոլերի վրա:
Այս ձեռնարկում դուք սովորել եք, թե ինչպես օգտագործել հետևյալ հրամանները.
ldi hregister, թիվը մի թիվ է բեռնում (0-255) վերին կեսի գրանցամատյանում (16-31)
ioregister- ից, գրանցել մի շարք պատճեններ աշխատանքային ռեգիստրից դեպի I/O գրանցամատյան
rjmp պիտակը ցատկում է «պիտակ» պիտակով ծրագրի տող (որը չի կարող 204 հրահանգից ավելի հեռու լինել, այսինքն ՝ հարաբերական թռիչք)
Այժմ, երբ այդ հիմունքները դուրս են եկել ճանապարհից, մենք կարող ենք շարունակել գրել ավելի հետաքրքիր ծածկագիր և ավելի հետաքրքիր սխեմաներ և սարքեր ՝ առանց քննարկելու կազմման և բեռնման մեխանիկան:
Հուսով եմ, որ ձեզ դուր եկավ այս ներածական ձեռնարկը: Հաջորդ ձեռնարկում մենք կավելացնենք սխեմայի մեկ այլ բաղադրիչ (կոճակ) և կընդլայնենք մեր ծածկագիրը ՝ ներառելով մուտքային նավահանգիստներն ու որոշումները:
Խորհուրդ ենք տալիս:
AVR Assembler ձեռնարկ 2: 4 քայլ
AVR Assembler Tutorial 2: Այս ձեռնարկը շարունակությունն է " AVR Assembler Tutorial 1 " Եթե դուք չեք անցել ձեռնարկ 1 -ը, ապա պետք է դադարեցնեք և առաջինը դա անեք: Այս ձեռնարկում մենք կշարունակենք մեր ուսումնասիրությունը atmega328p u
AVR Assembler ձեռնարկ 6: 3 քայլեր
AVR Assembler Tutorial 6: Բարի գալուստ Tutorial 6: Այսօրվա ձեռնարկը կարճ կլինի, որտեղ մենք կմշակենք մի մեթոդ ՝ մեկ atmega328p- ի և մյուսի միջև տվյալները հաղորդելու միջոցով ՝ դրանք կապող երկու պորտերի միջև: Այնուհետև մենք կվերցնենք զառախաղը ձեռնարկ 4 -ից և գրանցամատյանից
AVR Assembler ձեռնարկ 8: 4 քայլ
AVR Assembler Tutorial 8: Welcome to Tutorial 8: Այս կարճ ձեռնարկում մենք մի փոքր շեղում կստանանք հավաքման լեզվի ծրագրավորման նոր ասպեկտների ներդրումից `ցույց տալու, թե ինչպես տեղափոխել մեր նախատիպերի բաղադրիչները առանձին " տպագիր " տպատախտակ: The
AVR Assembler ձեռնարկ 9: 7 քայլեր
AVR Assembler Tutorial 9: Բարի գալուստ Tutorial 9: Այսօր մենք ցույց կտանք, թե ինչպես կառավարել ինչպես 7-հատվածանոց, այնպես էլ 4-նիշանոց ցուցադրումներ ՝ օգտագործելով մեր ATmega328P և AVR հավաքման լեզվի ծածկագիրը: Դա անելու ընթացքում մենք ստիպված կլինենք շեղումներ ձեռնարկել, թե ինչպես օգտագործել կույտը
AVR Assembler ձեռնարկ 3: 9 քայլեր
AVR Assembler Tutorial 3: Բարի գալուստ թիվ 3 ձեռնարկ: Նախքան սկսելը ես ուզում եմ մի փիլիսոփայական միտք անել: Մի վախեցեք փորձարկել այն սխեմաները և ծածկագիրը, որը մենք կառուցում ենք այս ձեռնարկներում: Փոխեք լարերը շուրջը, ավելացրեք նոր բաղադրիչներ, վերցրեք բաղադրիչներ