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

$ 1 LED տրամադրության լամպ ATtiny13- ով և WS2812- ով ՝ 7 քայլ
$ 1 LED տրամադրության լամպ ATtiny13- ով և WS2812- ով ՝ 7 քայլ

Video: $ 1 LED տրամադրության լամպ ATtiny13- ով և WS2812- ով ՝ 7 քայլ

Video: $ 1 LED տրամադրության լամպ ATtiny13- ով և WS2812- ով ՝ 7 քայլ
Video: Լուսադիոդային (LED) լամպ #22 2024, Նոյեմբեր
Anonim
$ 1 LED տրամադրության լամպ ATtiny13- ով և WS2812- ով
$ 1 LED տրամադրության լամպ ATtiny13- ով և WS2812- ով

Հետևեք հեղինակի ավելին.

Անձնական CalDAV սերվեր մեկ տախտակի համակարգչի վրա
Անձնական CalDAV սերվեր մեկ տախտակի համակարգչի վրա
Անձնական CalDAV սերվեր մեկ տախտակի համակարգչի վրա
Անձնական CalDAV սերվեր մեկ տախտակի համակարգչի վրա
LCD Invaders: Space Invaders Like Game- ը 16x2 LCD կերպարների ցուցադրման վրա
LCD Invaders: Space Invaders Like Game- ը 16x2 LCD կերպարների ցուցադրման վրա
LCD Invaders: Space Invaders Like Game- ը 16x2 LCD կերպարների ցուցադրման վրա
LCD Invaders: Space Invaders Like Game- ը 16x2 LCD կերպարների ցուցադրման վրա
Octarine: A Color Matching Game with WS2812 RGB LED- ներ
Octarine: A Color Matching Game with WS2812 RGB LED- ներ
Octarine: A Color Matching Game with WS2812 RGB LED- ներ
Octarine: A Color Matching Game with WS2812 RGB LED- ներ

Սա էժան տրամադրության լամպ է ՝ չորս ռեժիմով:

1. Rիածանի կայծ: Լույսի կայծը ժամանակ առ ժամանակ շարժվում է դեպի վեր և աստիճանաբար փոխում գույնը:

2. Rիածանի փայլ: Կայուն փայլ, որն աստիճանաբար փոխում է գույնը:

3. Մոմի կրակի մոդելավորում:

4. Անջատված:

Դուք կարող եք փոխել ռեժիմները ՝ կտտացնելով վերևի հպման կոճակին: Ընթացիկ ռեժիմը պահվում է EEPROM հիշողության մեջ `անջատվելուց հետո:

Որքան փոքր է ATtiny13- ը:

Գաղափարն այն էր, որ առավելագույն հնարավորություններ ստանանք նվազագույն սարքավորումներից, ինչը ավելի բարդ է, քան ավտոմատ անջատիչ կամ ջերմաչափ, նախագիծ, որը մոտ է այս փոքրիկ միկրոկոնտրոլերի եզրին: Ի վերջո, սահմանափակումները ստիպում են ձեզ ստեղծագործ մտածել, այնպես չէ՞: Դե, սկզբում նման էր:

Այս նախագծում ամենադժվարը ամբողջ ծածկագիրը ATtiny13- ի մեջ մտցնելն էր: Միկրոկոնտրոլերն ունի 1 ԿԲ բայթ և ընդամենը 64 Բայթ օպերատիվ հիշողություն: Այո, «բայթ» ասելիս նկատի ունեմ ութ բիթից բաղկացածները: 64 բայթ ՝ ձեր բոլոր տեղական փոփոխականների և զանգերի հավաքածուի համար: Հստակեցնելու համար հաշվի առեք, որ մենք պետք է վերահսկենք 8 RGB LED: Նրանցից յուրաքանչյուրը սահմանվում է 3 բայթով (մեկը համապատասխանաբար կարմիր, կանաչ և կապույտ ալիքների համար): Այսպիսով, պարզապես 8 LED- ների վիճակը պահելու համար մենք պետք է ներդնենք 8 կառույցից բաղկացած զանգված `յուրաքանչյուրը 3 բայթ, և այս զանգվածի սկզբի ցուցիչը կտևի ևս մեկ բայթ: Այսպիսով, 64 բայթից 25 -ը դուրս է: Մենք պարզապես օգտագործել ենք RAM- ի 39% -ը և իրականում դեռ չենք սկսել: Բացի այդ, ծիածանի յոթ հիմնական գույները պահելու համար ձեզ հարկավոր կլինի 7 × 3 = 21 բայթ, այնպես որ RAM- ի 72% -ը սպառված է: Ինչ վերաբերում է հիմնական գույներին, ապա ես չափազանցնում եմ. Դրանք բոլորը մեզ պետք չեն միաժամանակ RAM- ում և դրանք երբեք չեն փոխվում, ուստի դրանք կարող են իրականացվել որպես մշտական զանգված, որը պետք է պահվի ֆլեշում ՝ RAM- ի փոխարեն: Ամեն դեպքում, դա ընդհանուր տպավորություն է թողնում օգտագործված սարքավորումների մասին:

Հիշելով վաղաժամ օպտիմալացման վերաբերյալ Քնութի հայտարարությունը, ես սկսեցի լամպի երեք ռեժիմի առանձին նախատիպից ՝ տեսնելու, թե ինչ է տեղի ունենում: Ես դրանք առանձին եմ փորձարկել `համոզվելու համար, որ դրանք ճիշտ են աշխատում, և յուրաքանչյուրը համապատասխանում է իմ միկրոկոնտրոլերին: Դա կատարելու համար մի քանի երեկո տևեց, և ամեն ինչ լավ անցավ … մինչև որ ես փորձեցի դրանք միացնել անջատիչ հայտարարության ներսում: avr-size կոմունալ ծառայությունը հաղորդեց 1.5 Կբ տեքստային հատվածի չափ (avr-gcc -s դրոշով): Այդ պահին իմ սկզբնական մտադրությունը 2Kb ֆլեշով որոշ ATtiny25 գրավելն էր, և դա կարող էր լինել այս պատմության երջանիկ ավարտը:

Բայց ինչ -որ կերպ ես զգացի, որ զգալի օպտիմալացումից հետո կարող եմ հասցնել կրճատել այդ խայտառակ ծածկագիրը 1 Կբ -ի: Այնուամենայնիվ, ևս մեկ շաբաթ պահանջվեց հասկանալու համար, որ դա անհնար է, և ամեն դեպքում դա կատարելու համար ևս մեկ շաբաթ: Ես ստիպված էի ծիածանը կտրել հինգ հիմնական գույների (առանց էական տեսողական տարբերության): Ես ազատվեցի դեպքի հայտարարություններից և օգտագործեցի if-then-if շղթան `երկուական կոդի չափը նվազեցնելու համար: Fire անիմացիային անհրաժեշտ է կեղծ պատահական թվերի գեներատոր, որը բավականին մեծ է, ուստի ես իրականացրեցի LFSR- ի պարզեցված տարբերակ `մշտական սկզբնական արժեքով: Ինձ չի հետաքրքրում PRNG ցիկլի ամբողջ տևողությունը և պարզապես ծագման հավասարակշռություն եմ փնտրում կոդի չափի և «իրատեսական կրակի անիմացիայի» միջև: Ես նաև իրականացրեցի շատ փոքր օպտիմալացումներ, որոնք այժմ չեմ կարող հիշել, և նույնիսկ հասցրեցի բոլոր ռեժիմները, բացի կրակից, ցայտել չիպի մեջ: Երբ ես սպառեցի գաղափարները, իմ ընդհանուր կոդը մոտ 1200 բայթ էր:

Ես ընդմիջում վերցրեցի և շատ էի կարդում AVR կոդի օպտիմալացման մասին: Ես մոտ էի հանձնվելու և ամեն ինչ վերաշարադրելու հավաքի լեզվով, բայց վերջին հնարավորությունը տվեցի դրան: Օպտիմալացման վերջնական շտապի ժամանակ ես ծիածանը կտրեցի երեք հիմնական գույների և ստիպեցի մյուսներին հաշվարկել ինքնաթիռում, ես ստուգեցի ամեն ինչ և հետևեցի AVR- ի օպտիմալացման առաջարկներին և վերջապես…

avrdude: գրելու ֆլեշ (1004 բայթ):

Գրելը | #################################################### | 100% 0.90s

Կարիք չկա ասելու, որ ես օգտագործել եմ գրեթե ամբողջ RAM և ընդամենը մեկ բայթ EEPROM ՝ ընթացիկ ռեժիմը պահելու համար: Ես չեմ ենթադրում, որ սա իդեալական և վերջնական իրականացում է: Այն պարզապես աշխատում է և տեղավորվում է միկրոկոնտրոլերի վրա: Համոզված եմ, դուք կարող եք դա անել ավելի լավ: Ես իսկապես այդպիսին եմ: Ես պարզապես ուզում եմ կիսվել այն թվացյալ անիրագործելի խնդրի լուծման հաճույքով, որը սկզբում գրեթե անհնար եք համարում: «Այսպիսով, կոտրելը նշանակում է ուսումնասիրել հնարավորի սահմանները …» -Ռիչարդ Ստալման:

Պարագաներ:

1x ATtiny13 MCU ($ 0.28 = $ 0.24 MCU- ի համար SOP-8 փաթեթում և $ 0.04 DIP8 ադապտերի համար)

8x WS2812 RGB LED (խորհուրդ եմ տալիս տախտակ կամ LED շերտի մի կտոր) (0,42 դոլար)

1x TTP223 հպման կոճակ (0,10 դոլար)

1x Micro USB- ից DIP ադապտեր (0.14 դոլար)

1x 10kΩ դիմադրություն (<0,01 դոլար)

1x 100nF կերամիկական կոնդենսատոր (<0,01 դոլար)

1x 10-47µF էլեկտրոլիտային կոնդենսատոր (<0,01 դոլար)

Ընդհանուր <0.97 դոլար

Քայլ 1: Softwareրագրաշարի տեղադրում

Softwareրագրաշարի տեղադրում
Softwareրագրաշարի տեղադրում

Ձեզ անհրաժեշտ կլինի avr-gcc գործիքաշղթա ՝ սկզբնաղբյուրը կազմելու և avrdude կոմունալը ՝ միկրոկառավարիչի ROM- ը վերբեռնելու համար: Տեղադրման գործընթացը բավականին պարզ և պարզ է, բայց դա կախված է ձեր օպերացիոն համակարգից: Եթե դուք օգտագործում եք մի տեսակ GNU/Linux, ապա հավանաբար արդեն ունեք համապատասխան փաթեթներ ձեր պահեստի ծառում: Այս նախագծի աղբյուրի կոդը կարելի է ներբեռնել այստեղ ՝

github.com/arduinocelentano/t13_ws2812_lamp

Ձեզ նույնպես պետք է light_ws2812 գրադարան.

github.com/cpldcpu/light_ws2812

Avr-gcc գործիքաշղթայի և ծրագրի աղբյուրների ձեռքբերումից հետո գործարկեք ձեր տերմինալը և մուտքագրեք հետևյալ ծածկագիրը.

cd ուղի/դեպի/նախագիծ

կատարել

Քայլ 2. Միկրոհսկիչի ծրագրավորում

Միկրոհսկիչի ծրագրավորում
Միկրոհսկիչի ծրագրավորում
Միկրոհսկիչի ծրագրավորում
Միկրոհսկիչի ծրագրավորում
Միկրոհսկիչի ծրագրավորում
Միկրոհսկիչի ծրագրավորում

Եթե ունեք ինչ -որ USBASP ծրագրավորող, պարզապես միացրեք այն Attiny- ին ՝ ըստ դրա պինուտի: Սովորաբար դա այսպիսի տեսք կունենար, բայց ես խստորեն խորհուրդ եմ տալիս ստուգել ձեր իրական pinout- ը:

Այլապես, դուք կարող եք օգտագործել Arduino տախտակը որպես ծրագրավորող: Բացեք Arduino IDE- ն և գտեք Arduino ISP- ի օրինակը «Ֆայլ → Օրինակներ» ընտրացանկում: Էսքիզը վերբեռնելուց հետո ձեր Arduino տախտակը հանդես է գալիս որպես ծրագրավորող: Էսքիզային կոդի մեջ տրված մեկնաբանությունները ձեզ հուշում կտան քերծելու մասին:

Հիմա վազիր

կատարել ֆլեշ

բռնկել MCU- ն և

ապահովիչ սարքել

ապահովիչի բիթեր տեղադրելու համար:

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