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

AVR Assembler ձեռնարկ 6: 3 քայլեր
AVR Assembler ձեռնարկ 6: 3 քայլեր

Video: AVR Assembler ձեռնարկ 6: 3 քայլեր

Video: AVR Assembler ձեռնարկ 6: 3 քայլեր
Video: LDmicro 3: PIC16F628A & Arduino Nano (Microcontroller PLC Ladder Logic Programming with LDmicro) 2024, Հուլիսի
Anonim
AVR Assembler ձեռնարկ 6
AVR Assembler ձեռնարկ 6

Բարի գալուստ Tutorial 6:

Այսօրվա ձեռնարկը կարճ կլինի, որտեղ մենք կմշակենք մի մեթոդ ՝ մեկ atmega328p- ի և մյուսի միջև տվյալների փոխանցման համար ՝ օգտագործելով դրանք միացնող երկու նավահանգիստ: Այնուհետև մենք վերցնում ենք զառախաղ 4 -րդ ձեռնարկից և գրանցման անալիզատորը ձեռնարկ 5 -ից, դրանք միացնում ենք իրար և օգտագործում ենք մեր մեթոդը ՝ գլանափաթեթների արդյունքը փոխանցող անալիզատորին փոխանցելու համար: Այնուհետև մենք տպելու ենք գլանակը երկուական տարբերակով ՝ օգտագործելով LED- ները, որոնք մենք կառուցել ենք անալիզատորի համար ձեռնարկում 5 -ում:

Այս ձեռնարկում ձեզ հարկավոր է.

  1. Ձեր նախատիպերի տախտակը
  2. Ձեր զառախաղը ձեռնարկ 4 -ից
  3. Ձեր գրանցման անալիզատորը ձեռնարկ 5 -ից
  4. Երկու միացնող լարեր
  5. Ամբողջական տվյալների թերթիկի պատճենը (2014 թ. Վերանայում).

    www.atmel.com/images/Atmel-8271-8-bit-AVR-M…

  6. Հրահանգների հավաքածուի ձեռնարկի պատճենը (2014 թ. Վերանայում).

    www.atmel.com/images/atmel-0856-avr-instruc…

Ահա հղում իմ AVR հավաքողների ձեռնարկների ամբողջական հավաքածուին ՝

Քայլ 1. Ինչպե՞ս կարող ենք ստիպել երկու միկրոկոնտրոլեր `խոսել միմյանց հետ:

Ինչպե՞ս կարող ենք այնպես անել, որ երկու միկրոկոնտրոլեր խոսեն միմյանց հետ
Ինչպե՞ս կարող ենք այնպես անել, որ երկու միկրոկոնտրոլեր խոսեն միմյանց հետ

Քանի որ մենք սկսում ենք ընդլայնել մեր նախագիծը, որպեսզի մեր միակ վերջնական արտադրանքը կազմված լինի ավելի փոքր մասերի հավաքածուից, մեզ ավելի շատ կապում կպահանջվեն, քան մեկ Atmega328P- ը կարող է ապահովել: Հետևաբար, մենք պատրաստվում ենք ընդհանուր նախագծի յուրաքանչյուր հատվածը կատարել առանձին միկրոկոնտրոլերի վրա, այնուհետև նրանց հանձնարարել կիսել տվյալները իրենց միջև: Այսպիսով, խնդիրը, որը մենք պետք է լուծենք, այն է, թե ինչպես կարող ենք պարզ մեթոդով հանդես գալ, որպեսզի վերահսկիչները խոսեն միմյանց հետ և փոխանցեն տվյալներ նրանց միջև: Դե, այս վերահսկիչների մեջ մեկ բան այն է, որ նրանք յուրաքանչյուրը կատարում են վայրկյանում 16 միլիոն հրահանգ: Սա շատ ճշգրիտ ժամանակավորված է, ուստի մենք կարող ենք օգտագործել այս ժամանակը `տվյալների փոխանցման համար: Եթե մենք օգտագործում ենք միլիվայրկյան ձգձգումներ ՝ տվյալները կազմելու համար, ապա իրականում մենք չպետք է այդքան ճշգրիտ լինենք, քանի որ պրոցեսորը կատարում է 16,000 հրահանգներ մեկ միլիվայրկյանում: Այլ կերպ ասած, միլիվայրկյանը հավերժություն է պրոցեսորի համար: Այսպիսով, եկեք փորձենք այն զառախաղերով: Ես ուզում եմ զառախաղի արդյունքը փոխանցել զառախաղերի չիպից անալիզատորի չիպին: Ենթադրենք, որ դուք կանգնած էիք փողոցի մյուս կողմում, և ես ուզում էի ձեզ ազդանշան տալ զույգ զառերի իմ գլորման արդյունքին: Մի բան, որ կարող էի անել, եթե մենք երկուսս էլ ժամացույց ունենայինք, այն է, որ ես կարող էի միացնել լապտերը, այնուհետև երբ դուք պատրաստ լինեք ստանալ իմ տվյալները, դուք միացրեք ձեր լապտերը և մենք երկուսս կսկսենք մեր ժամացույցները: Հետո ես լապտերը վառ պահում եմ միլիվայրկյանների ճշգրիտ թվով, երբ զառերը գլորում են, այնուհետև անջատում: Այսպիսով, եթե ես գլորեի 12 -ը, ես իմ լույսը վառ կպահեի 12 միլիվայրկյանների ընթացքում: Այժմ վերը նշվածի խնդիրն այն է, որ ձեզ և ինձ համար ոչ մի կերպ չենք կարողանա ժամանակները ճիշտ ճշգրտել ՝ 5 միլիվայրկյանից 12 -ը տարբերելու համար: միլիվայրկյաններ Բայց ինչ վերաբերում է դրան. Ենթադրենք, մենք որոշեցինք, որ ես մեկ տարի վառած լույսս կպահեմ զառախաղի յուրաքանչյուր համարի դիմաց: Այնուհետև, եթե ես գլորեմ 12 -ը, ես լույս կփայլեմ ձեզ վրա 12 տարի, և կարծում եմ, որ դուք կհամաձայնվեք, որ հավանականություն չկա, որ դուք սխալ թույլ կտաք թիվը պարզելիս: Դուք կարող եք ընդմիջում կատարել և գնալ բեյսբոլ խաղալու, կարող եք նույնիսկ վեց ամիս խաղալու խեցգետիններ Վեգասում, քանի դեռ տարվա ընթացքում ինչ -որ պահի հայացքն ուղղել եք դեպի փողոց ՝ տեսնելու համար, որ լույսը վառված է, հաշիվը բաց չեք թողնի: Դե, դա հենց այն է, ինչ մենք անում ենք միկրոկոնտրոլերների համար: CPU- ի համար մեկ միլիվայրկյանը մեկ տարվա նման է: Այսպիսով, եթե ես ազդանշանը միացնեմ 12 միլիվայրկյան շարունակ, գրեթե ոչ մի հնարավորություն չկա, որ մյուս միկրոկառավարիչը դա շփոթեցնի 10 -ի կամ 11 -ի հետ, անկախ նրանից, թե ինչն է ընդհատում և ինչ չի պատահի այդ ընթացքում: Միկրոկոնտրոլերների համար միլիվայրկյանը հավերժություն է: Այսպիսով, ահա թե ինչ ենք անելու: Սկզբում մենք կընտրենք վերահսկիչի երկու նավահանգիստ `մեր հաղորդակցության նավահանգիստները լինելու համար: Տվյալներ ստանալու համար ես կօգտագործեմ PD6 (եթե ցանկանանք կարող ենք այն անվանել Rx) և տվյալների փոխանցման համար կընտրեմ PD7 (ցանկության դեպքում այն կարող ենք անվանել Tx): Անալիզատոր չիպը պարբերաբար ստուգելու է իր Rx քորոցը և ազդանշան տեսնելու դեպքում այն կիջնի «հաղորդակցման ենթածրագրի», այնուհետև վերադարձի ազդանշան կփոխանցի զառախաղին ՝ ասելով, որ պատրաստ է ստանալ: Նրանք երկուսն էլ կսկսեն ժամանակը և զառախաղը ազդանշան կհաղորդի (այսինքն ՝ 5 Վ) մեկ զառախաղի մեկ թվի համար միլիվայրկյանի համար: Այսպիսով, եթե գլանափաթեթը կրկնակի վեցյակ էր կամ 12, ապա զառախաղը PD7- ի վրա կդարձներ 5 Վ 12 միլիվայրկյան, այնուհետև այն նորից կդարձներ 0 Վ: Անալիզատորը յուրաքանչյուր միլիվայրկյանում ստուգելու է իր PD6 կապը ՝ ամեն անգամ հաշվելով, և երբ այն վերադառնա 0 Վ, ապա ստացված թիվը դուրս է բերում անալիզատորի էկրանին ՝ LED- ների վրա ցույց տալով երկուական երկուական: Այսպիսով, սա ծրագիրն է: Տեսնենք ՝ կարո՞ղ ենք այն իրականացնել:

Քայլ 2. Հաղորդակցության ենթածրագրեր

Առաջին բանը, որ մենք պետք է անենք, երկու կարգավորիչների միացումն է: Այսպիսով, մեկից վերցրեք մետաղալար PD6- ից և մյուս կողմից միացրեք այն PD7- ին, և հակառակը: Այնուհետև դրանք նախաստորագրեք ՝ PD7- ը երկուսի վրա դնելով OUTPUT և երկուսում PD6- ը INPUT: Ի վերջո, բոլորը սահմանեք 0 Վ: Մասնավորապես, յուրաքանչյուր միկրոկառավարիչի կոդի Init կամ Reset բաժնում ավելացրեք հետևյալը.

sbi DDRD, 7; PD7- ը սահմանվել է ելքի

cbi PortD, 7; PD7 սկզբում 0V cbi DDRD, 6; PD6- ը մուտքագրված է cbi PortD, 6; PD6 սկզբնապես 0V clr ընդհանուր; ընդհանուր զառերի վրա սկզբնապես 0

Հիմա եկեք ստեղծենք հաղորդակցության ենթածրագիրը զառախաղերի վրա: Սկզբում սահմանեք մի նոր փոփոխական, որը կոչվում է «ընդհանուր», որը կպահի զառախաղի վրա գլորված ընդհանուր թիվը և այն կսկսի զրոյի:

Այնուհետև գրեք ենթածրագիր ՝ անալիզատորի հետ շփվելու համար.

հաղորդակցվել:

cbi PortD, 7 sbi PortD, 7; Ուղարկեք պատրաստ ազդանշանի սպասում. Sbic PinD, 6; կարդալ PinD և բաց թողնել, եթե 0V rjmp սպասման ուշացում 8; համաժամացման հետաձգում (գտել են սա փորձնականորեն) ուղարկել. նվազեցնել ընդհանուր հետաձգումը 2; յուրաքանչյուր մահվան համար cpi ընդհանուր, 0; 0 այստեղ նշանակում է «ընդհանուր» թվերի ուշացումներ են ուղարկվել breq PC+2 rjmp send cbi PortD, 7; PD7- ից 0V clr ընդհանուր; ընդհանուր զառերը զրոյականացնել մինչև 0 ռետ

Անալիզատորում մենք հիմնական ռեժիմից կանչ ենք ավելացնում հաղորդակցման ենթածրագրին.

clr անալիզատոր; պատրաստվել նոր համարին

sbic PinD, 6; ստուգեք PD6- ը 5 Վ ազդանշանի համար զանգահարեք; եթե 5 Վ գնա շարժական անալիզատորին հաղորդելու համար, ընդամենը; ելք դեպի անալիզատոր ցուցադրվող rcall անալիզատոր

և այնուհետև գրեք հաղորդակցման ենթածրագիրը հետևյալ կերպ.

հաղորդակցվել:

clr ընդհանուր; վերականգնել ընդհանուրը մինչև 0 հետաձգում 10; ցատկումներից ազատվելու հետաձգում sbi PortD, 7; PB7- ը սահմանել 5V ազդանշանի պատրաստ ընդունման համար. հետաձգում 2; սպասեք հաջորդ թվին ներառյալ ընդհանուր; ընդհանուր sbic PinD- ի ավելացում, 6; եթե PD6- ը վերադառնա 0V, մենք ավարտեցինք rjmp ստանալը. հակառակ դեպքում, կրկնօրինակեք ավելի շատ տվյալների համար cbi PortD, 7; վերականգնելուց հետո վերականգնել PD7- ը

Ահա՛ Այժմ յուրաքանչյուր միկրոկառավարիչ ստեղծվել է, որպեսզի հաղորդի զառերի արդյունքը, այնուհետև ցուցադրի այն անալիզատորի վրա:

Մենք կիրականացնենք ավելի արդյունավետ հաղորդակցման ավելի ուշ եղանակ, երբ մենք պետք է փոխանցենք գրանցամատյանի բովանդակությունը վերահսկիչների միջև ՝ զառերի փոխարեն: Այդ դեպքում մենք դեռ կօգտագործենք դրանք միացնող երկու լար, բայց մենք կօգտագործենք 1, 1 ՝ «փոխանցման սկիզբ» նշանակելու համար. 0, 1 նշանակում է «1»; 1, 0 նշանակում է «0»; և վերջապես 0, 0 նշանակում է «ավարտի փոխանցում»:

Ercորավարժություն 1. Տեսեք, արդյոք կարող եք կիրառել ավելի լավ մեթոդը և օգտագործել այն ՝ զառախաղը 8 բիթանոց երկուական համար փոխանցելու համար:

Ես կցեմ մի տեսանյութ, որը ցույց է տալիս իմը շահագործման մեջ:

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

Եզրակացություն
Եզրակացություն

Ձեր տեղեկանքի համար կցել եմ ամբողջական ծածկագիրը: Այն այնքան մաքուր և կոկիկ չէ, որքան ես կցանկանայի, բայց ես այն կմաքրեմ, քանի որ այն ընդլայնելու ենք ապագա ձեռնարկներում:

Այսուհետ ես պարզապես կցեմ ծածկագիր պարունակող ֆայլերը, այլ ոչ թե ամեն ինչ մուտքագրեմ այստեղ: Մենք պարզապես մուտքագրում ենք այն հատվածները, որոնք մեզ հետաքրքրում են քննարկել:

Սա կարճ ձեռնարկ էր, որտեղ մենք գտանք մի պարզ մեթոդ ՝ մեր անալիզատորին միկրոկոնտրոլերերին ասելու, թե ինչ արդյունք տվեց մեր զառախաղը մեր զառախաղի միկրոկոնտրոլերից ՝ ընդամենը երկու նավահանգիստ օգտագործելով:

Exորավարժություն 2. Պատրաստ ազդանշանի փոխարեն ՝ ցույց տալու համար, թե երբ է զառախաղը պատրաստ փոխանցելու, և մյուսը, երբ անալիզատորը պատրաստ է ընդունել, օգտագործեք «արտաքին ընդհատում», որը կոչվում է «Pin Change Interrupt»: Atmega328p- ի քորոցները կարող են օգտագործվել այս կերպ, այդ իսկ պատճառով նրանք ունեն pinout դիագրամում դրանց կողքին PCINT0 միջոցով PCINT23: Դուք կարող եք դա իրականացնել որպես ընդհատում նույն կերպ, ինչպես մենք արեցինք ժմչփի արտահոսքի ընդհատման դեպքում: Այս դեպքում ընդհատվող «բռնիչը» կլինի այն ենթածրագիրը, որը հաղորդակցվում է զառախաղի հետ: Այս կերպ, իրականում կարիք չկա կապի ենթածրագիրը հիմնականից կանչել. Այն կգնա ցանկացած ժամանակ, երբ այդ քորոցի վրա տեղի ունենա փոփոխություն:

Ercորավարժություն 3. Մեկ միկրոկառավարիչի միջև տվյալների հաղորդակցման և փոխանցման այլ միջոցների հավաքածու շատ ավելի լավ միջոց է `ներկառուցված 2-լարային սերիական ինտերֆեյսի օգտագործումը հենց միկրոկոնտրոլի վրա: Փորձեք կարդալ տվյալների թերթիկի 22 -րդ բաժինը և տեսեք, թե արդյոք կարող եք պարզել, թե ինչպես այն իրականացնել:

Այս ավելի պարզեցված տեխնիկան մենք կօգտագործենք ապագայում, երբ լրացուցիչ կարգավորիչներ ավելացնենք:

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

Հաջորդ ձեռնարկում մենք կփոխենք մեր «անալիզատորի» նպատակը, կներկայացնենք մի քանի այլ շղթայի տարրեր և ավելի հետաքրքիր կերպով կօգտագործենք զառախաղը:

Մինչև հաջորդ անգամ…

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