Obsah:
Video: A $ 1 LED nálada s ATtiny13 a WS2812: 7 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Od arduinocelentano Nasledovať viac od autora:
Jedná sa o lacnú náladovú lampu so štyrmi režimami.
1. Dúhová iskra. Iskra svetla sa z času na čas pohybuje nahor a postupne mení farbu.
2. Dúhová žiara. Stabilná žiara, ktorá postupne mení farbu.
3. Simulácia požiaru sviečky.
4. Vypnuté.
Režimy môžete prepínať klepnutím na dotykové tlačidlo v hornej časti. Aktuálny režim sa po vypnutí uloží do pamäte EEPROM.
Aký malý je ATtiny13?
Cieľom bolo získať maximálne funkcie z minimálneho hardvéru, niečoho zložitejšieho ako automatizovaný prepínač alebo teplomer, projekt blízko okraja tohto drobného mikrokontroléra. Koniec koncov, obmedzenia vás nútia myslieť kreatívne, však? No na začiatku to tak vyzeralo.
Najnáročnejšie v tomto projekte bolo vložiť celý kód do ATtiny13. Mikrokontrolér má 1 kB bajtov a iba 64 bajtov RAM. Áno, keď hovorím „bajty“, mám na mysli tie, ktoré pozostávajú z ôsmich bitov. 64 bajtov pre všetky vaše lokálne premenné a zásobník hovorov. Aby bolo jasné, vezmite do úvahy, že musíme ovládať 8 RGB LED diód. Každý z nich je definovaný 3 bytmi (jeden pre červený, zelený a modrý kanál). Aby sme teda uložili stav 8 LED diód, budeme musieť implementovať pole 8 štruktúr po 3 bajty a ukazovateľ na začiatok tohto poľa by potreboval ešte jeden bajt. Vyšlo teda 25 zo 64 bajtov. Práve sme použili 39% pamäte RAM a ešte sme nezačali. Na uloženie siedmich základných dúhových farieb budete navyše potrebovať 7 × 3 = 21 bajtov, takže 72% pamäte RAM je mimo. No, pokiaľ ide o základné farby, preháňam: nepotrebujeme všetky súčasne v RAM a nikdy sa nemenia, takže môžu byť implementované ako konštantné pole na ukladanie do pamäte flash namiesto pamäte RAM. Každopádne to vytvára celkový dojem o použitom hardvéri.
Spomínajúc na Knuthovo vyhlásenie o predčasnej optimalizácii som začal s prototypovaním troch režimov žiaroviek oddelene, aby som zistil, čo sa stane. Testoval som ich samostatne, aby som sa ubezpečil, že fungujú správne a každý z nich vyhovuje môjmu mikrokontroléru. Trvalo to pár večerov, kým sa to podarilo a všetko šlo dobre … kým som sa ich nepokúsil dať dohromady do príkazu switch. Obslužný program avr-size nahlásil veľkosť sekcie textu 1,5 kB (s príznakom -s avr-gcc). V tej chvíli bol môj pôvodný zámer chytiť nejaký ATtiny25 s 2 kB bleskom a to mohol byť šťastný koniec tohto príbehu.
Ale nejako som cítil, že po značnej optimalizácii sa mi podarilo ten mizerný kód zmenšiť na 1 kB. Trvalo však ešte jeden týždeň, kým ste si uvedomili, že je to nemožné, a ešte jeden týždeň, kým ste to dosiahli. Dúhu som musel skrátiť na päť základných farieb (bez výrazného vizuálneho rozdielu). Zbavil som sa pádových príkazov a na zmenšenie veľkosti binárneho kódu som použil reťazec if-then-if. Animácia ohňa potrebuje generátor pseudonáhodných čísel, ktorý je dosť objemný, takže som implementoval zjednodušenú verziu LFSR s konštantnou počiatočnou hodnotou. Nezaujíma ma dĺžka celého cyklu PRNG a iba hľadanie rovnováhy zostupu medzi veľkosťou kódu a „realistickou animáciou ohňa“. Implementoval som tiež veľa drobných optimalizácií, na ktoré si teraz nemôžem spomenúť, a dokonca sa mi podarilo do čipu preniesť všetky režimy okrem ohňa. Keď mi došli nápady, môj celkový kód bol asi 1200 bajtov.
Vzal som si časový limit a veľa som čítal o optimalizácii kódu AVR. Bol som blízko toho, aby som sa všetkého vzdal a prepísal všetko v montážnom jazyku, ale dal som tomu poslednú šancu. Počas záverečného optimalizačného spěchu som skrátil dúhu na tri základné farby a nechal som vypočítať ďalšie za chodu, všetko som skontroloval a sledoval odporúčania optimalizácie AVR a nakoniec …
priemer: zápis blesku (1004 bajtov):
Písanie | ###################################################################### ####### | 100% 0,90 s
Nie je potrebné hovoriť, že som na uloženie aktuálneho režimu použil takmer celú pamäť RAM a iba jeden bajt EEPROM. Neznamená to, že je to ideálna a konečná implementácia. Jednoducho to funguje a pasuje na mikrokontrolér. Som si istý, že to môžeš urobiť lepšie. Naozaj som. Chcem sa len podeliť o zábavu pri riešení zdanlivo nepraktického problému, ktorý na začiatku považujete za takmer nemožný. "Hacking teda znamená preskúmať hranice toho, čo je možné …" -Richard Stallman.
Zásoby:
1x ATtiny13 MCU (0,28 dolára = 0,24 dolára za MCU v balení SOP-8 a 0,04 dolára za adaptér DIP8)
8x LED diódy WS2812 RGB (odporúčam dosku alebo kus pruhu LED) (0,42 dolára)
1x Dotykové tlačidlo TTP223 (0,10 USD)
1x adaptér Micro USB na DIP (0,14 USD)
1x odpor 10 kΩ (<0,01 USD)
1x keramický kondenzátor 100nF (<0,01 dolára)
1x 10–47 µF elektrolytický kondenzátor (<0,01 USD)
Spolu <0,97 USD
Krok 1: Nastavenie softvéru
Na kompiláciu zdrojového kódu budete potrebovať reťazec nástrojov avr-gcc a na odoslanie pamäte ROM mikrokontroléra pomocný program avrdude. Proces inštalácie je veľmi jednoduchý a priamy, ale závisí od vášho operačného systému. Ak používate nejaký druh GNU/Linux, pravdepodobne už máte v strome úložiska správne balíky. Zdrojový kód tohto projektu je možné stiahnuť tu:
github.com/arduinocelentano/t13_ws2812_lamp
Budete tiež potrebovať knižnicu light_ws2812:
github.com/cpldcpu/light_ws2812
Hneď ako získate zdroje reťazcov nástrojov a projektov avr-gcc, spustite terminál a zadajte nasledujúci kód:
cesta CD/do/projektu
urobiť
Krok 2: Programovanie mikrokontroléra
Ak máte nejaký programátor USBASP, jednoducho ho pripojte k Attiny podľa jeho vývodu. Obvykle by to vyzeralo takto, ale dôrazne odporúčam skontrolovať si skutočný výstup!
Alternatívne môžete ako programátor použiť dosku Arduino. Otvorte Arduino IDE a v ponuke „Súbor → Príklady“nájdite príklad Arduino ISP. Po nahraní náčrtu funguje vaša doska Arduino ako programátor. Komentáre v kóde náčrtu vám poskytnú návod na výstup.
Teraz bežte
urobiť blesk
bliká MCU a
urobiť poistku
nastaviť poistkové bity.
Krok 3: Schémy
Odporúča:
3D tlačená LED nálada: 15 krokov (s obrázkami)
3D tlačená LED nálada: Vždy som bol fascinovaný žiarovkami, takže schopnosť kombinovať 3D tlač a Arduino s LED diódami bolo to, čo som potreboval. Koncept je veľmi jednoduchý a výsledok je jedným z najuspokojivejších vizuálnych skúsenosti, ktoré môžete dať
Moderná RGB nálada: 7 krokov (s obrázkami)
Moderná RGB nálada: Chcete svojmu stolu dodať štýl? Nechali sme vás zakryť DIY náladovou lampou vyrobenou z dielov, ktoré ľahko nájdete ležať vo svojej garáži alebo kôlni. Naša náladová lampa má estetický a moderný dizajn a poskytuje vám úplnú kontrolu nad farebnými
RGB Icosahedron nálada: 9 krokov (s obrázkami)
Náladová nálada RGB Icosahedron: Geometrické tvary vždy pútali našu pozornosť. V poslednej dobe vzbudil našu zvedavosť jeden taký fascinujúci tvar: Icosahedron. Icosahedron je mnohosten s 20 tvárami. Icosahedra môže mať nekonečne veľa podobných tvarov, ale
Nálada nálady predného blatníka: 5 krokov
Kontrolka nálady predného blatníka: Po nehode som zostal s autom, ktoré nestálo za opravu ani zošrotovanie. Keď auto zaberalo priestor na mojom dvore, uplatnil som trochu kreativity a zmenil som ho na nábytok. Jedná sa o veľmi jednoduchý projekt, ktorý môžete vytvoriť pomocou simp
LED nálada: 9 krokov (s obrázkami)
LED nálada: Nedávno som narazil na LED kocku od Grega Davilla. Je to skvelé umelecké dielo. Inšpirovaný tým, dokonca aj ja som chcel niečo také urobiť. Ale tento bol mimo mojej ligy. Rozhodol som sa urobiť jeden krok za druhým a zmenšil som spôsob