Բովանդակություն:
- Պարագաներ
- Քայլ 1: Շրջան
- Քայլ 2: ingամանակի դիագրամ
- Քայլ 3: Programրագրավորում: Մակրո և սահմանումներ
- Քայլ 4: Programրագրավորում: Հիմնական հանգույց
- Քայլ 5: mingրագրավորում: Օժանդակ գործառույթներ
- Քայլ 6: ingրագրավորում: Protothread ռեժիմներ
- Քայլ 7: Ներքին գործեր
Video: Attiny85 միաժամանակյա ծրագրավորում կամ բազմագույն աչքերով դդում ՝ 7 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Հետևեք հեղինակի ավելին ՝
Ես աշխատում եմ որպես ծրագրային ապահովման ինժեներ Bay Area (California) ընկերություններից մեկում: Երբ ես ժամանակ եմ ունենում, ես սիրում եմ ծրագրավորել միկրոհսկիչներ, կառուցել մեխանիկական խաղալիքներ և կատարել տան բարելավման որոշ նախագծեր: Ավելին jumbleview- ի մասին »
Այս նախագիծը ցույց է տալիս, թե ինչպես կարելի է վերահսկել երկու 10 մմ տրամագծով երեք գունավոր ընդհանուր անոդային LED (դդումի Հելոուինի շողերի բազմագույն աչքեր) Attiny85 չիպով: Նախագծի նպատակն է ընթերցողին ծանոթացնել միաժամանակ ծրագրավորման արվեստին և Ադամ Դունկելսի նախածրագրերի գրադարանին: Այս նախագիծը ենթադրում է, որ ընթերցողը գիտի AVR 8-բիթանոց կարգավորիչների մասին, կարող է գրել C- ծրագիր և որոշակի փորձ ունի Atmel ստուդիայի հետ:
Նախագծի կոդը հրապարակված GitHub- ում ՝
Պարագաներ
Programրագրավորումից առաջ դեռ պետք է կառուցել շրջանը: Ահա բաղադրիչները.
- Attiny85 վերահսկիչ (ցանկացած էլեկտրոնային մատակարար):
- Երկու երեք գունավոր 10 մմ LED ՝ ընդհանուր անոդով: Adafruit LED- ները
- Ռեզիստորներ 100 Օմ, 120 Օմ, 150 Օմ 0.125 կամ 0.250 Վտ (ցանկացած էլեկտրոնային մատակարար):
- Վեց կապ վերնագիր AVR ISP ինտերֆեյսի համար: Կարող է պատրաստվել այս Adafruit վերնագրից
- Որոշ հացի տախտակ կամ տպագիր կաղապարային տախտակ: Ես օգտագործեցի այս մեկը ՝
- AVR ISP MKII ինտերֆեյս և Atmel Studio 6.1 (Հետագա տարբերակը նույնպես պետք է աշխատի):
Քայլ 1: Շրջան
Դիզայնը օգտագործում է հինգ չիպային կապում.
- Երկու կապում, որոնք օգտագործվում են անոդները վերահսկելու համար. Յուրաքանչյուր LED անոդ կցված է նվիրված քորոցին:
- Երեք կապում ամրացված (ռեզիստորների միջոցով) LED լուսադիոդների կաթոդներին (յուրաքանչյուր լուսադիոդի նույն գույնի կաթոդը կցված է նույն քորոցին)
Ինչի՞ց չօգտագործեք չիպի բոլոր վեց ներածական/դուրս կապերը, որպեսզի LED անոդներն ուղղակիորեն միացվեն +5 վ -ին և յուրաքանչյուր կաթոդ ունենա իր նվիրված քորոցը: Դա կդարձնի ծրագրավորումը պարզ: Ավաղ, խնդիրը կա. PB5 (RESET) կապը թույլ քորոց է, որը կարող է ապահովել հոսանքի ընդամենը m 2 մԱ, մինչդեռ անհրաժեշտ է ունենալ ~ 20 մԱ:
Իհարկե, կարելի է տրանզիստորային ուժեղացուցիչ կառուցել այս թույլ քորոցի համար, բայց ես ինքս, հնարավորության դեպքում, նախընտրում եմ խնդիրը լուծել կոդի միջոցով:
Քայլ 2: ingամանակի դիագրամ
Timամանակի դիագրամը օգնում է մեզ հասկանալ, թե ինչ է մեզ անհրաժեշտ ծրագրավորելու համար:
Գծապատկերում վերևի երկու տողերը ցույց են տալիս LED անոդների լարման փոփոխությունը: LED անոդներին միացված կապում լարումը տատանվում է frequency 250 Հց հաճախականությամբ: Ձախ LED- ի այս լարման տատանումը հակառակ LED- ի տատանումն է: Երբ անոդի լարումը բարձր է, համապատասխան LED- ը կարող է պայծառ լինել: Երբ այն ցածր է, համապատասխան LED- ը մութ է: Դա նշանակում է, որ յուրաքանչյուր LED կարող է պայծառ լինել 2 միլիվայրկյան ընդմիջման ընթացքում և մութ է ևս 2 միլիվայրկյանի ընթացքում: Քանի որ մարդու աչքն ունի որոշակի իներցիա, դիտորդի կողմից նկատելի չէ 250 Հց թարթելը: Ստորև բերված դիագրամում երեք տող ցույց է տալիս LED- ների կաթոդներին միացված կապում լարման փոփոխությունը: Եկեք նայենք գծապատկերների առաջին սյունակին: Այն ցույց է տալիս այն դեպքը, երբ ձախ LED- ը կարմիր է, իսկ աջը ՝ կանաչ: Այստեղ ԿԱՐՄԻՐ կաթոդները ցածր են մնում, իսկ ձախը ՝ անոդը, Կանաչը ՝ ցածր, իսկ աջը ՝ բարձր, իսկ ԿԱՊՈ կաթոդը մշտապես ցածր է մնում: Դիագրամի այլ սյուներ ցույց են տալիս կաթոդի և անոդի լարման տարբեր գույների համակցություններ:
Ինչպես տեսնում ենք, կապերի վիճակից փոխկախվածություն կա: Առանց որևէ շրջանակի դա հեշտ չէր լինի լուծել: Եվ հենց այստեղ է, որ հարմար է protothread գրադարանը:
Քայլ 3: Programրագրավորում: Մակրո և սահմանումներ
Exampleրագրավորման քայլերի օրինակը ներկայացնում է մի փոքր պարզեցված տարբերակ: Programրագիրը կրճատվում է, և որոշ խորհրդանշական սահմանումներ փոխարինվում են հստակ հաստատուններով:
Եկեք սկսենք սկզբից: Programրագիրը ներառում է Atmel Studio- ի հետ եկող ֆայլեր, ինչպես նաև գրադարանի նախածրագրի վերնագիր: Հաջորդը կան երկու մակրո ՝ քորոցների մակարդակները շահարկելու համար և որոշ սահմանումներ ՝ ազդանշաններին տրամաբանական անուններ տալու համար: Առայժմ ոչ մի հատուկ բան:
Քայլ 4: Programրագրավորում: Հիմնական հանգույց
Այնուհետև եկեք վերջում նայենք ՝ տեսնելու, թե ինչ է պարունակում հիմնական ընթացակարգը:
Հիմնական ֆունկցիան որոշ նախաստորագրումներ կատարելուց հետո մնում է ընդմիշտ օղակում: Այդ հանգույցում այն կատարում է հետևյալ քայլերը.
- Հրավիրում է ձախ լուսադիոդի նախատիպի ռեժիմ: Այն փոխում է որոշ կապում լարումը:
- Երկու միլիվայրկյան ուշացում կատարեք: Պին լարման փոփոխություն չկա:
- Հրավիրում է նախածանց ՝ ճիշտ LED- ի համար: Այն փոխում է որոշ կապի լարումը:
- Կատարեք 2 MS հետաձգում: Պին լարման փոփոխություն չկա:
Քայլ 5: mingրագրավորում: Օժանդակ գործառույթներ
Նախքան նախածանցերի քննարկումը սկսելը, մենք պետք է նայենք որոշ օգնական գործառույթների: Նախ կան որոշակի գույն սահմանելու գործառույթներ: Նրանք ուղիղ են: Կան այնքան գործառույթներ, ինչպիսիք են աջակցվող գույների քանակը (յոթ) և ևս մեկ գործառույթ ՝ LED մուգ (NoColor) սահմանելու համար:
Եվ կա ևս մեկ գործառույթ, որն ուղղակիորեն կկիրառվի նախատիպերի ռեժիմով: Նրա անունն է DoAndCountdown ():
Տեխնիկապես նման գործառույթի օգտագործումը պարտադիր չէ, բայց ես հարմար գտա: Այն ունի երեք փաստարկ.
- LEDուցանիշ ՝ LED գույնը կարգավորելու գործառույթի համար (օրինակ ՝ RedColor կամ GreenColor կամ այլն)
- Հակադարձ հաշվիչի սկզբնական արժեքը. Քանի անգամ է, որ այս գործառույթը պետք է գործարկվի նախատիպերի որոշակի փուլում:
- Հակադարձ հաշվիչի ցուցիչ: Ենթադրվում է, որ գույնի փոփոխության դեպքում հակառակ հաշվիչը 0 է, ուստի սկզբում կրկնության ծածկագիրը այդ հաշվիչին կհատկացնի սկզբնական արժեքը: Յուրաքանչյուր կրկնության հաշվիչից հետո նվազում է:
Function DoAndCountdown () վերադարձնում է հակառակ հաշվիչի արժեքը:
Քայլ 6: ingրագրավորում: Protothread ռեժիմներ
Եվ ահա շրջանակային միջուկը ՝ նախածրագրի ռեժիմը: Պարզության համար օրինակը սահմանափակվում է միայն երեք քայլով ՝ գույնը փոխելու համար ՝ Կարմիր, Կանաչ և ԿԱՊՈ:
Ֆունկցիան կանչվում է երկու փաստարկով.
- Protուցանիշ դեպի նախաթելային կառուցվածք: Այդ կառույցը նախաստորագրվել է հիմնականով ՝ նախքան հիմնական օղակի սկսվելը:
- Հակադարձ հաշվիչի ցուցիչ: Մինչև հիմնական օղակը սկսելը, այն սահմանվել էր 0 -ի միջոցով:
Ֆունկցիան լարումներ է սահմանում `ձախ LED- ն ակտիվ դարձնելու համար, այնուհետև սկսում է նախաթելերի հատվածը: Այս հատվածը գտնվում է PT_BEGIN և PT_END մակրոների միջև: Ներսում կա մի կոդ, որը մեր դեպքում կրկնում է միայն մակրոները PT_WAIT_UNTIL: Այս մակրոները կատարում են հետևյալը.
- DoAndCountdown գործառույթի կանչում: Դա լարվածություն է ստեղծում LED կաթոդների վրա ՝ որոշակի գույն արձակելու համար:
- Վերադարձված արդյունքը `համեմատած 0. -ի հետ:
- Երբ հաջորդ անգամ կանչվում է նախաթելիկ, այն նորից կատարում է ծածկագիրը PT_BEGIN- ից առաջ, այնուհետև անմիջապես ցատկում է PT_WAIT_UNTIL մակրոների ներսում, որոնցից այն վերադարձել է նախորդ անգամ:
- Նման գործողությունները կրկնվում են մինչև DoAndCountdown- ի արդյունքը 0: Մեր դեպքում դա հաջորդ PT_WAIT_UNTIL- ն է, բայց ընդհանուր առմամբ դա կարող է լինել գրեթե ցանկացած C կոդ:
- Երկրորդ PT_WAIT_UNTIL հակադարձ հաշվիչի սկզբնական կատարման ժամանակ 0 -ն է, ուստի DoAndCountdown () ընթացակարգը այն սահմանեց սկզբնական արժեքի: Երկրորդ մակրոները կրկին կկատարվեն 250 անգամ, մինչև հակադարձ հաշվիչը չհասնի 0 -ի:
- Struct pt- ի վիճակը վերակայվում է հենց որ հսկողությունը հասնի PT_END մակրոներին: Երբ հաջորդ անգամ protothread ֆունկցիան կանչվի, երբ protothread հատվածը սկսի կատարել ծածկագրի տողը PT_BEGIN- ից անմիջապես հետո:
Similarիշտ LED- ի համար գոյություն ունի նմանատիպ նախատիպային ռեժիմ: Մեր օրինակում այն պարզապես կիրառում է գույների տարբեր կարգ, բայց եթե դա կարող ենք անել բոլորովին այլ կերպ. Ձախ և աջ լուսադիոդային ռեժիմի միջև ամուր զուգավորում չկա:
Քայլ 7: Ներքին գործեր
Ամբողջ ծրագիրը 200 գծից պակաս կոդ է (մեկնաբանություններով և դատարկ տողերով) և զբաղեցնում է Attiny85 կոդի հիշողության 20% -ից պակաս: Անհրաժեշտության դեպքում այստեղ հնարավոր է օգտագործել ևս մի քանի նախածրագրային ռեժիմներ և դրանց տալ շատ ավելի բարդ տրամաբանություն:
Protothreads գրադարանը համակարգչային զուգահեռ ծրագրավորման ամենապարզ ձևն է: Concուգահեռ ծրագրավորումը մոտեցում է, որը թույլ է տալիս ծրագիրը բաժանել տրամաբանական մասերի. Երբեմն դրանք կոչվում են կորոուտիններ, երբեմն թելեր, երբեմն առաջադրանքներ: Սկզբունքն այն է, որ յուրաքանչյուր այդպիսի խնդիր կարող է կիսել նույն պրոցեսորային հզորությունը ՝ միաժամանակ պահելով ծածկագիրը քիչ թե շատ գծային և անկախ այլ մասերից: Տրամաբանական տեսանկյունից առաջադրանքները կարող են կատարվել միաժամանակ:
Advancedարգացած համակարգերի համար նման առաջադրանքների վերահսկումը կատարվում է կամ օպերացիոն համակարգի միջուկի միջոցով, կամ կոմպիլյատորի կողմից գործարկվող մեջ ներառված լեզվի գործարկման ժամանակ: Բայց protothreads- ի դեպքում ծրագրավորողը վերահսկում է այն ձեռքով ՝ օգտագործելով protothreads մակրո գրադարանը առաջադրանքների ռեժիմում և նման ռեժիմներ հրավիրելով (սովորաբար հիմնական օղակից դուրս):
Դուք հավանաբար ուզու՞մ եք իմանալ, թե իրականում ինչպես է աշխատում նախաթելիկը: Որտե՞ղ է թաքնված կախարդանքը: Protothreads- ը հենվում է C լեզվի հատուկ առանձնահատկության վրա. Այն փաստը, որ C switch- ի գործի հայտարարությունը կարող է ներդրված լինել if կամ որևէ այլ բլոկի մեջ (օրինակ ՝ while կամ for): Մանրամասներ, որոնք կարող եք գտնել Ադամ Դունկելսի կայքում
Այս նախագծի էլեկտրոնիկայի ներքին սարքերը շատ պարզ են: Վերևի լուսանկարը ձեզ հուշում է: Վստահ եմ, որ կարող ես ավելի լավ անել:
Խորհուրդ ենք տալիս:
Երաժշտական ռեակտիվ բազմագույն LED լույսեր - Arduino ձայնի հայտնաբերման տվիչ - RGB LED ժապավեն ՝ 4 քայլ
Երաժշտական ռեակտիվ բազմագույն LED լույսեր | Arduino ձայնի հայտնաբերման տվիչ | RGB LED ժապավեն. Երաժշտական ռեակտիվ բազմագույն LED լուսարձակների նախագիծ: Այս նախագծում օգտագործվել են պարզ 5050 RGB LED ժապավեն (ոչ հասցեագրվող LED WS2812), Arduino ձայնի հայտնաբերման ցուցիչ և 12 Վ ադապտեր
Ինչպես ստեղծել միաժամանակյա օղակ Python- ում. 9 քայլ
Ինչպես ստեղծել միաժամանակյա օղակ Python- ում: programրագրավորման մեջ կան պահեր, երբ խնդիրը լուծելու համար անհրաժեշտ է կրկնել մի շարք քայլեր: A while loop- ը թույլ է տալիս շրջանցել կոդի մի հատվածը ՝ առանց կրկնվող կոդ գրելու: Programրագրավորում կատարելիս նույն ծածկագիրը գրելուց և
Attiny85 ծրագրավորում (վահան) Arduino UNO- ի օգտագործմամբ. 7 քայլ
Attiny85 mingրագրավորում (վահան) Arduino UNO- ի օգտագործումը. Ձեր Arduino- ով խաղալը հիանալի զվարճանք է: Այնուամենայնիվ, երբեմն չափը նշանակություն ունի: Arduino UNO- ն փոքր է, բայց եթե պահանջում եք, որ ձեր նախագիծը լինի փոքր պատյանում, UNO- ն կարող է չափազանց մեծ լինել: Կարող եք փորձել օգտագործել NANO կամ MINI, բայց եթե իսկապես ուզում եք
Սերիական LED լույս `օգտագործելով բազմագույն LED- ները` 3 քայլ (նկարներով)
Սերիական LED լույս ՝ օգտագործելով բազմագույն LED- ները. Սերիական LED լույսն այնքան էլ թանկ չէ, բայց եթե դու ինձ պես DIY սիրահար ես (հոբբիստ), ապա կարող ես պատրաստել քո սեփական սերիական LED- ները, և դա ավելի էժան է, քան շուկայում առկա լույսը: Այսպիսով, այսօր ես պատրաստելու եմ իմ սերիական LED լույսը, որն աշխատում է 5 Vol
Պատվերով փայլուն բազմագույն Mickey Ears: 9 քայլ (նկարներով)
Պատվերով շիկացած բազմագույն Mickey Ears. Ես ուզում էի կիսվել մի փոքրիկ նախագծով, որի վրա աշխատել եմ կնոջս և իմ վերջին Դիսնեյլենդ ճանապարհորդության ժամանակ: Նա ունի այս գեղեցիկ Minnie Mouse ականջները, որոնք պատրաստված են ծաղիկներից և ոսկե մետաղալարից, այնպես որ ես մտածեցի, թե ինչու ես չպետք է իմ սեփական Mickey Mouse ականջները մի փոքր ավելի կախարդական դարձնեմ