Tartalomjegyzék:
Videó: 1 USD értékű LED hangulatjelző lámpa ATtiny13 és WS2812: 7 lépésben
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Kövesse a szerző további információit:
Ez egy olcsó hangulatlámpa négy üzemmóddal.
1. Szivárvány szikra. A fényszikra időről időre felfelé mozog, és fokozatosan megváltoztatja a színét.
2. Szivárvány fénye. Stabil ragyogás, amely fokozatosan megváltoztatja a színét.
3. Gyertya tűz szimuláció.
4. Ki.
Módot válthat a felső érintőgomb megérintésével. Kikapcsolás után az aktuális üzemmód az EEPROM memóriába kerül.
Milyen apró az ATtiny13?
Az ötlet az volt, hogy a minimális hardverből maximális funkciókat nyerjen ki, valami bonyolultabbat, mint az automatikus kapcsoló vagy hőmérő, ez a projekt közel van ehhez az apró mikrovezérlőhöz. Végül is a korlátozások kreatív gondolkodásra késztetnek, igaz? Nos, az elején úgy nézett ki.
Ebben a projektben a legnagyobb kihívás az volt, hogy az összes kódot az ATtiny13 -ba helyeztem. A mikrokontroller 1K bájt flash -t és mindössze 64 bájt RAM -ot tartalmaz. Igen, amikor azt mondom, hogy „bájtok”, azokra gondolok, amelyek nyolc bitből állnak. 64 bájt az összes helyi változóhoz és hívásköteghez. Az egyértelműség kedvéért fontolja meg, hogy 8 RGB LED -et kell vezérelnünk. Mindegyiket 3 bájt határozza meg (az egyik a piros, a zöld és a kék csatorna). Tehát csak a 8 LED állapotának tárolásához be kell építenünk egy 8 struktúrából álló tömböt, egyenként 3 bájttal, és a tömb elejére mutató mutató további egy bájtot vesz igénybe. Így a 64 bájtból 25 hiányzik. A memória 39% -át használtuk fel, és még nem kezdtük el. Ezenkívül hét alapvető szivárványszín tárolásához 7 × 3 = 21 bájtra lesz szüksége, így a RAM 72% -a kimarad. Nos, ami az alapszíneket illeti, túlzok: nincs szükségünk mindegyikre egyszerre a RAM -ban, és soha nem változnak, ezért előfordulhat, hogy állandó tömbként valósulnak meg, és nem RAM -ban, hanem flash -ben. Egyébként általános benyomást kelt a használt hardverekről.
Emlékezve Knuth kijelentésére az idő előtti optimalizálásról, három lámpamód prototípusából kezdtem, hogy lássam, mi történik. Külön teszteltem őket, hogy megbizonyosodjak arról, hogy megfelelően működnek, és mindegyik illeszkedik a mikrovezérlőmhöz. Eltelt pár este, hogy megvalósítsam, és minden rendben ment… amíg meg nem próbáltam összerakni őket a switch utasításban. Az avr méretű segédprogram 1,5 kb méretű szövegrész-méretet jelentett (av-gcc -s zászlóval). Abban a pillanatban az eredeti szándékom az volt, hogy megragadok egy ATtiny25 -öt 2Kb -os vakuval, és ez lehetett a történet happy endje.
De valahogy úgy éreztem, hogy jelentős optimalizálás után sikerül 1Kb -ra zsugorítanom ezt a gagyi kódot. Egy hétbe telt azonban, míg rájöttem, hogy lehetetlen, és még egy hét, hogy megvalósítsuk. Szivárványt öt alapszínre kellett vágnom (jelentős vizuális különbség nélkül). Megszabadultam az esetmegállapításoktól, és a ha-akkor-ha láncot használtam a bináris kód méretének csökkentésére. A tűzanimációnak szüksége van egy ál -véletlen számgenerátorra, amely nagyjából terjedelmes, ezért megvalósítottam az LFSR egyszerűsített változatát, állandó kezdeti értékkel. Nem érdekel a PRNG teljes ciklushossza, és csak a süllyedési egyensúlyt keresem a kódméret és a "reális tűzanimáció" között. Sok apró optimalizációt is végrehajtottam, amelyekre most nem emlékszem, és még a tűzön kívül minden módot sikerült a chipbe villannom. Amikor kifogytam az ötletekből, a teljes kódom körülbelül 1200 bájt volt.
Vettem időt, és sokat olvastam az AVR kódoptimalizálásról. Közel álltam ahhoz, hogy feladjam, és mindent átírjak gyülekezeti nyelven, de megadtam neki az utolsó esélyt. A végső optimalizálási rohanás során három alapszínre vágtam a szivárványt, és másokat kiszámítottam menet közben, mindent megvizsgáltam, és követtem az AVR optimalizálási ajánlásait, és végül…
avrdude: flash írás (1004 bájt):
Írás | ################################################### | 100% 0.90
Nem kell mondanom, hogy szinte az összes RAM -ot és csak egy bájt EEPROM -ot használtam az aktuális mód tárolására. Nem értem, hogy ez egy ideális és végső megvalósítás. Csak működik és illeszkedik a mikrokontrollerhez. Biztos vagyok benne, hogy jobban is csinálhatná. Én tényleg. Csak azt a szórakozást szeretném megosztani, amellyel megoldható egy látszólag nem praktikus probléma, amelyet az elején szinte lehetetlennek tart. „A hackelés tehát azt jelenti, hogy feltárjuk a lehetőségek határait…” -Richard Stallman.
Kellékek:
1x ATtiny13 MCU (0,28 USD = 0,24 USD az MCU számára SOP-8 csomagban és 0,04 USD a DIP8 adapterhez)
8x WS2812 RGB LED (ajánlok egy táblát vagy egy darab LED csíkot) (0,42 USD)
1x TTP223 érintőgomb (0,10 USD)
1x Micro USB -DIP adapter (0,14 USD)
1x 10kΩ ellenállás (<$ 0.01)
1x 100nF kerámia kondenzátor (<0,01 $)
1x 10–47µF elektrolit kondenzátor (<0,01 $)
Összesen <0,97 $
1. lépés: Szoftver beállítása
Szüksége lesz avr-gcc eszköztárra a forráskód összeállításához, és avrdude segédprogramra a mikrokontroller ROM-jának feltöltéséhez. A telepítési folyamat meglehetősen egyszerű és egyszerű, de az operációs rendszertől függ. Ha valamilyen GNU/Linuxot használ, akkor valószínűleg már vannak megfelelő csomagjai a tárolófában. A projekt forráskódja letölthető innen:
github.com/arduinocelentano/t13_ws2812_lamp
Szüksége lesz egy light_ws2812 könyvtárra is:
github.com/cpldcpu/light_ws2812
Miután megkapta az avr-gcc eszköztárat és a projektforrásokat, futtassa a terminált, és írja be a következő kódot:
cd path/to/project
készíteni
2. lépés: A mikrokontroller programozása
Ha van valamilyen USBASP programozója, akkor csak csatlakoztassa az Attiny -hoz a pinout szerint. Általában így néz ki, de erősen javaslom, hogy nézze meg a tényleges pinoutot!
Alternatív megoldásként használhat Arduino táblát programozóként. Nyissa meg az Arduino IDE -t, és keresse meg az Arduino internetszolgáltató példáját a „Fájl → Példák” menüben. A vázlat feltöltése után az Arduino táblája programozóként működik. A vázlatkódban található megjegyzések nyomot adhatnak a kiismeréshez.
Most fuss
villanni
hogy felvillanjon az MCU és
biztosítékot készíteni
biztosíték bitek beállításához.
Ajánlott:
3D nyomtatott LED hangulatjelző lámpa: 15 lépés (képekkel)
3D nyomtatott LED hangulatjelző lámpa: Mindig is elbűvöltem a lámpákat, így a 3D nyomtatás és az Arduino LED -ekkel való kombinálásának lehetőségemre volt szükségem. A koncepció nagyon egyszerű, és az eredmény az egyik legmegfelelőbb vizuális tapasztalatokat tudsz felmutatni
Arcfelismerés a Raspberry Pi 4B készüléken 3 lépésben: 3 lépésben
Arcfelismerés a Raspberry Pi 4B készüléken 3 lépésben: Ebben az utasításban az arcfelismerést fogjuk elvégezni a Raspberry Pi 4 rendszeren Shunya O/S alkalmazással a Shunyaface Library segítségével. A Shunyaface egy arcfelismerő/felismerő könyvtár. A projekt célja a leggyorsabb észlelési és felismerési sebesség elérése a
A NODEMcu USB port nem működik? Töltse fel a kódot USB használatával TTL (FTDI) modulba mindössze 2 lépésben: 3 lépésben
A NODEMcu USB port nem működik? Töltse fel a kódot az USB to TTL (FTDI) modul használatával mindössze 2 lépésben: Elege van abból, hogy sok vezetéket csatlakoztat USB -ről TTL modulra a NODEMcu -hoz, kövesse ezt az utasítást, és csak két lépésben töltse fel a kódot. Ha a A NODEMcu nem működik, akkor ne essen pánikba. Csak az USB -illesztőprogram -chip vagy az USB -csatlakozó
A 2 dollár értékű LED kamera lámpa videókhoz és fényképekhez: 11 lépés
A 2 dollár értékű LED -es kamera lámpa videókhoz és fényképekhez: UPDATE: Van egy új és továbbfejlesztett verzióm 180 lumennel. Amióta a digitális fényképezőgépek tisztességes videót készítettek, abbahagytam a DV -videokamerám hordozását, és ehelyett használom a pontomat, és készítsek néhány percet a digitális fényképezőgéppel MOV vagy MPG videó itt és t
Készítsen 2 dollár értékű állítható okostelefon -autótartót 10 perc alatt: 6 lépés (képekkel)
Készítsen 2 dollár értékű állítható okostelefon -autós rögzítést 10 perc alatt: Vándorol valaha a folyosón a boltban az üzlet után, és éppen a megfelelő dolgot keresi a telefon/GPS/mobil eszköz vezetés közben? Rengeteg ilyen van a piacon, de még soha nem sikerült olyat találnom, ami a furcsa helyzetemben működött