Satura rādītājs:

LED noskaņas lampa 1 USD vērtībā ar ATtiny13 un WS2812: 7 soļi
LED noskaņas lampa 1 USD vērtībā ar ATtiny13 un WS2812: 7 soļi

Video: LED noskaņas lampa 1 USD vērtībā ar ATtiny13 un WS2812: 7 soļi

Video: LED noskaņas lampa 1 USD vērtībā ar ATtiny13 un WS2812: 7 soļi
Video: Лампочки USB 5 вольт. Сначала посмотри, а потом покупай! 2024, Jūlijs
Anonim
LED noskaņas lampa 1 USD vērtībā ar ATtiny13 un WS2812
LED noskaņas lampa 1 USD vērtībā ar ATtiny13 un WS2812

Sekojiet vairāk autora:

Personīgais CalDAV serveris vienplates datorā
Personīgais CalDAV serveris vienplates datorā
Personīgais CalDAV serveris vienplates datorā
Personīgais CalDAV serveris vienplates datorā
LCD iebrucēji: kosmosa iebrucējiem līdzīga spēle 16x2 LCD rakstzīmju displejā
LCD iebrucēji: kosmosa iebrucējiem līdzīga spēle 16x2 LCD rakstzīmju displejā
LCD iebrucēji: kosmosa iebrucējiem līdzīga spēle 16x2 LCD rakstzīmju displejā
LCD iebrucēji: kosmosa iebrucējiem līdzīga spēle 16x2 LCD rakstzīmju displejā
Oktarīns: krāsu saskaņošanas spēle ar WS2812 RGB gaismas diodēm
Oktarīns: krāsu saskaņošanas spēle ar WS2812 RGB gaismas diodēm
Oktarīns: krāsu saskaņošanas spēle ar WS2812 RGB gaismas diodēm
Oktarīns: krāsu saskaņošanas spēle ar WS2812 RGB gaismas diodēm

Šī ir lēta garastāvokļa lampa ar četriem režīmiem.

1. Varavīksnes dzirksts. Gaismas dzirksts ik pa laikam virzās uz augšu un pakāpeniski maina krāsu.

2. Varavīksnes mirdzums. Stabils spīdums, kas pakāpeniski maina krāsu.

3. Sveces uguns simulācija.

4. Izslēgts.

Režīmus var pārslēgt, augšpusē pieskaroties pieskāriena pogai. Pašreizējais režīms pēc izslēgšanas tiek saglabāts EEPROM atmiņā.

Cik niecīgs ir ATtiny13?

Ideja bija iegūt maksimālas iespējas no minimālās aparatūras, kaut kas sarežģītāks par automatizētu slēdzi vai termometru - projektu, kas atrodas tuvu šī mazā mikrokontrollera malai. Galu galā ierobežojumi liek domāt radoši, vai ne? Nu, sākumā tā izskatījās.

Visgrūtākais šajā projektā bija ievietot visu kodu ATtiny13. Mikrokontrolleram ir 1K baitu zibspuldze un tikai 64 baiti RAM. Jā, sakot “baiti”, es domāju tos, kas sastāv no astoņiem bitiem. 64 baiti visiem vietējiem mainīgajiem un zvanu stekam. Lai tas būtu skaidrs, apsveriet, ka mums ir jākontrolē 8 RGB gaismas diodes. Katru no tiem nosaka 3 baiti (viens attiecīgi sarkanajam, zaļajam un zilajam kanālam). Tātad, lai saglabātu 8 gaismas diodes stāvokli, mums būs jāievieš 8 struktūru masīvs ar 3 baitiem katrā, un rādītājs uz šī masīva sākumu aizņem vēl vienu baitu. Tādējādi 25 no 64 baitiem ir ārā. Mēs tikko esam izmantojuši 39% RAM un vēl neesam sākuši. Turklāt, lai saglabātu septiņas varavīksnes pamatkrāsas, jums būs nepieciešami 7 × 3 = 21 baiti, tātad 72% RAM nav. Runājot par pamatkrāsām, es pārspīlēju: mums tie visi nav vajadzīgi vienlaicīgi RAM un tie nekad nemainās, tāpēc tos var ieviest kā pastāvīgu masīvu, kas jāglabā zibspuldzes vietā, nevis RAM. Jebkurā gadījumā tas rada vispārēju iespaidu par izmantoto aparatūru.

Atceroties Knutas paziņojumu par priekšlaicīgu optimizāciju, es sāku ar trīs lampu režīmu prototipēšanu atsevišķi, lai redzētu, kas notiek. Esmu tos pārbaudījis atsevišķi, lai pārliecinātos, ka tie darbojas pareizi un vai katrs atbilst manam mikrokontrolleram. Pagāja pāris vakaru, lai to paveiktu, un viss gāja labi … līdz es mēģināju tos salikt slēdzī. avr izmēra utilīta ziņoja par 1,5 Kb teksta sadaļas lielumu (ar -s karogu avr-gcc). Tajā brīdī mans sākotnējais nodoms bija paķert kādu ATtiny25 ar 2Kb zibspuldzi, un tas varēja būt šī stāsta laimīgās beigas.

Bet kaut kā man šķita, ka pēc ievērojamas optimizācijas man izdosies samazināt šo štrunts kodu 1Kb. Tomēr pagāja vēl nedēļa, lai saprastu, ka tas nav iespējams, un vēl viena nedēļa, lai to paveiktu. Varavīksne bija jāsamazina līdz piecām pamatkrāsām (bez būtiskas vizuālās atšķirības). Es atbrīvojos no gadījumu paziņojumiem un izmantoju ķēdi if-tad-if, lai samazinātu binārā koda lielumu. Ugunsgrēka animācijai ir nepieciešams pseidogadījuma skaitļu ģenerators, kas ir diezgan apjomīgs, tāpēc es ieviesu vienkāršotu LFSR versiju ar nemainīgu sākotnējo vērtību. Man vienalga PRNG pilna cikla garums un tikai meklēju nolaišanās līdzsvaru starp koda lielumu un “reālistisku uguns animāciju”. Es arī īstenoju daudzas nelielas optimizācijas, kuras šobrīd neatceros, un pat izdevās mikroshēmā ieslēgt visus režīmus, izņemot uguni. Kad man beidzās idejas, mans kopējais kods bija aptuveni 1200 baitu.

Es paņēmu taimautu un daudz lasīju par AVR koda optimizāciju. Es biju tuvu tam, lai atteiktos un visu pārrakstītu montāžas valodā, bet devu tai pēdējo iespēju. Pēdējā optimizācijas steigā es esmu sagriezis varavīksni trīs pamatkrāsās un licis citas aprēķināt pēc lidojuma, es visu pārbaudīju un ievēroju AVR optimizācijas ieteikumus un visbeidzot …

avrdude: rakstīšanas zibspuldze (1004 baiti):

Rakstīšana | ################################################ | 100% 0.90

Nav nepieciešams teikt, ka pašreizējā režīma saglabāšanai esmu izmantojis gandrīz visu RAM un tikai vienu EEPROM baitu. Es nenozīmē, ka tā ir ideāla un galīga īstenošana. Tas vienkārši darbojas un atbilst mikrokontrolleram. Esmu pārliecināts, ka jūs varētu darīt labāk. Es tiešām esmu. Es tikai vēlos dalīties priekā atrisināt šķietami nepraktisku problēmu, kuru jūs sākumā uzskatāt par gandrīz neiespējamu. "Tādējādi uzlaušana nozīmē iespēju robežu izpēti …" -Ričards Stallmans.

Piegādes:

1x ATtiny13 MCU (0,28 USD = 0,24 USD MCU SOP-8 iepakojumā un 0,04 USD DIP8 adapterim)

8x WS2812 RGB gaismas diodes (es iesaku dēli vai LED sloksnes gabalu) (0,42 ASV dolāri)

1x TTP223 pieskāriena poga (0,10 ASV dolāri)

1x Micro USB uz DIP adapteris (0,14 ASV dolāri)

1x 10kΩ rezistors (<$ 0,01)

1x 100nF keramikas kondensators (<$ 0,01)

1x 10–47µF elektrolītiskais kondensators (<$ 0,01)

Kopā <0,97 ASV dolāri

1. darbība. Programmatūras iestatīšana

Programmatūras iestatīšana
Programmatūras iestatīšana

Jums būs nepieciešama rīku ķēde avr-gcc avota koda apkopošanai un avrdude utilīta mikrokontrollera ROM augšupielādēšanai. Instalēšanas process ir diezgan vienkāršs un vienkāršs, taču tas ir atkarīgs no jūsu operētājsistēmas. Ja izmantojat kaut kādu GNU/Linux, jums, iespējams, jau ir piemērotas pakotnes jūsu krātuves kokā. Šī projekta avota kodu var lejupielādēt šeit:

github.com/arduinocelentano/t13_ws2812_lamp

Jums būs nepieciešama arī bibliotēka light_ws2812:

github.com/cpldcpu/light_ws2812

Kad esat ieguvis rīku ķēdi avr-gcc un projektu avotus, palaidiet savu termināli un ierakstiet šādu kodu:

cd ceļš/uz/projektu

veidot

2. solis: mikrokontrollera programmēšana

Mikrokontrollera programmēšana
Mikrokontrollera programmēšana
Mikrokontrollera programmēšana
Mikrokontrollera programmēšana
Mikrokontrollera programmēšana
Mikrokontrollera programmēšana

Ja jums ir sava veida USBASP programmētājs, vienkārši pievienojiet to Attiny atbilstoši tā kontaktam. Parasti tas izskatītos šādi, bet es ļoti iesaku pārbaudīt savu faktisko pinout!

Alternatīvi kā programmētāju varat izmantot Arduino plāksni. Atveriet Arduino IDE un izvēlnē “Fails → Piemēri” atrodiet Arduino ISP piemēru. Pēc skices augšupielādes jūsu Arduino tāfele darbojas kā programmētājs. Skices koda komentāri ļautu jums uzzināt, kā to atrast.

Tagad skrien

uzplaiksnīt

lai mirgo MCU un

uztaisīt drošinātāju

lai uzstādītu drošinātāju bitus.

Ieteicams: