Kazalo:

LED svetilka za razpoloženje v vrednosti 1 USD z ATtiny13 in WS2812: 7 korakov
LED svetilka za razpoloženje v vrednosti 1 USD z ATtiny13 in WS2812: 7 korakov

Video: LED svetilka za razpoloženje v vrednosti 1 USD z ATtiny13 in WS2812: 7 korakov

Video: LED svetilka za razpoloženje v vrednosti 1 USD z ATtiny13 in WS2812: 7 korakov
Video: Top 10 Reasons to START Walking For Exercise [Weight Loss & More] 2024, November
Anonim
LED svetilka za razpoloženje z ATtiny13 in WS2812 za 1 USD
LED svetilka za razpoloženje z ATtiny13 in WS2812 za 1 USD

Avtor arduinocelentano Sledite še avtorja:

Osebni strežnik CalDAV na enosmernem računalniku
Osebni strežnik CalDAV na enosmernem računalniku
Osebni strežnik CalDAV na enosmernem računalniku
Osebni strežnik CalDAV na enosmernem računalniku
LCD Invaders: Space Invaders Like Game na 16 -palčnem LCD -prikazovalniku
LCD Invaders: Space Invaders Like Game na 16 -palčnem LCD -prikazovalniku
LCD Invaders: Space Invaders Like Game na 16 -palčnem LCD -prikazovalniku
LCD Invaders: Space Invaders Like Game na 16 -palčnem LCD -prikazovalniku
Octarine: barvna igra z LED diodami WS2812 RGB
Octarine: barvna igra z LED diodami WS2812 RGB
Octarine: igra za ujemanje barv z LED diodami WS2812 RGB
Octarine: igra za ujemanje barv z LED diodami WS2812 RGB

To je poceni svetilka za razpoloženje s štirimi načini delovanja.

1. Mavrična iskra. Iskra svetlobe se od časa do časa premika navzgor in postopoma spreminja barvo.

2. Mavrični sij. Stabilen sijaj, ki postopoma spreminja barvo.

3. Simulacija ognja sveč.

4. Izklopljeno.

Načine lahko preklopite tako, da se dotaknete gumba na dotik na vrhu. Trenutni način se po izklopu shrani v pomnilnik EEPROM.

Kako majhen je ATtiny13?

Zamisel je bila, da bi dobili čim več funkcij iz minimalne strojne opreme, nekaj bolj zapletenega kot avtomatizirano stikalo ali termometer, projekt blizu roba tega drobnega mikrokrmilnika. Konec koncev vas omejitve spodbudijo k ustvarjalnemu razmišljanju, kajne? No, tako je bilo videti na začetku.

Največji izziv pri tem projektu je bil vstaviti vso kodo v ATtiny13. Mikrokrmilnik ima 1K bajtov flash in samo 64 bajtov RAM -a. Da, ko rečem "bajti", mislim na tiste, ki so sestavljeni iz osmih bitov. 64 bajtov za za vse vaše lokalne spremenljivke in sklad klicev. Da bi bilo jasno, pomislimo, da moramo nadzorovati 8 LED RGB. Vsak od njih je definiran s 3 bajti (eden za rdeči, zeleni in modri kanal). Torej, samo za shranjevanje stanja 8 LED, bomo morali implementirati matriko 8 struktur po 3 bajte in kazalec na začetek tega niza bo vzel še en bajt. Tako je 25 od 64 bajtov zunaj. Ravnokar smo porabili 39% RAM -a in se v resnici še nismo začeli. Poleg tega boste za shranjevanje sedmih osnovnih barv mavrice potrebovali 7 × 3 = 21 bajtov, zato 72% RAM -a ni na voljo. No, kar se tiče osnovnih barv, pretiravam: ne potrebujemo jih vseh hkrati v RAM -u in se nikoli ne spremenijo, zato se lahko izvajajo kot konstantna matrika, ki se shrani v bliskavico namesto v RAM. Kakorkoli že, daje splošen vtis o rabljeni strojni opremi.

Ko sem se spomnil Knuthove izjave o prezgodnji optimizaciji, sem začel ločeno izdelovati tri načine svetilk, da vidim, kaj se zgodi. Preizkusil sem jih ločeno, da sem prepričan, da delujejo pravilno in da vsak ustreza mojemu mikrokrmilniku. To je trajalo nekaj večerov in vse je šlo dobro … dokler jih nisem poskušal sestaviti v izjavi o stikalih. pripomoček velikosti avr je poročal o velikosti 1,5 kb besedilnega odseka (z -s zastavico avr-gcc). Takrat je bil moj prvotni namen vzeti nekaj ATtiny25 z 2Kb bliskavico in to bi lahko bil srečen konec te zgodbe.

Nekako pa se mi je zdelo, da bi lahko po precejšnji optimizaciji to sranje kodo skrčil v 1 KB. Vendar je potreboval še en teden, da se je zavedel, da je to nemogoče, in še en teden, da bi to vseeno dosegel. Mavrico sem moral izrezati na pet osnovnih barv (brez bistvene vizualne razlike). Znebil sem se stavkov velikih primerov in uporabil verigo if-then-if za zmanjšanje velikosti binarne kode. Požarna animacija potrebuje generator psevdo naključnih števil, ki je precej velik, zato sem uvedel poenostavljeno različico LFSR s konstantno začetno vrednostjo. Ne zanima me dolžina celotnega cikla PRNG in samo iščem ravnovesje med velikostjo kode in "realistično animacijo ognja". Izvedel sem tudi veliko manjših optimizacij, ki se jih trenutno ne morem spomniti, in celo uspel celo vklopiti vse načine razen ognja v čip. Ko mi je zmanjkalo idej, je bila moja skupna koda približno 1200 bajtov.

Vzel sem si časovne omejitve in veliko sem bral o optimizaciji kode AVR. Skoraj sem se odrekel in vse prepisal v zbirnem jeziku, vendar sem dal zadnjo priložnost. Med zadnjo optimizacijo sem mavrico razrezal na tri osnovne barve in naredil druge, ki so bile na hitro izračunane, vse sem pregledal in sledil priporočilom za optimizacijo AVR in na koncu …

avrdude: zapisovanje bliskavice (1004 bajtov):

Pisanje | ################################################# | 100% 0,90 s

Ni treba reči, da sem za shranjevanje trenutnega načina porabil skoraj ves RAM in samo en bajt EEPROM -a. Ne mislim, da je to idealna in končna izvedba. Deluje in ustreza mikrokrmilniku. Prepričan sem, da bi to lahko naredili bolje. Res sem. Želim samo deliti zabavo pri reševanju očitno nepraktičnega problema, ki se vam zdi na začetku skoraj nemogoč. "Tako vdor pomeni raziskovanje meja možnega …" -Richard Stallman.

Zaloge:

1x MCIN ATtiny13 (0,28 USD = 0,24 USD za MCU v paketu SOP-8 in 0,04 USD za DIP8 adapter)

8x LED WS2812 RGB (priporočam ploščo ali kos LED traku) (0,42 USD)

1x gumb na dotik TTP223 (0,10 USD)

1x Micro USB v DIP adapter (0,14 USD)

1x 10 kΩ upor (<0,01 USD)

1x 100nF keramični kondenzator (<0,01 USD)

1x 10-47 μF elektrolitski kondenzator (<0,01 USD)

Skupaj <0,97 USD

1. korak: Namestitev programske opreme

Namestitev programske opreme
Namestitev programske opreme

Za sestavljanje izvorne kode in pripomočka avrdude za nalaganje ROM-a mikrokrmilnika boste potrebovali orodno verigo avr-gcc. Postopek namestitve je precej preprost in enostaven, vendar je odvisen od vašega operacijskega sistema. Če uporabljate nekakšen GNU/Linux, imate v drevesu skladišča verjetno že ustrezne pakete. Izvorno kodo tega projekta lahko prenesete tukaj:

github.com/arduinocelentano/t13_ws2812_lamp

Potrebovali boste tudi knjižnico light_ws2812:

github.com/cpldcpu/light_ws2812

Ko dobite orodno verigo avr-gcc in vire projektov, zaženite svoj terminal in vnesite naslednjo kodo:

cd pot/do/projekta

narediti

2. korak: Programiranje mikrokrmilnika

Programiranje mikrokrmilnika
Programiranje mikrokrmilnika
Programiranje mikrokrmilnika
Programiranje mikrokrmilnika
Programiranje mikrokrmilnika
Programiranje mikrokrmilnika

Če imate nekakšen programer USBASP, ga priključite na Attiny glede na njegov pinout. Običajno bi to izgledalo tako, vendar toplo priporočam, da preverite svoj dejanski pinout!

Druga možnost je, da kot programer uporabite ploščo Arduino. Odprite Arduino IDE in poiščite primer ponudnika internetnih storitev Arduino v meniju »Datoteka → Primeri«. Po nalaganju skice vaša plošča Arduino deluje kot programer. Komentarji v kodi skice vam lahko dajo nasvet.

Zdaj teči

naredi bliskavico

za utripanje MCU in

naredite varovalko

za nastavitev bitov varovalk.

3. korak: Sheme

Priporočena: