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

AVR Assembler Tutorial 7: 12 քայլ
AVR Assembler Tutorial 7: 12 քայլ

Video: AVR Assembler Tutorial 7: 12 քայլ

Video: AVR Assembler Tutorial 7: 12 քայլ
Video: Assembly Language Programming with ARM – Full Tutorial for Beginners 2024, Նոյեմբեր
Anonim
AVR Assembler ձեռնարկ 7
AVR Assembler ձեռնարկ 7

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

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

  1. ստեղնաշար: Դուք կարող եք գնել մեկը կամ կարող եք անել այն, ինչ ես արել եմ և մաքրեք մեկը:
  2. Ստեղնաշարի համար 2 կին վերնագիր (եթե մաքրում եք մեկը)
  3. միացնող լարեր
  4. մի տախտակ
  5. 4 1 Կոմի դիմադրիչներ
  6. 1 15 Կոմի դիմադրություն
  7. 1 3.3 Կոմի դիմադրություն
  8. 1 180 օմ դիմադրություն
  9. 1680 օմ դիմադրություն
  10. թվային բազմաչափ
  11. ձեր անալիզատորը ձեռնարկ 5 -ից

Կարող եք բաց թողնել առաջին մի քանի քայլերը, եթե արդեն ունեք ստեղնաշար և այն մաքրելու կարիք չունեք:

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

Քայլ 1. Լրացրեք ստեղնաշարը 1

Լրացրեք ստեղնաշարը 1
Լրացրեք ստեղնաշարը 1
Լրացրեք ստեղնաշարը 1
Լրացրեք ստեղնաշարը 1
Լրացրեք ստեղնաշարը 1
Լրացրեք ստեղնաշարը 1
Լրացրեք ստեղնաշարը 1
Լրացրեք ստեղնաշարը 1

Շատ վաղուց, երբ նույնիսկ ձեր տատիկն ու պապիկը պարզապես երեխաներ էին, մարդիկ օգտագործում էին այս տարօրինակ արտաքինով սարքերը, որոնց պատերը միացված էին երկար մալուխներ, միմյանց հետ շփվելու համար: Նրանք կոչվում էին «հեռախոսներ» և սովորաբար պլաստիկ էժան իրեր էին, որոնք ձեզ անհանգստացնող ձայն էին հաղորդում, երբ ինչ -որ մեկը զանգում էր ձեզ (ոչ թե այն, որ այսօրվա «Justասթին Բիբեր» -ի զանգերը հավասարապես նյարդայնացնող չեն): Ամեն դեպքում, այս սարքերն ունեին ստեղնաշարեր, որոնք շատ պարզ լարված էին և հեշտ է մաքրվել, և դրանց վրա կա 2 լրացուցիչ ստեղն («վերահասցեավորում» և «բռնկում») ստեղնաշարերից, որոնք կարող եք գնել, որոնք կարող եք ցանկանալ նորից օգտագործել: որպես «սլաքների ստեղներ», «ընտրացանկի ստեղներ» կամ այլ բան: Այսպիսով, մենք պատրաստվում ենք սկսել հին հեռախոսից ստեղնաշարի մաքրմամբ: Սկզբից վերցրեք հեռախոսը (ես օգտագործում եմ GE մեկը, ինչպես ցույց է տրված նկարներում) և անջատեք այն `էլեկտրագծերը պարզելու համար: Այնուհետև վերցրեք մի սայրը և կտրեք ստեղնաշարը պահող պլաստիկ փոքրիկ բռնակները և հանեք ստեղնաշարը:

Քայլ 2. Լրացրեք ստեղնաշարը 2

Լրացրեք ստեղնաշարը 2
Լրացրեք ստեղնաշարը 2
Լրացրեք ստեղնաշարը 2
Լրացրեք ստեղնաշարը 2
Լրացրեք ստեղնաշարը 2
Լրացրեք ստեղնաշարը 2

Այժմ վերցրեք PVC սղոց և կտրեք պլաստիկը բանալիների անցքերից, այնուհետև կտրեք եզրով ՝ խորությունը ճիշտ թողնելով բարակ ստեղնաշարից:

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

Ինձ դուր է գալիս երեք բարձրախոս հավաքել և գուցե մյուս բաները, ինչպիսիք են անջատիչները և այն, ինչ կան գրատախտակին: Այնուամենայնիվ, այս անգամ ես չեմ մաքրելու անջատիչներն ու իրերը, քանի որ այս պահին մենք այլ նպատակներ ունենք: Բացի այդ, այնտեղ կա TA31002 գծային IC, որը հեռախոսի զանգ է: Տվյալների թերթիկը հեշտությամբ կարելի է գտնել և ներբեռնել առցանց ՝ տալով պինուտը և հնարավորությունները: Այսպիսով, ես պատրաստվում եմ այն առայժմ զոդել տախտակին, իսկ հետո ավելի ուշ խաղալ դրա հետ: Ես կցանկանայի այն միացնել տատանումների հետ և տեսնել, թե ինչ հիանալի ազդակներ կարող եմ ստանալ դրանից: Գուցե նույնիսկ դռան զանգ կատարեք դրանից: Ով գիտի.

Ամեն դեպքում, երբ ավարտեք հեռախոսը քանդելը և մասերը մաքրելը, մենք կավարտենք մեր ստեղնաշարի պատրաստումը:

Քայլ 3. Լրացրեք ստեղնաշարը 3

Լրացրեք ստեղնաշարը 3
Լրացրեք ստեղնաշարը 3
Լրացրեք ստեղնաշարը 3
Լրացրեք ստեղնաշարը 3
Լրացրեք ստեղնաշարը 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. Ո՞ր անջատիչ անջատիչները պետք է տեղադրենք:

Որ Toggle Switches- ը պետք է տեղադրենք
Որ Toggle Switches- ը պետք է տեղադրենք

Եկեք նախ մտածենք, թե ինչպես ենք մենք պատրաստվում ծածկագրել սա, որպեսզի վերահսկիչը կարողանա կարդալ ստեղնաշարի մուտքագրումը և այն վերածել թվային արժեքի, որը համապատասխանում է սեղմված կոճակին: Մենք պատրաստվում ենք օգտագործել անալոգային թվային փոխարկիչ (ADC) որը ներկառուցված է Atmega328p- ում: Մենք կօգտագործենք AREF- ը որպես մեր տեղեկատու լարման և ստեղնաշարի ելքը միացված կլինի PortC0- ին կամ PC0- ին: Նկատի ունեցեք, որ այս քորոցը կոչվում է նաև ADC0 անալոգային-թվային փոխարկիչի համար: 0. Լավ կլինի, որ դուք կարդաք ATmega328P- ի ընդհատումների 12.4 բաժինը և անալոգային-թվային փոխարկիչի 24-րդ գլուխը, նախքան մենք կստանանք սկսել կամ գոնե այդ բաժինները պատրաստ լինել հղման համար: Միկրոհսկիչը տեղադրելու համար, որպեսզի նա իմանա, թե ինչ անել անալոգային մուտքային ազդանշանի հետ և ինչպես փոխազդել մեր ծրագրի հետ, նախ պետք է սահմանել մի քանի տարբեր ADC հարակից գրանցման բիթեր: Դրանք ըստ էության համարժեք են առաջին համակարգիչների հին անջատիչներին: Դուք կամ անջատիչն անջատում եք, կամ անջատում, կամ նույնիսկ ավելի հետ միացնում եք մալուխները մի վարդակից և մյուսին, որպեսզի ճանապարհին այդ պատառաքաղին հասնող էլեկտրոնները մի դարպաս փակ տեսնեն, իսկ մյուսը բաց ՝ ստիպելով այն այլ ճանապարհով անցնել լաբիրինթոսում: միացում և դրանով իսկ այլ տրամաբանական առաջադրանք կատարել: Երբ հավաքագրման լեզվով կոդավորելը մենք մոտ ենք միկրոկառավարիչի այս գործառույթներին, ինչը դա առաջին հերթին գրավիչ բաներից մեկն է: Այն ավելի շատ «ձեռքի տակ» է, և շատ ավելի քիչ է կատարվում «կուլիսներում»: Այսպիսով, մի մտածեք այս գրանցամատյանները որպես հոգնեցուցիչ խնդիր: Սա այն է, ինչը հետաքրքիր է դարձնում հավաքների լեզուն: Մենք շատ անձնական հարաբերություններ ենք ձեռք բերում չիպի ներքին աշխատանքի և տրամաբանության հետ և ստիպում ենք այն անել հենց այն, ինչ ցանկանում ենք `ոչ ավել, ոչ պակաս: Tedամացույցի վատնված ցիկլեր չկան: Այսպիսով, ահա անջատիչների ցանկը, որոնք մենք պետք է սահմանենք.

  1. Անջատեք Power Reduction ADC բիթը ՝ PRADC- ը, որը PRR գրանցամատյանի 0 բիթն է, քանի որ եթե այս բիթը միացված է, այն կփակվի ADC- ն: Էլեկտրաէներգիայի նվազեցման ռեգիստրը, ըստ էության, միջոց է ՝ անջատելու տարբեր բաներ, որոնք էներգիա են օգտագործում, երբ դրանք ձեզ պետք չեն: Քանի որ մենք օգտագործում ենք ADC- ն, մենք ցանկանում ենք համոզվել, որ այն այս կերպ անջատված չէ: (Տես PRADC էջ 46)
  2. Ընտրեք ADC0- ի անալոգային մուտքային ալիքը `անջատելով MUX3… 0- ը ADC Multiplexer Selection (ADMUX) գրանցամատյանում (տե՛ս աղյուսակ 24-4 էջ 249) դրանք լռելյայն արդեն անջատված են, այնպես որ դա իրականում մեզ պետք չէ: Այնուամենայնիվ, ես այն ներառում եմ, քանի որ եթե երբևէ ADC0- ից այլ նավահանգիստ օգտագործեք, ձեզ անհրաժեշտ կլինի համապատասխանաբար փոխել այս անջատիչները: MUX3, MUX2, MUX1, MUX0- ի տարբեր համակցությունները թույլ են տալիս օգտագործել անալոգային որևէ պորտը որպես մուտքագրում, և դրանք կարող եք փոխել նաև թռիչքի ժամանակ, եթե ցանկանում եք միանգամից դիտել տարբեր անալոգային ազդանշանների փունջ:
  3. Անջատեք REFS0 և REFS1 բիթերը ADMUX գրանցամատյանում, որպեսզի մենք օգտագործենք AREF- ը որպես մեր հղման լարման, այլ ոչ թե ներքին տեղեկանքի (տես էջ 248):
  4. Միացրեք ADLAR բիթը ADMUX- ում, որպեսզի արդյունքը «կարգավորվի», այս ընտրությունը կքննարկենք հաջորդ քայլին:
  5. Տեղադրեք ADC0D բիթը թվային մուտքի անջատման գրանցամատյանում (DIDR0) ՝ PC0- ին թվային մուտքն անջատելու համար: Մենք օգտագործում ենք այդ նավահանգիստը անալոգային մուտքի համար, այնպես որ կարող ենք նաև անջատել դրա համար թվային մուտքը:
  6. Տեղադրեք ISC0 և ISC1 արտաքին ընդհատումների կառավարման գրանցամատյան A- ում (EICRA) ՝ նշելու համար, որ մենք ցանկանում ենք լարման ազդանշանի բարձրացող եզրին ձգել INT0 պին (PD2), տես էջ 71:
  7. Մաքրել INT0 և INT1 բիթերը Արտաքին ընդհատումների դիմակների գրանցամատյանում (EIMSK) `նշելու, որ մենք չենք օգտագործում ընդհատումներ այս քորոցում: Եթե մենք հնարավորություն ընձեռենք ընդհատումներն այս քորոցում, ապա մեզ անհրաժեշտ կլինի ընդհատիչ մշակող ՝ 0x0002 հասցեով, այլ փոխարենը մենք այն կարգավորում ենք այնպես, որ այս կապում ազդանշանը առաջացնի ADC- ի փոխարկումը, որի ավարտը կատարվում է ADC- ի փոխակերպման ամբողջական ընդհատմամբ: հասցե 0x002A: Տես էջ 72:
  8. ADC Enable (ADEN) բիթը (bit 7) տեղադրեք ADC կառավարման և կարգավիճակի գրանցամատյանում A (ADCSRA) ՝ ADC- ին միացնելու համար: Տես էջ 249:
  9. Մենք կարող ենք սկսել մեկ փոխակերպում ՝ սահմանելով ADC մեկնարկի փոխարկման բիթը (ADSC) ամեն անգամ, երբ ցանկանում ենք կարդալ անալոգային ազդանշանը, սակայն, առայժմ, ավելի լավ է, որ այն ինքնաբերաբար ընթերցվի, երբ ինչ -որ մեկը սեղմում է կոճակը, դրա փոխարեն մենք հնարավորություն կտանք ADC- ին Autotrigger Enable (ADATE) բիթը ADCSRA գրանցամատյանում, որպեսզի գործարկումը կատարվի ինքնաբերաբար:
  10. Մենք նաև ADPS2..0 բիթերը (AD Prescalar բիթեր) դնում ենք 111 -ի, այնպես որ ADC ժամացույցը CPU ժամացույցն է ՝ բաժանված 128 գործակցի:
  11. Մենք կընտրենք ADC- ի աղբյուր հանդիսացող PD2- ը, որը նաև կոչվում է INT0 (Արտաքին ընդհատման խնդրանք 0): Մենք դա անում ենք ՝ ADCSRB գրանցամատյանում տարբեր բիթեր փոխարկելով (տե՛ս Աղյուսակ 24-6, էջ 251): Աղյուսակից մենք տեսնում ենք, որ ցանկանում ենք ADTS0- ն անջատված, ADTS1- ը միացված և ADTS2- ը անջատված, որպեսզի ADC- ն անջատի այդ կապը: Ուշադրություն դարձրեք, եթե մենք ցանկանայինք անընդհատ անալոգային պորտից նմուշներ վերցնել, ինչպես, օրինակ, երբ կարդում էինք անընդհատ անալոգային ազդանշան (օրինակ ՝ ձայնի նմուշառում կամ այլ բան), մենք դա կդնում էինք Անվճար գործարկման ռեժիմի: PD2- ի վրա ձգանման կարգաբերման մեթոդը, որը առաջացնում է անալոգային պորտի PC0- ի ADC ընթերցում ՝ առանց ընդհատում առաջացնելու: Ընդհատումը կգա, երբ փոխակերպումն ավարտվի:
  12. Միացրեք ADC ընդհատման միացման (ADIE) բիթը ADCSRA գրանցամատյանում այնպես, որ երբ անալոգային թվային փոխակերպման ավարտին այն կստեղծի ընդհատում, որի համար կարող ենք գրել ընդհատումների մշակիչ և տեղադրել.org 0x002A:
  13. 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 <> sts EICRA, տեմպ

Վերևի ծածկագրի առաջին տողում «<<» հրամանը հերթափոխի գործողություն է: Այն ըստ էության վերցնում է 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

Ինչպե՞ս ենք ազատվում կոճակից: Տարբերակ 3
Ինչպե՞ս ենք ազատվում կոճակից: Տարբերակ 3

Կան բազմաթիվ եղանակներ, որոնցով մենք կարող ենք շարունակել: Սկզբում մենք կարող էինք սարքաշար ավելացնել կոճակից ազատվելու համար: Օրինակ, մենք կարող ենք փորձել տրանզիստոր դնել միացման մեջ ՝ սեղմիչի ելքային գծում, որպեսզի այն մի փոքր հոսանք վերցնի ելքից և 5 Վ իմպուլս ուղարկի անջատիչ PD2 փինին:

Այնուամենայնիվ, դա, ամենայն հավանականությամբ, գոնե չափազանց աղմկոտ կլիներ, և վատագույն դեպքում դա բավական ժամանակ չէր տա ստեղնաշարի ճշգրիտ ընթերցման համար, քանի որ ստեղնաշարի լարման ելքը ժամանակ չի ունենա կայունանալու մինչև ADC- ի ընթերցումը գրավելը:

Այսպիսով, մենք ավելի շուտ կգտնենք ծրագրային լուծում: Այն, ինչ մենք կցանկանայինք անել, PD2 կապում ավելացնել ընդհատում և դրա համար գրել ընդհատիչ մշակող, որը կոչում է ստեղնաշարի քորոցի մեկ ընթերցում: Այլ կերպ ասած, մենք ազատվում ենք ADC- ի autotrigger- ի ընդհատումից և ավելացնում արտաքին ընդհատում, որը ADC- ն կանչում է դրա ներսում: Այդ կերպ ADC- ի ընթերցման ազդանշանը գալիս է PD2 ազդանշանի արդեն հայտնվելուց հետո, և դա կարող է բավականաչափ ժամանակ տալ ճշգրիտ լարման կայունացմանը, նախքան PC0 փին կարդալը և փոխարկելը: Մենք դեռ կունենայինք ADC- ի ավարտման ընդհատում, որը վերջում արդյունքը դուրս է բերում անալիզատորի ցուցադրմանը:

Իմաստալի? Դե եկեք անենք…

Նայեք կցված նոր ծածկագրին:

Դուք տեսնում եք հետևյալ փոփոխությունները.

  1. Մենք ավելացրեցինք rjmp.org 0x0002 հասցեով ՝ INT0 արտաքին ընդհատումը կարգավորելու համար
  2. Մենք փոխեցինք EIMSK գրանցամատյանը `նշելով, որ ցանկանում ենք ընդհատել INT0 կապում
  3. Մենք փոխեցինք ADATE- ի քորոցը ADCSRA գրանցամատյանում ՝ ավտոտրիգերինգը անջատելու համար
  4. Մենք ազատվեցինք ADCSRB- ի կարգավորումներից, քանի որ դրանք անտեղի են, երբ ADATE- ն անջատված է
  5. Մենք այլևս ստիպված չենք վերականգնել արտաքին ձգան դրոշը, քանի որ INT0 ընդհատման ռեժիմը դա անում է ինքնաբերաբար, երբ այն ավարտվում է. Նախկինում մենք չունեինք ընդհատման ռեժիմ, մենք պարզապես ազդանշանը ADC- ն անջատեցինք այդ քորոցում, ուստի ստիպված եղանք ձեռքով մաքրել այդ դրոշը:

Այժմ ընդհատումների կառավարիչում մենք պարզապես ADC- ից մեկ փոխարկում ենք անվանում:

Ercորավարժություն 5. Գործարկեք այս տարբերակը և տեսեք, թե ինչ է տեղի ունենում:

Քայլ 12: Կոդ և տեսանյութ աշխատանքային տարբերակի համար

Ինչպես տեսանք վերջին տարբերակում, կոճակի ընդհատումը այնքան էլ լավ չի աշխատում, քանի որ ընդհատումը գործարկվում է բարձրացող եզրին ՝ PD2- ը ամրացնելու համար, այնուհետև ընդհատումների կարգավորիչը կանչում է ADC- ի փոխարկումը: Այնուամենայնիվ, ADC- ն այնուհետև ստանում է լարման ընթերցում, նախքան այն կայունանալը, ուստի կարդում է անհեթեթություն:

Մեզ պետք է ուշացում մտցնել PD2- ի ընդհատման և PC0- ի ADC ընթերցման միջև: Մենք դա կանենք ՝ ավելացնելով ժմչփ/հաշվիչ, հաշվիչի արտահոսքի ընդհատում և հետաձգման ռեժիմ: Բարեբախտաբար, մենք արդեն գիտենք, թե ինչպես դա անել 3 -րդ ձեռնարկից: Այսպիսով, մենք պարզապես պատճենելու և տեղադրելու ենք համապատասխան կոդը այնտեղից:

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

Դուք կնկատեք, որ ընթերցումները այնքան ճշգրիտ չեն, որքան կարելի էր հույս ունենալ: Ամենայն հավանականությամբ, դա պայմանավորված է մի շարք աղբյուրներով.

  1. մենք սեղմում ենք ստեղնաշարի լարման ելքից PD2- ի վրա ձգելու համար, որն ազդում է PC0- ի ընթերցման վրա:
  2. մենք իսկապես չգիտենք, թե որքան երկար հետաձգել ձգանից ՝ լավագույն ընթերցումը ստանալու համար:
  3. ADC- ի փոխակերպումն ավարտելու համար անհրաժեշտ է մի քանի ցիկլ, ինչը նշանակում է, որ մենք չենք կարող արագ կրակել ստեղնաշարի վրա:
  4. հավանաբար աղմուկ կա հենց ստեղնաշարի մեջ:
  5. և այլն…

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

Իրականում, կան միայն երկու պատճառ, թե ինչու մեկը կցանկանա վարել ստեղնաշար այնպես, ինչպես մենք այստեղ ենք արել.

  1. Այն օգտագործում է մեր միկրոկառավարիչի 8 -ի փոխարեն միայն 2 կապում:
  2. Հիանալի ծրագիր է միկրոկառավարիչի վրա ADC- ի տարբեր ասպեկտներ ցուցադրելը, որը տարբերվում է այն ստանդարտ իրերից, որոնց կարելի է հանդիպել այնտեղ ՝ ջերմաստիճանի ընթերցումներ, պոտենցիոմետրերի շրջադարձ և այլն: այլ ոչ թե պարզապես պրոցեսորի խայթող ռեժիմի ազատ գործարկում:

Ամեն դեպքում, ահա ձեզ համար մի քանի վարժություններ.

Ercորավարժություն 6. Նորից գրեք ADC- ի փոխակերպման ամբողջական ընդհատումների կարգավորիչը `Փնտրման աղյուսակ օգտագործելու համար: Այսինքն Որպեսզի այն ստուգի անալոգային արժեքը աղյուսակի առաջին կետի հետ, և եթե այն ավելի մեծ է, այն վերադառնում է ընդհատումից, եթե դա այդպես չէ, ապա այն Z- ն ավելացնում է աղյուսակի հաջորդ կետին և նորից ճյուղավորվում դեպի թեստ: Սա կկրճատի ծածկագիրը և կմաքրի ընդհատվող առօրյան և կդարձնի ավելի գեղեցիկ: (Հաջորդ քայլը ես կտամ հնարավոր լուծմանը) iseորավարժություն 7. Միացրեք ձեր ստեղնաշարը միկրոկառավարիչի 8 կապի վրա և գրեք դրա համար պարզ վարորդը և զգացեք, թե որքան գեղեցիկ է այն: Կարո՞ղ եք մտածել մեր մեթոդն ավելի լավ աշխատեցնելու մի քանի եղանակ:

Այս ամենը այս ձեռնարկի համար է: Վերջնական տարբերակը կցել եմ ցուցիչներով: Երբ մենք մոտենում ենք մեր վերջնական նպատակին, մենք 9 -րդ ձեռնարկում եւս մեկ անգամ կօգտագործենք ստեղնաշարը `ցույց տալու, թե ինչպես կառավարել դրա հետ յոթ հատվածային էկրաններ (և կառուցել ինչ -որ հետաքրքիր բան, որն օգտագործում է հեռախոսի ստեղնաշարի լրացուցիչ ստեղները), այնուհետև մենք Փոխարենը անցեք կոճակների սեղմումներով բաների վերահսկմանը (քանի որ այդ մեթոդը ավելի լավ է համապատասխանում այն վերջնական արտադրանքին, որին մենք պատրաստում ենք այս ձեռնարկներով), և մենք պարզապես կողպելու ենք ստեղնաշարը:

Կտեսնվենք հաջորդ անգամ!

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