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

AVR Assembler ձեռնարկ 9: 7 քայլեր
AVR Assembler ձեռնարկ 9: 7 քայլեր

Video: AVR Assembler ձեռնարկ 9: 7 քայլեր

Video: AVR Assembler ձեռնարկ 9: 7 քայլեր
Video: LDmicro 22: Arduino տախտակներ AVRDUDESS- ով (միկրոկառավարիչների ծրագրավորում LDmicro- ով) 2024, Հուլիսի
Anonim
AVR Assembler ձեռնարկ 9
AVR Assembler ձեռնարկ 9

Բարի գալուստ ձեռնարկ 9:

Այսօր մենք ցույց կտանք, թե ինչպես կարելի է կառավարել ինչպես 7-հատվածանոց, այնպես էլ 4-թվանշանի ցուցադրում ՝ օգտագործելով մեր ATmega328P և AVR հավաքման լեզվի ծածկագիրը: Դա անելու ընթացքում մենք ստիպված կլինենք շեղումներ ձեռնարկել, թե ինչպես օգտագործել կույտը `նվազեցնելու համար անհրաժեշտ գրանցամատյանների թիվը: Մենք կավելացնենք մի քանի կոնդենսատոր (ցածր անցման ֆիլտրեր), որոնք կփորձեն նվազեցնել աղմուկը մեր ստեղնաշարի վրա: Մենք կստեղծենք լարման ուժեղացուցիչ մի քանի տրանզիստորներից, որպեսզի մեր INT0 ընդհատիչ անջատիչն ավելի լավ աշխատի ստեղնաշարի ներքևի տողի ցածր լարման կոճակների համար: Եվ մենք գլուխներս մի փոքր կխփենք պատին ՝ փորձելով ստանալ ճիշտ դիմադրիչներ, որպեսզի իրը ճիշտ աշխատի:

Մենք կօգտագործենք մեր ստեղնաշարը 7 -րդ ձեռնարկից

Այս ձեռնարկը կատարելու համար, բացի ստանդարտ իրերից, ձեզ հարկավոր է.

  1. 7 հատվածից բաղկացած էկրան

    www.sparkfun.com/products/8546

  2. 4 նիշանոց էկրան

    www.sparkfun.com/products/11407

  3. Սեղմող կոճակ

    www.sparkfun.com/products/97

  4. Theուցադրման տվյալների թերթերը, որոնք կարելի է ներբեռնել վերը նշված հղումներով իրենց համապատասխան էջերից:
  5. 68 pf կերամիկական կոնդենսատոր, մի քանի 104 կոնդենսատոր, մի փունջ ռեզիստոր, երկու 2N3904 NPN տրանզիստոր:

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

Քայլ 1: 7-սեգանի էկրանին միացնելը

7-սեգանի էկրանին միացնելը
7-սեգանի էկրանին միացնելը
7-սեգանի էկրանին միացնելը
7-սեգանի էկրանին միացնելը
7-սեգանի էկրանին միացնելը
7-սեգանի էկրանին միացնելը

Մենք պատրաստվում ենք օգտագործել նույն ծածկագիրը, որն օգտագործել ենք ձեռնարկ 7-ում, ստեղնաշարի համար `7 հատվածի ցուցադրումը վերահսկելու համար: Այսպիսով, ձեզ հարկավոր կլինի դրա պատճենը պատրաստել, և մենք այն կփոխենք:

Մենք հատվածները քարտեզագրելու ենք մեր միկրոկառավարիչի կապում հետևյալ կերպ.

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

որտեղ հատվածների տառերը պատկերված են նկարում `ընդհանուր 5V- ին համապատասխանող pinout- ի հետ և LED հատվածներից յուրաքանչյուրը` ներառյալ տասնորդական կետը (dp) ցուցադրման ներքևի աջ մասում: Դրա պատճառն այն է, որ մենք կարող ենք ամբողջ թիվը մուտքագրել մեկ գրանցամատյանում և թողարկել, որը գրանցվում է B և D նավահանգիստներում ՝ հատվածները լուսավորելու համար: Ինչպես տեսնում եք, բիթերը համարակալվում են հաջորդաբար 0 -ից 7 -ով, ուստի դրանք կցուցադրվեն ճիշտ կապումներին ՝ առանց առանձին բիթեր սահմանելու և մաքրելու:

Ինչպես տեսնում եք հաջորդ քայլին կցված ծածկագրով, մենք ցուցադրման մեր ռեժիմը տեղափոխել ենք մակրո և մենք ազատել ենք SDA և SCL կապերը ՝ հետագա ձեռնարկի համար հետագա օգտագործման համար:

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

Նախ նայեք տվյալների թերթիկին և նկատեք, որ առաջին էջում այն տալիս է ցուցադրման տարբեր հատկություններ: Կարևոր քանակներն են «Առաջ ընթացիկ» (I_f = 20mA) և «Փոխադրիչ լարում» (V_f = 2.2V): Սրանք ձեզ ասում են, որ ցանկանում եք, որ էկրանի վրա լարման անկումը լինի, եթե հոսանքը հավասար լինի առաջի հոսանքին: Սա առավելագույն հոսանքն է, որը էկրանը կվերցնի առանց տապակվելու: Հետևաբար դա նաև առավելագույն պայծառությունն է, որը դուք կարող եք ստանալ հատվածներից:

Այսպիսով, եկեք օգտագործենք Օմի օրենքը և Կիրխոֆի օղակի կանոնը `պարզելու համար, թե ինչ նվազագույն դիմադրություն պետք է դնենք էկրանին շարքով` առավելագույն պայծառությունը ստանալու համար: Կիրխոֆի կանոնն ասում է, որ շրջանագծի փակ օղակի շուրջ լարման փոփոխությունների գումարը հավասար է զրոյի, իսկ Օհմի օրենքն ասում է, որ դիմադրության R դիմադրության դիմաց լարման անկումը հետևյալն է.

Այսպիսով, հաշվի առնելով V- ի աղբյուրի լարումը և շրջելով մեր շրջանը, մենք ունենք.

V - V_f - I R = 0

ինչը նշանակում է (V - V_f)/I = R. Այսպիսով, առավելագույն պայծառություն ստանալու համար անհրաժեշտ դիմադրությունը (և հավանաբար հատվածները տապակելիս) կլինի.

R = (V - V_f)/I_f = (5.0V - 2.2V) /0.02A = 140 օմ

Այսպիսով, եթե ցանկանաք, կարող եք ուրախությամբ օգտագործել 150 օմ առանց անհանգստության: Այնուամենայնիվ, ես կարծում եմ, որ 140 ohms- ը այն շատ պայծառ է դարձնում իմ սրտով, և ես օգտագործում եմ 330 ohms (ինչը LED- ների համար իմ անձնական Goldilocks- ի դիմադրությունն է)

Քայլ 2. Հավաքման ծածկագիր և տեսանյութ

Ես կցել եմ հավաքման ծածկագիրը և տեսանյութը, որը ցույց է տալիս ստեղնաշարի աշխատանքը էկրանին: Ինչպես տեսնում եք, մենք պարզապես վերագրման ստեղնը քարտեզագրել ենք «r» - ի վրա, ֆլեշ ստեղնը ՝ «F» - ի, աստղանիշը ՝ «A» - ի, իսկ նշանի նշանը ՝ «H» - ի: Դրանք կարող են քարտեզագրվել տարբեր գործողությունների, ինչպիսիք են ՝ հետընթաց, մուտքագրել և ինչ-որ այլ բան, եթե ցանկանայիք շարունակել օգտագործել ստեղնաշարը LCD էկրաններին կամ 4 թվանշանի էկրաններին թվեր մուտքագրելու համար: Այս անգամ ես տող առ տող չեմ անցնի, քանի որ այն շատ նման է նրան, ինչ մենք արդեն արել էինք նախորդ ձեռնարկներում: Տարբերությունները հիմնականում ավելի շատ նույն բաներն են, որոնք մենք արդեն գիտենք, թե ինչպես անել, ինչպես ընդհատումները և որոնման սեղանները: Պարզապես պետք է անցնել ծածկագիրը և նայել մեր ավելացրած նոր բաներին և այն, ինչ փոխել ենք, և դա պարզել այնտեղից: Հաջորդ ձեռնարկում մենք կվերադառնանք տող առ տող վերլուծությանը, երբ AVR միկրոկոնտրոլերների վրա կներկայացնենք հավաքման լեզվի կոդավորման նոր ասպեկտներ:

Եկեք հիմա նայենք 4 նիշանոց էկրանին:

Քայլ 3: 4 թվանշանի էկրանին միացում

4 թվանշանի էկրանին միացում
4 թվանշանի էկրանին միացում
4 թվանշանի էկրանին միացում
4 թվանշանի էկրանին միացում

Տվյալների թերթի համաձայն ՝ 4-նիշանոց դիսփլեյն ունի 60 մԱ առաջադեմ հոսանք և 2.2 վոլտ առաջ լարվածություն: Այսպիսով, նույն հաշվարկով, ինչպես նախկինում, ես կարող էի օգտագործել 47 օհմ դիմադրություն, եթե ցանկանայի: Փոխարենը ես պատրաստվում եմ օգտագործել… ժամ … թույլ տվեք տեսնել… ինչպես 330 օմ:

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

Առայժմ եկեք ստուգենք, որ հատվածները բոլորն աշխատում են:

Տեղադրեք ձեր 330 օմ ռեզիստորը `ձեր տախտակի դրական գծի և ցուցադրման առաջին անոդի միջև: Տվյալների թերթիկը մեզ ասում է, որ կապում համարակալված են ժամացույցի սլաքի սլաքի ուղղությամբ 1-ից 16-ը ՝ ներքևի ձախ մասում (երբ նորմալ եք նայում էկրանին …, 8, 9 և 12:

Այսպիսով, մենք կապում ենք 6 -րդ կապը 5 Վ -ի հետ, այնուհետև վերցնում ենք բացասական ազդանշան ձեր GND ռելսից և ներխուժում այն մյուս բոլոր կապումներին և տեսնում, որ բոլոր հատվածները լուսավորվում են համապատասխան թվանշանի վրա (որը իրականում երկրորդ նիշն է իրավունք). Համոզվեք, որ ստացել եք բոլոր 7 հատվածները և տասնորդական կետը լուսավորվում է:

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

Ինչ -որ անսովոր բան կա՞:

Ստացվում է, որ տվյալների թերթիկի pinout- ը սխալ է: Դա պայմանավորված է նրանով, որ դա տվյալների պիտակը և մատնանշումն է 12-պինյա, 4-նիշանոց ցուցադրման: Այսինքն մեկը ՝ առանց հաստ աղիքի կամ տասնորդական վերին կետի: Էկրանը, որը ես ստացա, երբ պատվիրեցի, 16 պինանի, 4 նիշանոց էկրան է: Իրականում, իմում հատվածի անոդները գտնվում են 1, 2, 6 և 8. կապերում: Հաստ աղիքի անոդը 4 -րդ կապն է (կաթոդի 12 -րդ փին), իսկ վերին dp անոդը `10 -ը (կաթոդը 9 -րդ կապն է):

Exորավարժություն 1. Օգտագործեք ձեր դիմադրիչը և գրունտի մետաղալարը `քարտեզագրելու համար, թե որ քորոցը էկրանի որ հատվածին և տասնորդական կետին է համապատասխանում, այնպես որ մենք կոդավորում ենք, երբ լուսավորվում են ճիշտ հատվածները:

Segmentանապարհը, որով մենք ցանկանում ենք ծածկագրել հատվածի քարտեզը, ճիշտ այնպես, ինչպես դա արեցինք վերևի 7 սեգմենտանոց միանիշ նիշով. Մենք չպետք է բան փոխենք ծածկագրում, միակ բանը, որ փոխում ենք, լարերի միացման եղանակն է: տախտակի վրա: Պարզապես միացրեք միկրոկառավարիչի ճիշտ պորտի քորոցը 4-նիշանի էկրանին համապատասխան քորոցին, որպեսզի, օրինակ, PB0- ն դեռ անցնի a հատվածին համապատասխանող քորոցին, PB1- ը `B հատվածին և այլն:

Միակ տարբերությունն այն է, որ այժմ մեզ անհրաժեշտ է 4 լրացուցիչ կապում անոդների համար, քանի որ այլևս չենք կարող պարզապես գնալ 5V ռելսերի: Մեզ պետք է միկրոկառավարիչը, որը պետք է որոշի, թե որ նիշն է ստանում հյութը:

Այսպիսով, մենք կօգտագործենք PC1, PC2, PC3 և PD4 ՝ 4 թվանշանների անոդները վերահսկելու համար:

Կարող եք նաև առաջ գնալ և միացնել լարերը: (մի մոռացեք անոդի լարերի վրա 330 օմ ռեզիստորների մասին):

Քայլ 4: Քառանիշ ցուցադրման կոդավորում

4-նիշ ցուցադրման կոդավորում
4-նիշ ցուցադրման կոդավորում

Եկեք մտածենք, թե ինչպես ենք ցանկանում ծածկագրել այս ցուցադրումը:

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

Մեկ այլ խնդիր այն է, որ մուլտիպլեքսավորված 4 թվանշանի ցուցադրման եղանակն այն է, որ անոդները պտտվում են այնպես, որ յուրաքանչյուր թվանշան մի քանի վայրկյանում միացված լինի, նախքան հաջորդը, ապա հաջորդը և վերջապես նորից վերադառնալը և այլն: Այսպիսով, մենք սա կոդավորելու միջոց է պետք:

Մենք նաև ցանկանում ենք, որ այն «կուրսորը» տեղափոխի աջ տարածություն, երբ հաջորդ նիշը մուտքագրենք: Որպեսզի, եթե ուզում եմ, օրինակ, մուտքագրել 1234-ը, 1-ը մուտքագրելուց հետո, կուրսորը կշարժվի այնպես, որ հաջորդ մուտքագրած թվանշանը հայտնվի հաջորդ 7-հատվածանոց էկրանին և այլն: Քանի դեռ դա տեղի է ունենում, ես դեռ ցանկանում եմ տեսնել իմ մուտքագրածը, այնպես որ այն դեռ պետք է շրջի թվանշանները և ցուցադրի դրանք:

Հնչու՞մ է բարձր կարգի:

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

Այսպիսով, եկեք սկսենք մի փոքր պարզեցնելով իրերը, օգտագործենք կույտը և ազատենք որոշ գրանցամատյաններ, այնուհետև մենք կփորձենք կատարել առաջադրանքը `կարդալ և ցուցադրել մեր թվերը 4-նիշանոց էկրանին:

Քայլ 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Կան ընդամենը մի քանի «Ընդհանուր նշանակության գրանցամատյաններ», որոնք մենք ունենք մեր տրամադրության տակ և դրանք օգտագործելուց հետո այլևս չկան: Այսպիսով, լավ ծրագրավորման պրակտիկա է դրանք օգտագործել միայն մի քանի փոփոխականների համար, որոնք օգտագործվում են որպես ժամանակավոր պահեստավորում, որն անհրաժեշտ է նավահանգիստներին և SRAM- ին կարդալու և դրանց վրա գրելու համար, կամ էլ այնպիսիք, որոնց կարիքը կունենաք ամենուր ենթածրագրերում: անվանեք դրանք: Այսպիսով, այն, ինչ ես արել եմ, այժմ, երբ մենք նախաստորագրել և սովորում ենք օգտագործել Stack- ը, այն է, որ անցնենք ծածկագիրը և գտնենք ընդհանուր նշանակության գրանցամատյանները, որոնք օգտագործվում են միայն մեկ ենթածրագրի ներսում կամ ընդհատում են և այլ ոչ մի տեղ ծածկագրում և փոխարինում դրանք մեր ջերմաստիճանի գրանցիչներից մեկով և հրում և թռիչք դեպի կույտ: Իրականում, եթե նայեք փոքր միկրոկոնտրոլերների համար գրված կոդին, կամ եթե վերադառնաք ժամանակին, երբ բոլոր չիպերը փոքր էին, ապա կտեսնեք ընդամենը մի քանի ընդհանուր նշանակության գրանցամատյաններ, որոնք պետք է օգտագործվեին ամեն ինչի համար, այնպես որ դուք չէիք կարող պարզապես արժեք պահեք այնտեղ և թողեք այն հանգիստ, քանի որ վստահ եք, որ այդ գրանցամատյանը պետք է այլ բաների համար: Այսպիսով, կոդի մեջ ամենուրեք կտեսնեք pushin 'և poppin': Միգուցե ես պետք է անվանեի մեր ժամանակավոր ընդհանուր նշանակության գրանցամատյանները AX և BX գրանցամատյանները որպես հարգելի փառք այդ անցած օրերի համար:

Մի օրինակ կօգնի դա ավելի պարզ դարձնել:

Նկատի ունեցեք, որ մեր անալոգային թվային փոխակերպման ամբողջական ընդհատումը ADC_int- ում մենք օգտագործում ենք ընդհանուր նշանակության գրանցամատյան, որը մենք անվանել ենք կոճակ H, որը մենք օգտագործել ենք ADCH- ի արժեքը բեռնելու և այն համեմատելու համար անալոգային կոճակին սեղմված փոխարկումների մեր որոնման աղյուսակի հետ: Մենք օգտագործում ենք միայն այս կոճակըՀ գրանցումը ADC_int ենթածրագրի շրջանակներում և այլուր: Այսպիսով, փոխարենը մենք կօգտագործենք մեր փոփոխական temp2- ը, որը մենք օգտագործում ենք որպես ժամանակավոր փոփոխական, որը կարող ենք օգտագործել ցանկացած տրված ենթածրագրի շրջանակներում և դրա արժեքը չի ազդի այդ ենթածրագրից դուրս (այսինքն ՝ այն արժեքը, որը մենք տալիս ենք ADC_int- ում, ոչ մի տեղ չի օգտագործվի այլ):

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

Theուտ արդյունքն այն է, որ մենք «վերցրել ենք» temp և temp2 ժամանակավոր օգտագործման համար, այնուհետև դրանք ավարտելուց հետո վերականգնել դրանք իրենց նախկին արժեքներին:

Ահա այս փոփոխությունը կատարելուց հետո ADC_int ընդհատման ռեժիմը.

ADC_int:

ճնշման ջերմաստիճան; պահպանել ջերմաստիճանը, քանի որ այն փոփոխում ենք այստեղ, սեղմել temp2; փրկել temp2 lds temp2, ADCH; բեռնման ստեղն ldi ZH, բարձր (2*համար) ldi ZL, ցածր (2*թվ) cpi temp2, 0 breq վերադարձ; եթե աղմուկի գործարկիչները չեն փոխում 7 թվային ստեղն ՝ lpm ջերմաստիճան, Z+; բեռնել սեղանից և տեղադրել ավելացում clc cp temp2, temp; համեմատել ստեղնաշարը սեղանի brlo PC+4; եթե ADCH- ն ավելի ցածր է, նորից փորձեք lpm 7segnumber, Z; այլապես բեռնեք keyvalue աղյուսակը ներառող թվանշան; ավելացնել թվանշանի համարը rjmp վերադարձը; և վերադարձնել adiw ZH: ZL, 1; ավելացում Z rjmp setkey; և վերադառնալ սկիզբ վերադարձ: pop temp2; վերականգնել temp2 փոփ ջերմաստիճանը; վերականգնել ջերմաստիճանի ռետին

Ուշադրություն դարձրեք, որ կույտի աշխատելու եղանակն այն է, որ առաջինը միացվածը վերջին անջատումն է: Likeիշտ այնպես, ինչպես թղթի բուրգը: Դուք տեսնում եք, որ մեր առաջին երկու տողերում մենք ջերմաստիճանի արժեքը մղում ենք դեպի կույտ, այնուհետև մենք սեղմում ենք temp2- ը դեպի բուրգ, այնուհետև դրանք օգտագործում ենք ենթածրագրում այլ բաների համար, և վերջապես դրանք կրկին վերականգնում ենք իրենց նախկին արժեքներին առաջինը բացվող temp2- ն անջատված է (քանի որ վերջինն էր, որ հրում էր դրա վրա, գտնվում է կույտի վերևում և կլինի առաջինը, որը մենք հետ կհանենք), այնուհետև ՝ ջերմաստիճանը:

Այսպիսով, այսուհետ մենք միշտ կօգտագործենք այս մեթոդը: Միակ անգամ, երբ մենք իրականում կնշանակենք գրանցամատյան ՝ փոփոխականից այլ բանի համար, այն է, երբ դրա կարիքը կունենանք ամենուր: Օրինակ, «գերհոսքեր» կոչվող գրանցամատյանը մեկն է, որը մենք օգտագործում ենք ծրագրի մի քանի տարբեր վայրերում, ուստի մենք կցանկանայինք դրան անվանում տալ: Իհարկե, մենք դեռ կարող ենք օգտագործել այն այնպես, ինչպես մենք արել ենք temp- ի և temp2- ի հետ, քանի որ ավարտելուց հետո կվերականգնենք դրա արժեքը: Բայց դա շատ կսպագետացնի իրերը: Նրանք կոչվում են ինչ -որ պատճառով, և մենք ունենք temp և temp2, որոնք արդեն նշանակված են այդ աշխատանքի համար:

Քայլ 6: Lowածր անցման զտիչներ և լարման ուժեղացուցիչ

Lowածր անցման զտիչներ և լարման ուժեղացուցիչ
Lowածր անցման զտիչներ և լարման ուժեղացուցիչ
Lowածր անցման զտիչներ և լարման ուժեղացուցիչ
Lowածր անցման զտիչներ և լարման ուժեղացուցիչ

Աղմուկը մի փոքր մաքրելու և մեր ստեղնաշարը ավելի լավ աշխատեցնելու համար մենք ցանկանում ենք ավելացնել մի քանի ցածր անցման զտիչներ: Դրանք զտում են բարձր հաճախականության աղմուկը և թույլ են տալիս ցածր հաճախականության ազդանշան անցնել: Հիմնականում դա անելու եղանակը պարզապես մեր անալոգային մուտքի և գրունտի միջև 68 pf կոնդենսատոր ավելացնելն է, ինչպես նաև մեր PD4 (INT0) ընդհատման և գրունտի միջև 0.1 միկրոֆարադի (այսինքն ՝ 104) կոնդենսատորը: Եթե դուք խաղում եք սրա հետ, երբ սեղմում եք ստեղնաշարի կոճակները, կկարողանաք տեսնել, թե ինչ են նրանք անում:

Հաջորդը մենք ցանկանում ենք լարման ուժեղացուցիչ պատրաստել: Ստացվում է, որ ստեղնաշարի վրա գտնվող ստեղների ներքևի շարքը (ինչպես նաև վերակողմանի ստեղնը) չափազանց ցածր լարում են տալիս INT0 ընդհատումը խափանելու համար: Անալոգային պորտը բավական զգայուն է `կարդալու համար այս լարերից ցածր լարումները, սակայն մեր ընդհատման քորոցը այնքան լավ բարձրացող եզր չի ստանում, որ կարող է ընդհատել, երբ մենք սեղմում ենք այդ ստեղները: Հետևաբար, մենք կցանկանայինք ինչ -որ կերպ համոզվել, որ լարման բարձրացող ծայրը հարվածում է PD4- ին, բայց նույն ցածր լարման դեպքում `ADC0- ին: Սա բավականին բարձր կարգ է, քանի որ երկու ազդանշաններն էլ գալիս են մեր ստեղնաշարի նույն ելքային լարից: Կան մի շարք բարդ եղանակներ դա անելու համար, բայց այս ձեռնարկից հետո մենք այլևս չենք օգտագործելու մեր ստեղնաշարը, ուստի եկեք միասին միացնենք մի մեթոդ, որն աշխատում է (հազիվ թե):

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

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

Եթե նայեք դիագրամին, որը ես կցել եմ այս քայլին, կտեսնեք, թե ինչպես է գործելու լարման ուժեղացուցիչը: Մենք օգտագործում ենք որոշ ռեզիստորներ և երկու տրանզիստորներ: Տրանզիստորների աշխատանքի եղանակը (տե՛ս տվյալների թերթերը) այն է, որ կա նվազագույն լարման, որը անհրաժեշտ է մուտքագրել տրանզիստորի բազային քորոցին (միջին քորոցին), որը կհագեցնի այն և թույլ կտա հոսանք հոսել կոլեկցիոների և ճառագայթիչի միջև: կապում: 2N3904 տրանզիստորի դեպքում, որը մենք օգտագործում ենք այստեղ, լարումը 0.65V է: Այժմ մենք այդ լարումը վերցնում ենք ստեղնաշարից մեր ելքից և չենք ուզում փոխել այդ ելքը, այնպես որ մենք մեծ դիմադրություն կդնենք ստեղնաշարի ելքի և առաջին տրանզիստորի բազայի միջև (ես օգտագործել եմ 1 Մահմ): Ես դիագրամում սա պիտակավորել եմ որպես R_1: Այնուհետև մենք ցանկանում ենք տեղադրել լարման բաժանարար, որպեսզի տրանզիստորի հիմքը արդեն «գրեթե» լինի 0.65 վոլտ, և դեռ մի փոքր ավելի շատ փոքրիկը այն ավելի մղի գագաթին և հագեցնի այն: Այդ պատանեկության պահը կհայտնվի ստեղնաշարի ելքից, երբ սեղմում ենք կոճակը: Քանի որ ստեղնաշարի ստորին ստեղները մի փոքր լարում են տալիս, մենք պետք է արդեն շատ մոտ լինենք հագեցվածությանը, որպեսզի դրանք բավարար լինեն: Լարման բաժանարար դիմադրիչները դիագրամում պիտակավորված են R_a և R_b: Ես օգտագործել եմ R_a = 1Mohm և R_b = 560Kohm, բայց գրեթե հաստատ է, որ դուք պետք է խաղաք այս թվերի հետ ՝ ձեր կարգավորման համար ճիշտ դարձնելու համար:Հնարավոր է, որ ցանկանաք մոտակայքում ունենալ պատ ՝ գլուխը խփելու և ձեռքին երկու կամ երեք բաժակ սկոտչին (ես խորհուրդ կտայի Լաֆրոյգին ՝ թանկարժեք, բայց արժե, եթե դու ծխել ես: Եթե իրերն իսկապես խելագարվում են, ուրեմն պարզապես կուժ ձեռք բեր: BV- ից և գիշերեք)

Այժմ եկեք նայենք, թե ինչպես են տրանզիստորները մեզ հաճելի բարձրացնող եզրեր բերում դեպի INT0 ստեղնը և առաջացնում են մեր սեղմման ընդհատումը: Նախ եկեք նայենք, թե ինչ է տեղի ունենում, երբ ես չեմ սեղմում ստեղնը: Այդ դեպքում առաջին տրանզիստորը (գծապատկերում նշվում է որպես T1) անջատված է: Այսպիսով, ոչ մի հոսանք չի հոսում կոլեկցիոներների և արտանետիչների կապերի միջև: Այսպիսով, մյուս տրանզիստորի հիմքը (պիտակավորված T2) բարձր կքաշվի և, հետևաբար, այն կհագեցնի, ինչը թույլ կտա հոսանք հոսել իր կապանքների միջև: Սա նշանակում է, որ T2- ի արտանետիչը ցածր կլինի, քանի որ այն միացված է կոլեկտորին, որն ինքնին կապված է գետնին: Այսպիսով, ելքը, որը գնում է մեր INT0 ստեղնաշարի ընդհատման քորոցին (PD4), ցածր կլինի և ընդհատում չի լինի:

Հիմա ինչ է տեղի ունենում, երբ ես սեղմում եմ բանալին: Դե, ապա T1- ի հիմքը բարձրանում է 0.65V- ից (ներքևի բանալիների դեպքում այն հազիվ է բարձրանում): Այնուհետև թույլ կտա հոսել հոսանք, որը T2- ի հիմքը կբերի ցածր լարման, և դա կփակի T2- ը: Բայց մենք տեսնում ենք, որ երբ T2- ն անջատված է, ապա ելքը բարձր է քաշվում և, հետևաբար, մենք կստանանք 5V ազդանշան, որը գնում է դեպի մեր INT0 փին, և դա կառաջացնի ընդհատում:

Ուշադրություն դարձրեք, թե որն է այստեղ զուտ արդյունքը: Եթե մենք սեղմում ենք 1 ստեղնը, մենք ստանում ենք 5V դեպի PD4 ՝ առանց էականորեն փոխելու ելքը դեպի ADC0, և որ ավելի կարևոր է, նույնիսկ եթե աստղանիշ, 0, Hash կամ Redial հրում ենք, մենք ստանում ենք նաև 5V ազդանշան, որը գնում է INT0, ինչպես նաև ընդհատում առաջացնելով! Սա կարևոր է, քանի որ եթե ստեղնաշարի ելքից ուղղակիորեն անցանք INT0 փին, ապա այդ ստեղները գրեթե չեն արտադրում լարման, և դրանք բավարար չեն լինի այդ ընդհատման քորոցը գործարկելու համար: Մեր լարման ուժեղացուցիչը լուծեց այս խնդիրը:

Քայլ 7: 4 թվանշանի ցուցադրման ծածկագիր և տեսանյութ

Այս ամենը 9 -րդ ձեռնարկի համար է: Ես կցել եմ ծածկագիրը և տեսանյութը, որը ցույց է տալիս գործողությունը:

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

Այժմ մենք նորից կանդրադառնանք հաղորդակցությանը և կստանանք, որ մեր 7-սեգմենտ և 4-նիշ էկրանները մեր զառախաղից կարդան մեր զառերը այնպես, ինչպես դա արել էինք մեր գրանցիչ անալիզատորի հետ: Այս անգամ մենք կօգտագործենք երկալար ինտերֆեյսը, այլ ոչ թե մեր կոտրված միասին Մորզեի կոդը:

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

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

Նախագիծ. Ստեղծեք հաշվիչ: Օգտագործեք մեր 4 նիշանոց էկրանը և ստեղնաշարը և ավելացրեք արտաքին կոճակ, որը գործելու է «մուտքագրման» ստեղնի պես: Աստղանիշը նշեք «ժամանակների», հեշը ՝ «բաժանելու» վերահաշվարկը «գումարած» -ի վրա և բռնկումը «մինուս» -ի վրա և գրեք հաշվիչի ռեժիմ, որը գործում է HP- ի հին «հակադարձ փայլեցման» հաշվիչներից մեկի նման, որը ունեին բոլոր ինժեներները: ետ օրը: Այսինքն նրանց աշխատելու եղանակն այն է, որ մուտքագրում ես համար և սեղմում «մուտքագրել»: Սա մղում է այդ թիվը դեպի կույտը, այնուհետև մուտքագրում եք երկրորդ համարը և մղում «enter», որը երկրորդ թիվը մղում է դեպի կույտը: Ի վերջո, դուք սեղմում եք X- ի, /, + կամ - գործողություններից մեկը, և այն կկիրառի բուրգի վերևի երկու համարները, կցուցադրի արդյունքը և արդյունքը կմղի բուրգի վրա, որպեսզի կարողանաք նորից օգտագործել այն, եթե նման Օրինակ ՝ 2+3 ավելացնելու համար կանեիք. ֆոնային ծածկագրի մեծ մասն արդեն գրված է: Պարզապես ավելացրեք մուտքագրման բանալին և հաշվիչի համար անհրաժեշտ ենթածրագրերը: Դա մի փոքր ավելի բարդ է, քան կարող էիք թվալ սկզբում, բայց դա զվարճալի է և հնարավոր:

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

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