Բովանդակություն:
- Քայլ 1. Լրացրեք ստեղնաշարը 1
- Քայլ 2. Լրացրեք ստեղնաշարը 2
- Քայլ 3. Լրացրեք ստեղնաշարը 3
- Քայլ 4: Միացրեք ստեղնաշարը
- Քայլ 5. Միացրեք ստեղնաշարը ձեր անալիզատորին
- Քայլ 6. Ո՞ր անջատիչ անջատիչները պետք է տեղադրենք:
- Քայլ 7: Գրեք ընդհատումների կառավարիչը
- Քայլ 8: Նշեք ստեղնաշարի արժեքները
- Քայլ 9. Կոդ և տեսանյութ 1 -ին տարբերակի համար
- Քայլ 10: 2 -րդ տարբերակի ծածկագիր
- Քայլ 11: Ինչպե՞ս ենք ազատվում կոճակից: Տարբերակ 3
- Քայլ 12: Կոդ և տեսանյութ աշխատանքային տարբերակի համար
Video: AVR Assembler Tutorial 7: 12 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Բարի գալուստ Tutorial 7:
Այսօր մենք նախ ցույց կտանք, թե ինչպես կարելի է հավաքել ստեղնաշարը, այնուհետև ցույց կտանք, թե ինչպես օգտագործել անալոգային մուտքային նավահանգիստները ստեղնաշարի հետ հաղորդակցվելու համար: Մենք դա կանենք ՝ օգտագործելով մուտքի ընդհատումներ և մեկ մետաղալար: Մենք կհաղորդենք ստեղնաշարը այնպես, որ յուրաքանչյուր սեղմում անալոգային մուտքին ուղարկի յուրահատուկ լարվածություն, ինչը թույլ կտա մեզ տարբերել այն ստեղնը, որը սեղմված է: Այնուհետև մենք կհրապարակենք մեր գրանցամատչելի անալիզատորին սեղմված թիվը ՝ ցույց տալու համար, որ ամեն ինչ տեղի է ունենում այնպես, ինչպես պետք է: Կան մի շարք որոգայթներ, որոնց կարող եք անդրադառնալ ATmega328p- ում Անալոգային թվային փոխարկիչից (ADC) օգտագործելիս, և այդպես էլ կանենք մի քանի փուլով վերցրեք իրերը ՝ փորձելու և պարզելու, թե ինչպես խուսափել դրանցից: Մենք նաև կտեսնենք, թե ինչու է անալոգային թվային փոխարկիչ օգտագործելը ստեղնաշարը կառավարելու լավագույն միջոցը չէ, չնայած այն, որ ձեր միկրոկառավարիչի ավելի քիչ նավահանգիստներ է օգտագործում: Այս ձեռնարկում ձեզ հարկավոր է.
- ստեղնաշար: Դուք կարող եք գնել մեկը կամ կարող եք անել այն, ինչ ես արել եմ և մաքրեք մեկը:
- Ստեղնաշարի համար 2 կին վերնագիր (եթե մաքրում եք մեկը)
- միացնող լարեր
- մի տախտակ
- 4 1 Կոմի դիմադրիչներ
- 1 15 Կոմի դիմադրություն
- 1 3.3 Կոմի դիմադրություն
- 1 180 օմ դիմադրություն
- 1680 օմ դիմադրություն
- թվային բազմաչափ
- ձեր անալիզատորը ձեռնարկ 5 -ից
Կարող եք բաց թողնել առաջին մի քանի քայլերը, եթե արդեն ունեք ստեղնաշար և այն մաքրելու կարիք չունեք:
Ահա հղում իմ AVR հավաքողների ձեռնարկների ամբողջական հավաքածուին ՝
Քայլ 1. Լրացրեք ստեղնաշարը 1
Շատ վաղուց, երբ նույնիսկ ձեր տատիկն ու պապիկը պարզապես երեխաներ էին, մարդիկ օգտագործում էին այս տարօրինակ արտաքինով սարքերը, որոնց պատերը միացված էին երկար մալուխներ, միմյանց հետ շփվելու համար: Նրանք կոչվում էին «հեռախոսներ» և սովորաբար պլաստիկ էժան իրեր էին, որոնք ձեզ անհանգստացնող ձայն էին հաղորդում, երբ ինչ -որ մեկը զանգում էր ձեզ (ոչ թե այն, որ այսօրվա «Justասթին Բիբեր» -ի զանգերը հավասարապես նյարդայնացնող չեն): Ամեն դեպքում, այս սարքերն ունեին ստեղնաշարեր, որոնք շատ պարզ լարված էին և հեշտ է մաքրվել, և դրանց վրա կա 2 լրացուցիչ ստեղն («վերահասցեավորում» և «բռնկում») ստեղնաշարերից, որոնք կարող եք գնել, որոնք կարող եք ցանկանալ նորից օգտագործել: որպես «սլաքների ստեղներ», «ընտրացանկի ստեղներ» կամ այլ բան: Այսպիսով, մենք պատրաստվում ենք սկսել հին հեռախոսից ստեղնաշարի մաքրմամբ: Սկզբից վերցրեք հեռախոսը (ես օգտագործում եմ GE մեկը, ինչպես ցույց է տրված նկարներում) և անջատեք այն `էլեկտրագծերը պարզելու համար: Այնուհետև վերցրեք մի սայրը և կտրեք ստեղնաշարը պահող պլաստիկ փոքրիկ բռնակները և հանեք ստեղնաշարը:
Քայլ 2. Լրացրեք ստեղնաշարը 2
Այժմ վերցրեք PVC սղոց և կտրեք պլաստիկը բանալիների անցքերից, այնուհետև կտրեք եզրով ՝ խորությունը ճիշտ թողնելով բարակ ստեղնաշարից:
Այնուհետև նորից տեղադրեք ստեղնաշարը ՝ օգտագործելով փոքր մեխերը, որոնք մնում են վերջին քայլերի գագաթները հանելուց հետո և զոդման երկաթով պարզապես տաք երկաթը խցկել յուրաքանչյուր մեխի անցքի մեջ, որը կհալչի պլաստիկը և կտարածի դրա վրա: ստեղնաշարի ներքևի մասում ձևավորվում են նոր «բռնակներ», որոնք ստեղնաշարը կպահեն նախկինի պես:
Ինձ դուր է գալիս երեք բարձրախոս հավաքել և գուցե մյուս բաները, ինչպիսիք են անջատիչները և այն, ինչ կան գրատախտակին: Այնուամենայնիվ, այս անգամ ես չեմ մաքրելու անջատիչներն ու իրերը, քանի որ այս պահին մենք այլ նպատակներ ունենք: Բացի այդ, այնտեղ կա TA31002 գծային IC, որը հեռախոսի զանգ է: Տվյալների թերթիկը հեշտությամբ կարելի է գտնել և ներբեռնել առցանց ՝ տալով պինուտը և հնարավորությունները: Այսպիսով, ես պատրաստվում եմ այն առայժմ զոդել տախտակին, իսկ հետո ավելի ուշ խաղալ դրա հետ: Ես կցանկանայի այն միացնել տատանումների հետ և տեսնել, թե ինչ հիանալի ազդակներ կարող եմ ստանալ դրանից: Գուցե նույնիսկ դռան զանգ կատարեք դրանից: Ով գիտի.
Ամեն դեպքում, երբ ավարտեք հեռախոսը քանդելը և մասերը մաքրելը, մենք կավարտենք մեր ստեղնաշարի պատրաստումը:
Քայլ 3. Լրացրեք ստեղնաշարը 3
Օգտագործեք ապամոնտաժող ֆիտիլ և հեռացրեք ժապավենի մալուխները ստեղնաշարի ներքևից ՝ համոզվելով, որ տպատախտակի անցքերը պարզ են, այնուհետև երկու վերնագիր կցեք տախտակին, որտեղ անցքերն են: Հավանաբար, ստիպված կլինեք կտրել ձեր վերնագրերը այնպես, որ դրանք լինեն 4-պինային վերնագրեր:
Այժմ, երբ վերնագրերը կցված են, կարող եք այն միացնել տախտակին, վերցնել մի մուլտիմետր և ստուգել բանալիները ՝ մուլտիմետրը կպչելով պատահական կապումներին և չափելով դիմադրությունը: Սա թույլ կտա քարտեզագրել բանալիները: Դժվար է տեսնել, թե ինչպես են ստեղները միացված ելքերին ՝ միացմանը նայելով, բայց եթե դուք օգտագործում եք մուլտիմետր, կարող եք այն միացնել ցանկացած երկու կապում, այնուհետև սեղմել կոճակները, մինչև բաց շղթայի փոխարեն էկրանին մի թիվ չտեսնեք:. Սա կլինի բանալին այդ բանալու համար:
Այս կերպ քարտեզագրեք ելքային կապերի բոլոր բանալիները:
Քայլ 4: Միացրեք ստեղնաշարը
Այժմ հետևեք էլեկտրագծերի գծապատկերին և ստեղնաշարը միացրեք ձեր տախտակին:
Ինչպես է դա աշխատելու, մենք 5V կտեղադրենք ձախ կողմում, իսկ աջը ՝ GND: Դիագրամում աջ կողմում գտնվող առաջին քորոցը մտնում է Atmega328p միկրոկառավարիչի մեր անալոգային առաջին կապերի մեջ: Երբ սեղմված կոճակներ չկան, ազդանշանը կլինի 0 Վ, իսկ տարբեր կոճակներից յուրաքանչյուրը սեղմելիս անալոգային նավահանգստի մուտքը կտատանվի 0 Վ -ից մինչև 5 Վ -ի միջև ՝ տարբեր քանակությամբ ՝ կախված նրանից, թե որ ստեղն է սեղմվել: Մենք ընտրեցինք դիմադրության արժեքները, որպեսզի յուրաքանչյուր ուղի պարունակի դիմադրություն, որը տարբերվում էր մնացածից: Միկրոկոնտրոլի անալոգային պորտը վերցնում է անալոգային ազդանշան և այն բաժանում է 1024 տարբեր ալիքների `0 Վ -ից մինչև 5 Վ լարման միջև: Սա նշանակում է, որ յուրաքանչյուր ալիք ունի 5V/1024 = 0.005 V/channel = 5 mV/channel լայնություն: Այսպիսով, անալոգային նավահանգիստը կարող է տարբերել մուտքային լարումները, քանի դեռ դրանք տարբերվում են ավելի քան 5 մՎ -ով: Մեր դեպքում մենք ընտրել ենք դիմադրության արժեքներ այնպես, որ ցանկացած երկու սեղմում ուղարկի լարման ազդանշան, որը տարբերվում է դրանից ավելի, այնպես որ միկրոկոնտրոլերը պետք է հեշտությամբ կարողանա որոշել, թե որ ստեղն է սեղմված: Խնդիրն այն է, որ ամբողջ համակարգը շատ աղմկոտ է, այնպես որ մենք պետք է ընտրենք լարման մի շարք `յուրաքանչյուր կոճակի սեղմման վրա քարտեզագրելու համար, բայց դրան մի փոքր ուշ կանդրադառնանք:
Ուշադրություն դարձրեք, որ մենք ի վիճակի ենք վերահսկել 14 կոճակ ստեղնաշար ՝ օգտագործելով միայն մեկ մուտքային տող վերահսկիչին: Դա անալոգային մուտքերի օգտակար կողմերից մեկն է:
Այժմ ստեղնաշարի վերահսկման մեր առաջին փորձը կլինի այն, որ ստեղնաշարը ընդհատում առաջացնի, ընդհատվող ենթածրագրը կկարդա անալոգային մուտքի նավահանգիստը և կորոշի, թե որ ստեղն է սեղմված, այնուհետև այդ թիվը դուրս կբերի մեր գրանցամատյանային անալիզատորի ենթածրագրին, որը կցուցադրի երկուական հիմնական արժեքը մեր 8 LED- ների վրա, որոնք մենք սահմանել ենք ձեռնարկ 5 -ում:
Քայլ 5. Միացրեք ստեղնաշարը ձեր անալիզատորին
Նկարները ցույց են տալիս, թե ինչպես ենք մենք ցանկանում միացնել ստեղնաշարը միկրոկառավարիչին, որպեսզի տեսնենք ելքը մեր անալիզատորի էկրանին: Ըստ էության, մենք պարզապես ստեղնաշարից ելքը միացնում ենք PortC կապ 0 -ին, որը ATmega328P- ում կոչվում է նաև ADC0:
Այնուամենայնիվ, կա մի քանի լրացուցիչ բան: Մենք նաև պատրաստվում ենք միացնել կոճակը PD2- ին: Այսինքն վերցրեք մետաղալար ձեր 5 Վ ռելսից դեպի կոճակ և կոճակի մյուս կողմից դեպի PD2, և վերջապես, մենք ցանկանում ենք անջատել AREF կապը մեր 5 Վ ռելսից և փոխարենը թողնել այն անջատված: Weանկության դեպքում մենք կարող ենք տեղադրել 0,1 միկրոֆարադի անջատման կոնդենսատոր: Սա կերամիկական կոնդենսատոր է, որի վրա գրված է 104: Առաջին երկու թվանշանները թիվն են, իսկ վերջին թվանշանը ՝ 10-ի ուժը: Մենք այն բազմապատկում ենք ՝ պիկոֆարադներում պատասխան ստանալու համար (պիկոն նշանակում է 10^-12), ուստի 104-ը նշանակում է 10 x 10^4 պիկոֆարադ, ինչը նույնն է, ինչ 100 նանոֆարադ (նանո նշանակում է 10^-9), ինչը նույնն է, ինչ 0.1 միկրոֆարադը (միկրո նշանակում է 10^-6): Ինչևէ, այս ամենն արվում է, քանի որ մենք կարող ենք այն օգտագործել որպես մեր հղման քորոց:
Մենք նաև ցանկանում ենք 1 Մոհմ դիմադրություն PD2- ի և գետնի միջև: Մենք պատրաստվում ենք PD2- ը սահմանել որպես 0V լարման ելք, և մենք այդ փինում կաշխատենք դրական եզրին: Մենք ցանկանում ենք, որ կոճակը բաց թողնելիս եզրը անհետանա անմիջապես, այնպես որ մենք կտեղադրենք այս «ներքև քաշվող» դիմադրությունը:
Պատճառն այն է, որ մենք ուզում ենք կոճակը այն է, որ մենք ցանկանում ենք միացնել մեր անալոգային-թվային փոխարկիչը անջատիչ INT0- ի չիպի վրա, որը նաև PD2 է: Ի վերջո, մենք կցանկանայինք, որ ստեղնաշարը ինչպես միացներ ADC- ին, այնպես էլ ապահովեր մուտքի փոխարկումը `առանց առանձին կոճակ ունենալու, սակայն ժամանակի աշխատանքի եղանակի պատճառով մենք կսկսենք առանձին կոճակ` ADC- ն գործարկելու համար և միանգամից արդուկելու համար: սխալները դուրս են գալիս և վստահ են, որ ամեն ինչ ճիշտ է աշխատում, ապա մենք կլուծենք աղմուկի և ժամանակի խնդիրները, որոնք առաջանում են նույն կոճակի սեղմումից, որը մենք ցանկանում ենք կարդալ:
Այսպիսով, առայժմ, այնպես, ինչպես այն աշխատում է, մենք սեղմում ենք բանալին, այնուհետև սեղմում ենք կոճակը ՝ ADC- ն գործարկելու համար, այնուհետև բաց ենք թողնում և հուսով ենք, որ մեր սեղմած կոճակի երկուական արժեքը կհայտնվի անալիզատորի վրա:
Այսպիսով, եկեք գրենք մի ծածկագիր, որը կհասնի դրան:
Քայլ 6. Ո՞ր անջատիչ անջատիչները պետք է տեղադրենք:
Եկեք նախ մտածենք, թե ինչպես ենք մենք պատրաստվում ծածկագրել սա, որպեսզի վերահսկիչը կարողանա կարդալ ստեղնաշարի մուտքագրումը և այն վերածել թվային արժեքի, որը համապատասխանում է սեղմված կոճակին: Մենք պատրաստվում ենք օգտագործել անալոգային թվային փոխարկիչ (ADC) որը ներկառուցված է Atmega328p- ում: Մենք կօգտագործենք AREF- ը որպես մեր տեղեկատու լարման և ստեղնաշարի ելքը միացված կլինի PortC0- ին կամ PC0- ին: Նկատի ունեցեք, որ այս քորոցը կոչվում է նաև ADC0 անալոգային-թվային փոխարկիչի համար: 0. Լավ կլինի, որ դուք կարդաք ATmega328P- ի ընդհատումների 12.4 բաժինը և անալոգային-թվային փոխարկիչի 24-րդ գլուխը, նախքան մենք կստանանք սկսել կամ գոնե այդ բաժինները պատրաստ լինել հղման համար: Միկրոհսկիչը տեղադրելու համար, որպեսզի նա իմանա, թե ինչ անել անալոգային մուտքային ազդանշանի հետ և ինչպես փոխազդել մեր ծրագրի հետ, նախ պետք է սահմանել մի քանի տարբեր ADC հարակից գրանցման բիթեր: Դրանք ըստ էության համարժեք են առաջին համակարգիչների հին անջատիչներին: Դուք կամ անջատիչն անջատում եք, կամ անջատում, կամ նույնիսկ ավելի հետ միացնում եք մալուխները մի վարդակից և մյուսին, որպեսզի ճանապարհին այդ պատառաքաղին հասնող էլեկտրոնները մի դարպաս փակ տեսնեն, իսկ մյուսը բաց ՝ ստիպելով այն այլ ճանապարհով անցնել լաբիրինթոսում: միացում և դրանով իսկ այլ տրամաբանական առաջադրանք կատարել: Երբ հավաքագրման լեզվով կոդավորելը մենք մոտ ենք միկրոկառավարիչի այս գործառույթներին, ինչը դա առաջին հերթին գրավիչ բաներից մեկն է: Այն ավելի շատ «ձեռքի տակ» է, և շատ ավելի քիչ է կատարվում «կուլիսներում»: Այսպիսով, մի մտածեք այս գրանցամատյանները որպես հոգնեցուցիչ խնդիր: Սա այն է, ինչը հետաքրքիր է դարձնում հավաքների լեզուն: Մենք շատ անձնական հարաբերություններ ենք ձեռք բերում չիպի ներքին աշխատանքի և տրամաբանության հետ և ստիպում ենք այն անել հենց այն, ինչ ցանկանում ենք `ոչ ավել, ոչ պակաս: Tedամացույցի վատնված ցիկլեր չկան: Այսպիսով, ահա անջատիչների ցանկը, որոնք մենք պետք է սահմանենք.
- Անջատեք Power Reduction ADC բիթը ՝ PRADC- ը, որը PRR գրանցամատյանի 0 բիթն է, քանի որ եթե այս բիթը միացված է, այն կփակվի ADC- ն: Էլեկտրաէներգիայի նվազեցման ռեգիստրը, ըստ էության, միջոց է ՝ անջատելու տարբեր բաներ, որոնք էներգիա են օգտագործում, երբ դրանք ձեզ պետք չեն: Քանի որ մենք օգտագործում ենք ADC- ն, մենք ցանկանում ենք համոզվել, որ այն այս կերպ անջատված չէ: (Տես PRADC էջ 46)
- Ընտրեք ADC0- ի անալոգային մուտքային ալիքը `անջատելով MUX3… 0- ը ADC Multiplexer Selection (ADMUX) գրանցամատյանում (տե՛ս աղյուսակ 24-4 էջ 249) դրանք լռելյայն արդեն անջատված են, այնպես որ դա իրականում մեզ պետք չէ: Այնուամենայնիվ, ես այն ներառում եմ, քանի որ եթե երբևէ ADC0- ից այլ նավահանգիստ օգտագործեք, ձեզ անհրաժեշտ կլինի համապատասխանաբար փոխել այս անջատիչները: MUX3, MUX2, MUX1, MUX0- ի տարբեր համակցությունները թույլ են տալիս օգտագործել անալոգային որևէ պորտը որպես մուտքագրում, և դրանք կարող եք փոխել նաև թռիչքի ժամանակ, եթե ցանկանում եք միանգամից դիտել տարբեր անալոգային ազդանշանների փունջ:
- Անջատեք REFS0 և REFS1 բիթերը ADMUX գրանցամատյանում, որպեսզի մենք օգտագործենք AREF- ը որպես մեր հղման լարման, այլ ոչ թե ներքին տեղեկանքի (տես էջ 248):
- Միացրեք ADLAR բիթը ADMUX- ում, որպեսզի արդյունքը «կարգավորվի», այս ընտրությունը կքննարկենք հաջորդ քայլին:
- Տեղադրեք ADC0D բիթը թվային մուտքի անջատման գրանցամատյանում (DIDR0) ՝ PC0- ին թվային մուտքն անջատելու համար: Մենք օգտագործում ենք այդ նավահանգիստը անալոգային մուտքի համար, այնպես որ կարող ենք նաև անջատել դրա համար թվային մուտքը:
- Տեղադրեք ISC0 և ISC1 արտաքին ընդհատումների կառավարման գրանցամատյան A- ում (EICRA) ՝ նշելու համար, որ մենք ցանկանում ենք լարման ազդանշանի բարձրացող եզրին ձգել INT0 պին (PD2), տես էջ 71:
- Մաքրել INT0 և INT1 բիթերը Արտաքին ընդհատումների դիմակների գրանցամատյանում (EIMSK) `նշելու, որ մենք չենք օգտագործում ընդհատումներ այս քորոցում: Եթե մենք հնարավորություն ընձեռենք ընդհատումներն այս քորոցում, ապա մեզ անհրաժեշտ կլինի ընդհատիչ մշակող ՝ 0x0002 հասցեով, այլ փոխարենը մենք այն կարգավորում ենք այնպես, որ այս կապում ազդանշանը առաջացնի ADC- ի փոխարկումը, որի ավարտը կատարվում է ADC- ի փոխակերպման ամբողջական ընդհատմամբ: հասցե 0x002A: Տես էջ 72:
- ADC Enable (ADEN) բիթը (bit 7) տեղադրեք ADC կառավարման և կարգավիճակի գրանցամատյանում A (ADCSRA) ՝ ADC- ին միացնելու համար: Տես էջ 249:
- Մենք կարող ենք սկսել մեկ փոխակերպում ՝ սահմանելով ADC մեկնարկի փոխարկման բիթը (ADSC) ամեն անգամ, երբ ցանկանում ենք կարդալ անալոգային ազդանշանը, սակայն, առայժմ, ավելի լավ է, որ այն ինքնաբերաբար ընթերցվի, երբ ինչ -որ մեկը սեղմում է կոճակը, դրա փոխարեն մենք հնարավորություն կտանք ADC- ին Autotrigger Enable (ADATE) բիթը ADCSRA գրանցամատյանում, որպեսզի գործարկումը կատարվի ինքնաբերաբար:
- Մենք նաև ADPS2..0 բիթերը (AD Prescalar բիթեր) դնում ենք 111 -ի, այնպես որ ADC ժամացույցը CPU ժամացույցն է ՝ բաժանված 128 գործակցի:
- Մենք կընտրենք ADC- ի աղբյուր հանդիսացող PD2- ը, որը նաև կոչվում է INT0 (Արտաքին ընդհատման խնդրանք 0): Մենք դա անում ենք ՝ ADCSRB գրանցամատյանում տարբեր բիթեր փոխարկելով (տե՛ս Աղյուսակ 24-6, էջ 251): Աղյուսակից մենք տեսնում ենք, որ ցանկանում ենք ADTS0- ն անջատված, ADTS1- ը միացված և ADTS2- ը անջատված, որպեսզի ADC- ն անջատի այդ կապը: Ուշադրություն դարձրեք, եթե մենք ցանկանայինք անընդհատ անալոգային պորտից նմուշներ վերցնել, ինչպես, օրինակ, երբ կարդում էինք անընդհատ անալոգային ազդանշան (օրինակ ՝ ձայնի նմուշառում կամ այլ բան), մենք դա կդնում էինք Անվճար գործարկման ռեժիմի: PD2- ի վրա ձգանման կարգաբերման մեթոդը, որը առաջացնում է անալոգային պորտի PC0- ի ADC ընթերցում ՝ առանց ընդհատում առաջացնելու: Ընդհատումը կգա, երբ փոխակերպումն ավարտվի:
- Միացրեք ADC ընդհատման միացման (ADIE) բիթը ADCSRA գրանցամատյանում այնպես, որ երբ անալոգային թվային փոխակերպման ավարտին այն կստեղծի ընդհատում, որի համար կարող ենք գրել ընդհատումների մշակիչ և տեղադրել.org 0x002A:
- SREG- ում տեղադրեք I բիթը `ընդհատումները միացնելու համար:
Ercորավարժություն 1. Համոզվեք, որ կարդացել եք վերը նշված պարամետրերից յուրաքանչյուրի տվյալների թերթիկի համապատասխան բաժինները, որպեսզի հասկանաք, թե ինչ է կատարվում և ինչ կլինի, եթե դրանք փոխենք այլընտրանքային պարամետրերի:
Քայլ 7: Գրեք ընդհատումների կառավարիչը
Վերջին քայլին մենք տեսանք, որ մենք այն կարգավորել ենք այնպես, որ PD2- ի վրա հայտնաբերված բարձրանալը կհանգեցնի PC0- ի անալոգային թվային փոխակերպման, և երբ այս փոխակերպումն ավարտվի, այն կնետի ADC փոխակերպման ամբողջական ընդհատում: Այժմ մենք ուզում ենք ինչ -որ բան անել այս ընդհատմամբ: Եթե ուսումնասիրեք Աղյուսակ 12-6-ը 65-րդ էջում, կտեսնեք հնարավոր ընդհատումների ցանկը: Մենք արդեն տեսել ենք RESET- ի ընդհատումը 0x0000 հասցեով և Timer/Counter0 Overflow- ի ընդհատումը 0x0020 հասցեով ՝ նախորդ ձեռնարկներում: Այժմ մենք ուզում ենք դիտել ADC- ի ընդհատումը, որը մենք տեսնում ենք, որ աղյուսակը գտնվում է 0x002A հասցեում: Այսպիսով, մեր հավաքման լեզվի ծածկագրի սկզբում մեզ հարկավոր կլինի մի տող, որը կարդում է.
.org 0x002Arjmp ADC_int
որը կանցնի դեպի ADC_int պիտակավորված մեր ընդհատումների կարգավորիչը, երբ ADC- ն ավարտի փոխարկումը: Այսպիսով, ինչպե՞ս պետք է գրենք մեր ընդհատումների կարգավորիչը: ADC- ի գործելակերպը հետևյալ հաշվարկն է `
ADC = Vin x 1024 / Vref
Այսպիսով, եկեք տեսնենք, թե ինչ կլինի, եթե սեղմեմ ստեղնաշարի «վերահավաքման» կոճակը: Այդ դեպքում PC0- ի լարումը կփոխվի որոշ արժեքի, ասենք 1.52V, և քանի որ Vref- ը 5V- ում է, մենք կունենանք.
ADC = (1.52V) x 1024 / 5V = 311.296
և այսպես, այն կցուցադրվի որպես 311. Եթե մենք ցանկանայինք դա հետադարձել լարման, մենք պարզապես հակադարձում էինք հաշվարկը: Այնուամենայնիվ, մենք կարիք չենք ունենա դա անելու, քանի որ մեզ չեն հետաքրքրում փաստացի լարումները միայն դրանք տարբերելու մեջ: Երբ փոխակերպումն ավարտված է, արդյունքը պահվում է 10-բիթանոց համարում, որը տեղադրված է ADCH և ADCL գրանցամատյաններում, և մենք պատճառ ենք դարձել, որ այն «կարգավորվի», ինչը նշանակում է, որ 10 բիթերը սկսվում են ADCH- ի 7-րդ բիթից և իջնում մինչև բիթ 6 ADCL- ի (այս երկու գրանցամատյաններում կա ընդհանուր 16 բիթ, և մենք օգտագործում ենք դրանցից միայն 10 -ը, այսինքն `1024 ալիք): Եթե ուզում էինք, ADLAR բիթը մաքրելով ADMUX գրանցամատյանում կարող էինք ունենալ «ճիշտ ճշգրտված» արդյունք: Պատճառն այն է, որ մենք ընտրում ենք ձախը ճշգրտվածը, քանի որ մեր ազդանշանները բավականաչափ հեռու են միմյանցից, որ ալիքի համարի վերջին երկու թվանշանները համապատասխան չեն և հավանաբար պարզապես աղմուկ են, այնպես որ մենք կտարբերենք սեղմիչներն օգտագործելով միայն վերին 8 թվանշանները, այլ կերպ ասած, մենք միայն պետք է նայենք ADCH- ին ՝ պարզելու համար, թե որ կոճակը սեղմված է: Այսպիսով, մեր ընդհատիչ կարգավորիչը պետք է պարզապես կարդա ADCH- ի համարը գրանցեք, փոխարկեք այդ թիվը ստեղնաշարի արժեքի, այնուհետև ուղարկեք այդ արժեքը մեր ռեեստրի անալիզատորի LED- ներին, որպեսզի մենք կարողանանք ստուգել, որ «9» ասելով, կհանգեցնի «00001001» -ին համապատասխան LED- ի լուսավորությանը: Նախքան դա անելը չնայած մենք պետք է նախ տեսնենք, թե ինչ է հայտնվում ADCH- ում, երբ սեղմում ենք տարբեր կոճակները: Այսպիսով, եկեք գրենք մի պարզ ընդհատման կարգավորիչ, որը պարզապես ուղարկում է ADCH- ի բովանդակությունը անալիզատորի ցուցադրման վրա: Այսպիսով, ահա այն, ինչ մեզ պետք է.
ADC_int: lds անալիզատոր, ADCH; բեռնել ADCH- ի արժեքը մեր անալիզատորների մեջ EIFR, 0; մաքրել արտաքին ընդհատման դրոշը, որպեսզի այն պատրաստ լինի նորից գնալ
Մինչ այժմ, դուք պետք է կարողանաք պարզապես պատճենել կոդը մեր անալիզատորից 5 -րդ ձեռնարկում և ավելացնել այս ընդհատումը և միացման պարամետրերը և գործարկել այն: Ercորավարժություն 2. Գրեք ծածկագիրը և գործարկեք այն: Ստուգեք, որ ADCH- ը ցուցադրվի ձեր անալիզատորի էկրանին: Փորձեք մի քանի անգամ սեղմել նույն ստեղնը: Դուք միշտ նույն արժեքը ստանում եք ADCH- ում:
Քայլ 8: Նշեք ստեղնաշարի արժեքները
Այն, ինչ մենք հիմա պետք է անենք, ADCH- ի արժեքները փոխակերպել սեղմված ստեղնին համապատասխան թվերի: Մենք դա անում ենք ՝ գրելով ADCH- ի բովանդակությունը յուրաքանչյուր սեղմման համար, այնուհետև այն վերածելով տասնորդականի, ինչպես ես նկարում: Մեր ընդհատումների մշակման ռեժիմում մենք կհամարենք արժեքների մի ամբողջ շարք, որը համապատասխանում է յուրաքանչյուր սեղմման, այնպես որ ADC- ն այդ տիրույթում գտնվող ցանկացած բան կտտացնի տվյալ սեղմման վրա:
Ercորավարժություն 3. Կատարեք այս քարտեզագրումը, ապա նորից գրեք ADC- ի ընդհատման ռեժիմը:
Ահա թե ինչ եմ ստացել իմի համար (ձերն ամենայն հավանականությամբ այլ կլինի): Ուշադրություն դարձրեք, որ ես այն ստեղծել եմ մի շարք արժեքներով `յուրաքանչյուր սեղմման համար:
ADC_int: Արտաքին ընդհատումների handlerclr անալիզատոր; պատրաստվել նոր համարների կոճակին H, ADCH; ADC- ն թարմացվում է, երբ ADCH- ը կարդացվում է clccpi կոճակ, 240brlo PC+3; եթե ADCH- ն ավելի մեծ է, ապա դա 1ldi անալիզատոր է, 1; այնպես որ բեռի անալիզատորը 1rjmp վերադարձով; և վերադարձնել clccpi կոճակը H, 230; եթե ADCH- ն ավելի մեծ է, քան 2brlo PC+3ldi անալիզատոր, 2rjmp վերադարձի clccpi կոճակ H, 217brlo PC+3ldi անալիզատոր, 3rjmp վերադարձի clccpi կոճակ H, 203brlo PC+3ldi անալիզատոր, 4rjmp վերադարձի clccpi կոճակ, 187brlo PC+3ldi անալիզատոր, 5rjmp վերադարձի clccpi կոճակ, 155brlo PC+3ldi անալիզատոր, 6rjmp վերադարձի clccpi կոճակ H, 127brlo PC+3ldi անալիզատոր, 255; մենք ֆլեշը կդնենք որպես բոլոր onrjmp վերադարձի clccpi կոճակ, 115brlo PC+3ldi անալիզատոր, 7rjmp վերադարձի clccpi կոճակ H, 94brlo PC+3ldi անալիզատոր, 8rjmp վերադարձի clccpi կոճակ, 62brlo PC+3ldi անալիզատոր, 9rjmp վերադարձի clccpi կոճակ, 37brlo PC+3ldi անալիզատոր, 0b11110000; աստղանիշը onrjmp վերադարձի clccpi կոճակի վերևի կեսն է, 28brlo PC+3ldi անալիզատոր, 0rjmp վերադարձի clccpi կոճակը H, 17brlo PC+3ldi անալիզատոր, 0b00001111; hash նշանը ներքևի կեսն է onrjmp վերադարձի clccpi կոճակը, 5brlo PC+3ldi անալիզատոր, 0b11000011; վերահաշվարկը վերևում 2 ներքևում է 2rjmp վերադարձի ldi անալիզատոր, 0b11011011; հակառակ դեպքում սխալ է տեղի ունեցել return: reti
Քայլ 9. Կոդ և տեսանյութ 1 -ին տարբերակի համար
Ես կցել եմ ստեղնաշարի վարորդի այս առաջին տարբերակի իմ ծածկագիրը: Այս մեկում դուք պետք է սեղմել ստեղնը, այնուհետև սեղմել կոճակը, որպեսզի ADC- ն կարդա ստեղնաշարի մուտքը: Այն, ինչ մենք նախընտրում ենք ունենալ, ոչ մի կոճակ չէ, այլ փոխակերպում կատարելու ազդանշանը գալիս է հենց ստեղնից: ercորավարժություններ 3. Հավաքեք և վերբեռնեք այս ծածկագիրը և փորձեք այն: Հնարավոր է, որ ստիպված լինեք փոխելու տարբեր փոխակերպման շեմերը `համապատասխանելու ձեր սեղմման լարման, քանի որ դրանք, ամենայն հավանականությամբ, տարբերվում են իմից: Ի՞նչ կլինի, եթե կոճակի փոխարեն փորձեք օգտագործել ստեղնաշարի մուտքը ինչպես ADC0- ի, այնպես էլ արտաքին ընդհատման քորոցի համար: Ես կցեմ նաև մեր սեղմիչի վարորդի այս առաջին տարբերակի աշխատանքի տեսանյութը: Դուք կնկատեք, որ իմ կոդի մեջ կա Stack ցուցիչը նախաստորագրող հատված: Կան տարբեր գրանցամատյաններ, որոնք մենք գուցե ցանկանանք հրել և թռցնել կույտից, երբ մենք շահարկում ենք փոփոխականներ և այլ բաներ, և կան նաև գրանցամատյաններ, որոնք գուցե ցանկանանք պահպանել և վերականգնել ավելի ուշ: Օրինակ, SREG- ը գրանցամատյան է, որը չի պահպանվում ընդհատումների միջև, ուստի տարբեր դրոշներ, որոնք սահմանվում և մաքրվում են գործողությունների արդյունքում, կարող են փոխվել, եթե ընդհատումը տեղի է ունենում ինչ -որ բանի մեջտեղում: Այնպես որ, ամենալավն այն է, որ SREG- ը մղեք միջուկի `ընդհատման գործարկիչի սկզբում, այնուհետև նորից անջատեք այն ընդհատման կառավարիչի վերջում: Ես այն տեղադրել եմ ծածկագրում ՝ ցույց տալու համար, թե ինչպես է այն սկզբնավորվում և կանխատեսելու, թե ինչպես դա մեզ ավելի ուշ պետք կգա, բայց քանի որ մեզ համար միևնույն է, թե ինչ է կատարվում SREG- ի հետ մեր կոդի ընդհատումների ժամանակ, ես դրա համար չեմ օգտագործել կույտը: որ ես օգտագործել եմ shift գործողությունը ՝ գրանցամատյաններում սկզբնականացնելիս տարբեր բիթեր սահմանելու համար: Օրինակ ՝ տողում.
ldi տեմպ, (1 <
Վերևի ծածկագրի առաջին տողում «<<» հրամանը հերթափոխի գործողություն է: Այն ըստ էության վերցնում է 1 -ի երկուական թիվը, որը 0b00000001 է և այն տեղափոխում է ձախ ՝ ISC01 թվի չափով: Սա EICRA գրանցամատյանում ISC01 անունով բիտի դիրքն է: Քանի որ ISC01- ը բիթ 1 է, 1 թիվը տեղափոխվում է ձախ 1 դիրք ՝ 0b00000010 դառնալու համար: Նմանապես երկրորդը ՝ ISC00- ը, EICRA- ի բիթ 0 -ն է, ուստի թիվ 1 -ի տեղաշարժը զրոյական դիրքեր է ձախ: Եթե նայեք, նորից նայեք m328Pdef.inc ֆայլին, որը դուք ներբեռնել եք առաջին ձեռնարկում և որից հետո օգտագործում եք evrr- ը, կտեսնեք, որ դա պարզապես.. Equ »հայտարարությունների երկար ցանկն է: Դուք կգտնեք, որ ISC01- ը հավասար է 1 -ի: Հավաքողը դրա յուրաքանչյուր օրինակը փոխարինում է 1 -ով, նախքան որևէ բան հավաքելը սկսելը: Նրանք պարզապես գրանցման բիթերի անուններ են, որոնք կօգնեն մեզ ՝ մարդկանց, կարդալ և գրել ծածկագիր: Այժմ, վերը նշված երկու հերթափոխի գործողությունների միջև ուղղահայաց գիծը տրամաբանական «կամ» գործողություն է: Ահա հավասարումը.
0b00000010 | 0b00000001 = 0b00000011
և սա այն է, ինչ մենք բեռնում ենք (օգտագործելով «ldi») ջերմաստիճանի մեջ: Պատճառն այն է, որ մարդիկ օգտագործում են այս մեթոդը արժեքներ գրանցամատյանում բեռնելու համար, այն է, որ այն թույլ է տալիս օգտվել բիթի անունից միայն թվի փոխարեն, և դա կոդն ավելի հեշտ է կարդալ: Կան նաև երկու այլ տեխնիկա, որոնք մենք օգտագործել ենք: Մենք օգտագործում ենք «ori» և «andi» հրահանգները: Սրանք թույլ են տալիս համապատասխանաբար տեղադրել և մաքրել բիթեր ՝ առանց գրանցամատյանում այլ բիթերի փոխելու: Օրինակ, երբ ես օգտագործում էի
օրի ջերմաստիճան, (1
այս «կամ» -ի ջերմաստիճանը 0b00000001- ով, որը զրոյի բիթում դնում է 1 և մնացածը թողնում է անփոփոխ: Նաև այն ժամանակ, երբ մենք գրում էինք
andi temp, 0b11111110
սա փոխում է ջերմաստիճանի զրոյական բիթը 0 -ի և մնացած բոլորն անփոփոխ է թողնում:
Ercորավարժություն 4. Դուք պետք է անցնեք ծածկագիրը և համոզվեք, որ հասկանում եք յուրաքանչյուր տող: Ձեզ համար կարող է հետաքրքիր լինել գտնել գործեր կատարելու ավելի լավ մեթոդներ և ավելի լավ ծրագիր գրել: Իրերը կոդավորելու հարյուր եղանակ կա, և ես վստահ եմ, որ դուք կարող եք գտնել շատ ավելի լավ միջոց, քան իմը: Կարող եք նաև գտնել (թող Աստված չանի!) Սխալներ և բացթողումներ: Այդ դեպքում ես անպայման կցանկանայի լսել դրանց մասին, որպեսզի դրանք շտկվեն:
Լավ, հիմա եկեք տեսնենք ՝ կարո՞ղ ենք ազատվել այդ ավելորդ կոճակից…
Քայլ 10: 2 -րդ տարբերակի ծածկագիր
Կոճակից ազատվելու ամենապարզ միջոցը պարզապես ընդհանրապես հեռացնելն է, մոռանալ PB2- ի մուտքը և պարզապես ADC- ն անցնել «Անվճար գործարկման ռեժիմի»:
Այլ կերպ ասած, պարզապես փոխեք ADCSRB գրանցամատյանը այնպես, որ ADTS2, ADTS1 և ADTS0 բոլորը զրո են:
Այնուհետև ADCSRA- ի ADSC բիթը սահմանեք 1, որը կսկսի առաջին փոխարկումը:
Այժմ վերբեռնեք այն ձեր միկրոկառավարիչի վրա և կտեսնեք, որ ճիշտ թիվը հայտնվում է էկրանին, երբ սեղմում եք կոճակը և միայն այն ժամանակ, երբ սեղմում եք կոճակը: Դա պայմանավորված է նրանով, որ ADC- ն անընդհատ նմուշառում է ADC0 նավահանգիստը և ցուցադրում արժեքը: Երբ ձեր մատը հանում եք կոճակից, «կոճակի վերադարձը» կհանգեցնի մի քանի պատահական արժեքների շատ արագ առաջացմանը, այնուհետև այն կվերադառնա 0 Վ մուտքի: Մեր կոդի մեջ մենք ունենք այս 0V- ն ՝ որպես 0b11011011 (քանի որ «0» ստեղնը արդեն օգտագործում է 0b00000000 ցուցադրման արժեքը)
Սա այն լուծումը չէ, որը մենք ցանկանում ենք, չնայած երկու պատճառով. Նախ մենք չենք ուզում ստիպված պահել կոճակը: Մենք ցանկանում ենք մեկ անգամ սեղմել այն և ցուցադրել համարը (կամ օգտագործվել նոր դասագրքում ՝ հետագա ձեռնարկում): Երկրորդ, մենք չենք ցանկանում անընդհատ նմուշառել ADC0- ը: Մենք ցանկանում ենք, որ այն վերցնի մեկ ընթերցում, փոխակերպի այն, այնուհետև քնի, մինչև նոր սեղմումը նոր փոխակերպում առաջացնի: Անվճար վազքի ռեժիմը լավագույնն է, եթե միակ բանը, որ ցանկանում եք անել միկրոկառավարիչը, անընդհատ կարդալ անալոգային մուտքագրում է, օրինակ, եթե ցանկանում եք ցուցադրել իրական ժամանակի ջերմաստիճան կամ այլ բան:
Այսպիսով, եկեք գտնենք մեկ այլ լուծում…
Քայլ 11: Ինչպե՞ս ենք ազատվում կոճակից: Տարբերակ 3
Կան բազմաթիվ եղանակներ, որոնցով մենք կարող ենք շարունակել: Սկզբում մենք կարող էինք սարքաշար ավելացնել կոճակից ազատվելու համար: Օրինակ, մենք կարող ենք փորձել տրանզիստոր դնել միացման մեջ ՝ սեղմիչի ելքային գծում, որպեսզի այն մի փոքր հոսանք վերցնի ելքից և 5 Վ իմպուլս ուղարկի անջատիչ PD2 փինին:
Այնուամենայնիվ, դա, ամենայն հավանականությամբ, գոնե չափազանց աղմկոտ կլիներ, և վատագույն դեպքում դա բավական ժամանակ չէր տա ստեղնաշարի ճշգրիտ ընթերցման համար, քանի որ ստեղնաշարի լարման ելքը ժամանակ չի ունենա կայունանալու մինչև ADC- ի ընթերցումը գրավելը:
Այսպիսով, մենք ավելի շուտ կգտնենք ծրագրային լուծում: Այն, ինչ մենք կցանկանայինք անել, PD2 կապում ավելացնել ընդհատում և դրա համար գրել ընդհատիչ մշակող, որը կոչում է ստեղնաշարի քորոցի մեկ ընթերցում: Այլ կերպ ասած, մենք ազատվում ենք ADC- ի autotrigger- ի ընդհատումից և ավելացնում արտաքին ընդհատում, որը ADC- ն կանչում է դրա ներսում: Այդ կերպ ADC- ի ընթերցման ազդանշանը գալիս է PD2 ազդանշանի արդեն հայտնվելուց հետո, և դա կարող է բավականաչափ ժամանակ տալ ճշգրիտ լարման կայունացմանը, նախքան PC0 փին կարդալը և փոխարկելը: Մենք դեռ կունենայինք ADC- ի ավարտման ընդհատում, որը վերջում արդյունքը դուրս է բերում անալիզատորի ցուցադրմանը:
Իմաստալի? Դե եկեք անենք…
Նայեք կցված նոր ծածկագրին:
Դուք տեսնում եք հետևյալ փոփոխությունները.
- Մենք ավելացրեցինք rjmp.org 0x0002 հասցեով ՝ INT0 արտաքին ընդհատումը կարգավորելու համար
- Մենք փոխեցինք EIMSK գրանցամատյանը `նշելով, որ ցանկանում ենք ընդհատել INT0 կապում
- Մենք փոխեցինք ADATE- ի քորոցը ADCSRA գրանցամատյանում ՝ ավտոտրիգերինգը անջատելու համար
- Մենք ազատվեցինք ADCSRB- ի կարգավորումներից, քանի որ դրանք անտեղի են, երբ ADATE- ն անջատված է
- Մենք այլևս ստիպված չենք վերականգնել արտաքին ձգան դրոշը, քանի որ INT0 ընդհատման ռեժիմը դա անում է ինքնաբերաբար, երբ այն ավարտվում է. Նախկինում մենք չունեինք ընդհատման ռեժիմ, մենք պարզապես ազդանշանը ADC- ն անջատեցինք այդ քորոցում, ուստի ստիպված եղանք ձեռքով մաքրել այդ դրոշը:
Այժմ ընդհատումների կառավարիչում մենք պարզապես ADC- ից մեկ փոխարկում ենք անվանում:
Ercորավարժություն 5. Գործարկեք այս տարբերակը և տեսեք, թե ինչ է տեղի ունենում:
Քայլ 12: Կոդ և տեսանյութ աշխատանքային տարբերակի համար
Ինչպես տեսանք վերջին տարբերակում, կոճակի ընդհատումը այնքան էլ լավ չի աշխատում, քանի որ ընդհատումը գործարկվում է բարձրացող եզրին ՝ PD2- ը ամրացնելու համար, այնուհետև ընդհատումների կարգավորիչը կանչում է ADC- ի փոխարկումը: Այնուամենայնիվ, ADC- ն այնուհետև ստանում է լարման ընթերցում, նախքան այն կայունանալը, ուստի կարդում է անհեթեթություն:
Մեզ պետք է ուշացում մտցնել PD2- ի ընդհատման և PC0- ի ADC ընթերցման միջև: Մենք դա կանենք ՝ ավելացնելով ժմչփ/հաշվիչ, հաշվիչի արտահոսքի ընդհատում և հետաձգման ռեժիմ: Բարեբախտաբար, մենք արդեն գիտենք, թե ինչպես դա անել 3 -րդ ձեռնարկից: Այսպիսով, մենք պարզապես պատճենելու և տեղադրելու ենք համապատասխան կոդը այնտեղից:
Ես տվել եմ ստացված կոդը և տեսանյութ, որը ցույց է տալիս այն շահագործման մեջ:
Դուք կնկատեք, որ ընթերցումները այնքան ճշգրիտ չեն, որքան կարելի էր հույս ունենալ: Ամենայն հավանականությամբ, դա պայմանավորված է մի շարք աղբյուրներով.
- մենք սեղմում ենք ստեղնաշարի լարման ելքից PD2- ի վրա ձգելու համար, որն ազդում է PC0- ի ընթերցման վրա:
- մենք իսկապես չգիտենք, թե որքան երկար հետաձգել ձգանից ՝ լավագույն ընթերցումը ստանալու համար:
- ADC- ի փոխակերպումն ավարտելու համար անհրաժեշտ է մի քանի ցիկլ, ինչը նշանակում է, որ մենք չենք կարող արագ կրակել ստեղնաշարի վրա:
- հավանաբար աղմուկ կա հենց ստեղնաշարի մեջ:
- և այլն…
Այսպիսով, չնայած մեզ հաջողվեց ստեղնաշարը գործի դնել, և այժմ մենք կարող էինք այն օգտագործել ծրագրերում ՝ օգտագործելով ստեղնաշարի արժեքները այլ կերպ ՝ դրանք պարզապես անալիզատորի էկրանին թողնելու փոխարեն, բայց դա շատ ճշգրիտ չէ և շատ նյարդայնացնում է: Այդ պատճառով ես կարծում եմ, որ ստեղնաշարերը միացնելու լավագույն միջոցը պարզապես այն է, որ ստեղնաշարից յուրաքանչյուր ելք կպցնել մեկ այլ նավահանգստի և որոշել, թե որ բանալին է սեղմվում, թե որ նավահանգիստներում է լարվածություն նկատվում: Դա հեշտ է, շատ արագ և շատ ճշգրիտ:
Իրականում, կան միայն երկու պատճառ, թե ինչու մեկը կցանկանա վարել ստեղնաշար այնպես, ինչպես մենք այստեղ ենք արել.
- Այն օգտագործում է մեր միկրոկառավարիչի 8 -ի փոխարեն միայն 2 կապում:
- Հիանալի ծրագիր է միկրոկառավարիչի վրա ADC- ի տարբեր ասպեկտներ ցուցադրելը, որը տարբերվում է այն ստանդարտ իրերից, որոնց կարելի է հանդիպել այնտեղ ՝ ջերմաստիճանի ընթերցումներ, պոտենցիոմետրերի շրջադարձ և այլն: այլ ոչ թե պարզապես պրոցեսորի խայթող ռեժիմի ազատ գործարկում:
Ամեն դեպքում, ահա ձեզ համար մի քանի վարժություններ.
Ercորավարժություն 6. Նորից գրեք ADC- ի փոխակերպման ամբողջական ընդհատումների կարգավորիչը `Փնտրման աղյուսակ օգտագործելու համար: Այսինքն Որպեսզի այն ստուգի անալոգային արժեքը աղյուսակի առաջին կետի հետ, և եթե այն ավելի մեծ է, այն վերադառնում է ընդհատումից, եթե դա այդպես չէ, ապա այն Z- ն ավելացնում է աղյուսակի հաջորդ կետին և նորից ճյուղավորվում դեպի թեստ: Սա կկրճատի ծածկագիրը և կմաքրի ընդհատվող առօրյան և կդարձնի ավելի գեղեցիկ: (Հաջորդ քայլը ես կտամ հնարավոր լուծմանը) iseորավարժություն 7. Միացրեք ձեր ստեղնաշարը միկրոկառավարիչի 8 կապի վրա և գրեք դրա համար պարզ վարորդը և զգացեք, թե որքան գեղեցիկ է այն: Կարո՞ղ եք մտածել մեր մեթոդն ավելի լավ աշխատեցնելու մի քանի եղանակ:
Այս ամենը այս ձեռնարկի համար է: Վերջնական տարբերակը կցել եմ ցուցիչներով: Երբ մենք մոտենում ենք մեր վերջնական նպատակին, մենք 9 -րդ ձեռնարկում եւս մեկ անգամ կօգտագործենք ստեղնաշարը `ցույց տալու, թե ինչպես կառավարել դրա հետ յոթ հատվածային էկրաններ (և կառուցել ինչ -որ հետաքրքիր բան, որն օգտագործում է հեռախոսի ստեղնաշարի լրացուցիչ ստեղները), այնուհետև մենք Փոխարենը անցեք կոճակների սեղմումներով բաների վերահսկմանը (քանի որ այդ մեթոդը ավելի լավ է համապատասխանում այն վերջնական արտադրանքին, որին մենք պատրաստում ենք այս ձեռնարկներով), և մենք պարզապես կողպելու ենք ստեղնաշարը:
Կտեսնվենք հաջորդ անգամ!
Խորհուրդ ենք տալիս:
AVR Assembler ձեռնարկ 2: 4 քայլ
AVR Assembler Tutorial 2: Այս ձեռնարկը շարունակությունն է " AVR Assembler Tutorial 1 " Եթե դուք չեք անցել ձեռնարկ 1 -ը, ապա պետք է դադարեցնեք և առաջինը դա անեք: Այս ձեռնարկում մենք կշարունակենք մեր ուսումնասիրությունը atmega328p u
AVR Assembler ձեռնարկ 1: 5 քայլ
AVR Assembler Tutorial 1. Ես որոշել եմ գրել մի շարք ձեռնարկներ, թե ինչպես գրել հավաքման լեզվի ծրագրեր Atmega328p- ի համար, որը Arduino- ում օգտագործվող միկրոկոնտրոլերն է: Եթե մարդիկ շահագրգռված մնան, ես կշարունակեմ շաբաթական մեկ անգամ դուրս հանել, մինչև որ վերջանա
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 Tutorial 11: 5 Քայլեր
AVR Assembler Tutorial 11. Բարի գալուստ Tutorial 11: Այս կարճ ձեռնարկում մենք վերջապես պատրաստվում ենք կառուցել մեր վերջնական նախագծի առաջին մասը: Առաջին բանը, որ դուք պետք է անեք, գնալ այս ձեռնարկի վերջին քայլին և դիտել տեսանյութը: Հետո եկեք այստեղ: [դադար, մինչ դու