Obsah:
Video: A $ 1 LED nálada s ATtiny13 a WS2812: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
Od arduinocelentano Sledujte další od autora:
Jedná se o levnou náladovou lampu se čtyřmi režimy.
1. Duhová jiskra. Jiskra světla se čas od času pohybuje nahoru a postupně mění barvu.
2. Duhová záře. Stabilní záře, která postupně mění barvu.
3. Simulace zapálení svíčky.
4. Vypnuto.
Režimy můžete přepínat klepnutím na dotykové tlačítko v horní části. Aktuální režim se po vypnutí uloží do paměti EEPROM.
Jak malý je ATtiny13?
Cílem bylo získat maximální funkce z minimálního hardwaru, něco složitějšího než automatizovaný přepínač nebo teploměr, projekt blízko okraje tohoto drobného mikrokontroléru. Koneckonců, omezení vás nutí myslet kreativně, že? No, na začátku to tak vypadalo.
Nejnáročnější v tomto projektu bylo vložit celý kód do ATtiny13. Mikrokontrolér má 1 kB bajtů a pouze 64 bajtů RAM. Ano, když říkám „bajty“, mám na mysli ty, které se skládají z osmi bitů. 64 bajtů pro všechny vaše místní proměnné a zásobník volání. Aby bylo jasno, zvažte, že musíme ovládat 8 RGB LED diod. Každý z nich je definován 3 bajty (jeden pro červený, zelený a modrý kanál). Abychom tedy uložili stav 8 LED diod, budeme muset implementovat pole 8 struktur, každý po 3 bajtech a ukazatel na začátek tohoto pole by zabral ještě jeden bajt. 25 ze 64 bajtů je tedy venku. Právě jsme použili 39% RAM a ještě jsme opravdu nezačali. K uložení sedmi základních duhových barev budete navíc potřebovat 7 × 3 = 21 bajtů, takže 72% RAM je mimo. No, pokud jde o základní barvy, přeháním: v RAM je nepotřebujeme všechny současně a nikdy se nemění, takže je lze implementovat jako konstantní pole, které bude místo paměti RAM uloženo ve flashi. Každopádně to vytváří celkový dojem o použitém hardwaru.
Vzpomněl jsem si na Knuthovo prohlášení o předčasné optimalizaci a začal jsem prototypovat tři režimy lampy samostatně, abych viděl, co se stane. Testoval jsem je samostatně, abych se ujistil, že fungují správně a každý vyhovuje mému mikrokontroléru. Trvalo to pár večerů, než se to podařilo, a všechno šlo dobře … dokud jsem se je nepokusil dát dohromady do příkazu switch. Nástroj avr-size hlásil velikost textové sekce 1,5 Kb (s příznakem -s avr-gcc). V tu chvíli byl můj původní záměr chytit nějaký ATtiny25 s 2Kb bleskem a to mohl být šťastný konec tohoto příběhu.
Ale nějak jsem cítil, že po značné optimalizaci se mi podaří ten mizerný kód zmenšit na 1 kB. Trvalo však ještě týden, než si uvědomíte, že je to nemožné, a ještě jeden týden, abyste to stejně dokázali. Musel jsem snížit duhu na pět základních barev (bez výrazného vizuálního rozdílu). Zbavil jsem se případových příkazů a pomocí řetězce if-then-if jsem zmenšil velikost binárního kódu. Fire animace potřebuje generátor pseudonáhodných čísel, který je docela objemný, takže jsem implementoval zjednodušenou verzi LFSR s konstantní počáteční hodnotou. Nestarám se o délku celého cyklu PRNG a jen hledám rovnováhu sestupu mezi velikostí kódu a „realistickou ohnivou animací“. Také jsem implementoval spoustu drobných optimalizací, které si právě nepamatuji, a dokonce se mi podařilo do čipu blikat všechny režimy kromě ohně. Když mi došly nápady, můj celkový kód byl asi 1200 bajtů.
Vzal jsem si časový limit a hodně jsem četl o optimalizaci kódu AVR. Byl jsem blízko toho, že jsem to všechno vzdal a přepsal do montážního jazyka, ale dal jsem tomu poslední šanci. Během závěrečného optimalizačního spěchu jsem ořízl duhu na tři základní barvy a nechal jsem vypočítat další za běhu, vše jsem zkontroloval a sledoval doporučení optimalizace AVR a nakonec …
avrdude: zápis flash (1004 bytů):
Psaní | ############################################################################# | 100% 0,90 s
Není třeba říkat, že jsem pro uložení aktuálního režimu použil téměř veškerou RAM a pouze jeden bajt EEPROM. Neznamená to, že je to ideální a konečná implementace. Prostě to funguje a hodí se k mikrokontroléru. Jsem si jistý, že bys to mohl udělat lépe. Opravdu jsem. Jen se chci podělit o zábavu při řešení zdánlivě nepraktického problému, který na začátku považujete za téměř nemožný. "Hackování tedy znamená prozkoumat hranice toho, co je možné …" -Richard Stallman.
Zásoby:
1x ATtiny13 MCU (0,28 $ = 0,24 $ za MCU v balení SOP-8 a 0,04 $ za adaptér DIP8)
8x WS2812 RGB LED (doporučuji desku nebo kousek LED pásku) (0,42 $)
1x dotykové tlačítko TTP223 (0,10 $)
1x adaptér Micro USB na DIP (0,14 USD)
1x odpor 10 kΩ (<0,01 $)
1x keramický kondenzátor 100nF (<0,01 $)
1x 10–47 µF elektrolytický kondenzátor (<0,01 $)
Celkem <0,97 $
Krok 1: Nastavení softwaru
Budete potřebovat nástrojový řetězec avr-gcc pro kompilaci zdrojového kódu a nástroj avrdude pro nahrání ROM mikrokontroléru. Proces instalace je velmi jednoduchý a přímočarý, ale závisí na vašem operačním systému. Používáte -li nějaký druh GNU/Linux, pravděpodobně již máte ve stromu úložiště správné balíčky. Zdrojový kód tohoto projektu lze stáhnout zde:
github.com/arduinocelentano/t13_ws2812_lamp
Budete také potřebovat knihovnu light_ws2812:
github.com/cpldcpu/light_ws2812
Jakmile získáte zdroje nástrojů a projektů avr-gcc, spusťte terminál a zadejte následující kód:
cd cesta/k/projektu
udělat
Krok 2: Programování mikrokontroléru
Pokud máte nějaký programátor USBASP, připojte jej k Attiny podle jeho vývodu. Obvykle by to vypadalo takto, ale důrazně doporučuji zkontrolovat skutečný pinout!
Alternativně můžete jako programátor použít desku Arduino. Otevřete Arduino IDE a najděte příklad Arduino ISP v nabídce „Soubor → Příklady”. Po nahrání náčrtu funguje vaše deska Arduino jako programátor. Komentáře v kódu skici by vám poskytly vodítko pro pinout.
Nyní běžte
udělat blesk
blikat MCU a
udělat pojistku
pro nastavení bitů pojistek.
Doporučuje:
3D tištěná LED nálada: 15 kroků (s obrázky)
3D tištěná LED nálada: Vždy jsem byl fascinován lampami, takže schopnost kombinovat 3D tisk a Arduino s LED bylo něco, co jsem potřeboval sledovat. Koncept je velmi jednoduchý a výsledek je jedním z nejuspokojivějších vizuálních zkušenosti, které můžete dát
Nálada nálady IOT: 8 kroků (s obrázky)
IOT Mood Lamp: Nálada IoT Mood vyrobená pomocí Node MCU (ESP8266), RGB LED diod a sklenice. Barvy lampy lze měnit pomocí aplikace Blynk. Vybral jsem pamětní sochu Tonyho Starkse, kterou jsem nechal vytisknout 3D a umístit do této lampy. Můžete si vzít jakoukoli hotovou sochu nebo
Projektová nálada: 11 kroků
Projektová nálada: V tomto tutoriálu navrhnete a vytvoříte jednoduchý obvod pro vytvoření náladové lampy, která používá knoflíkovou baterii, krokosvorky a jedno LED světlo
Moderní RGB nálada: 7 kroků (s obrázky)
Moderní RGB nálada: Chcete svému stolu dodat styl? Nechali jsme vás zakrýt DIY náladovou lampou vyrobenou z dílů, které snadno najdete ležet ve své garáži nebo kůlně. Naše náladová lampa má estetický a moderní design a poskytuje vám úplnou kontrolu nad barevným
LED nálada: 9 kroků (s obrázky)
LED lampa nálady: Nedávno jsem narazil na LED kostku od Grega Davilla. Je to skvělé umělecké dílo. Inspiroval jsem se tím, dokonce i já jsem chtěl něco takového udělat. Ale tohle byl způsob, jak se dostat z mé ligy. Rozhodl jsem se udělat jeden krok za druhým a zmenšil jsem způsob