Tartalomjegyzék:

1 USD értékű LED hangulatjelző lámpa ATtiny13 és WS2812: 7 lépésben
1 USD értékű LED hangulatjelző lámpa ATtiny13 és WS2812: 7 lépésben

Videó: 1 USD értékű LED hangulatjelző lámpa ATtiny13 és WS2812: 7 lépésben

Videó: 1 USD értékű LED hangulatjelző lámpa ATtiny13 és WS2812: 7 lépésben
Videó: Azahriah x Desh - Miafasz 2024, November
Anonim
1 USD értékű LED hangulatjelző lámpa ATtiny13 és WS2812 készülékekkel
1 USD értékű LED hangulatjelző lámpa ATtiny13 és WS2812 készülékekkel

Kövesse a szerző további információit:

Személyes CalDAV szerver egy fedélzeti számítógépen
Személyes CalDAV szerver egy fedélzeti számítógépen
Személyes CalDAV szerver egy fedélzeti számítógépen
Személyes CalDAV szerver egy fedélzeti számítógépen
LCD Invaders: Space Invaders Like Game 16x2 LCD karakterkijelzőn
LCD Invaders: Space Invaders Like Game 16x2 LCD karakterkijelzőn
LCD Invaders: Space Invaders Like Game 16x2 LCD karakterkijelzőn
LCD Invaders: Space Invaders Like Game 16x2 LCD karakterkijelzőn
Octarine: Színmegfelelő játék WS2812 RGB LED -ekkel
Octarine: Színmegfelelő játék WS2812 RGB LED -ekkel
Octarine: Színmegfelelő játék WS2812 RGB LED -ekkel
Octarine: Színmegfelelő játék WS2812 RGB LED -ekkel

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

Szoftver beállítása
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

A mikrokontroller programozása
A mikrokontroller programozása
A mikrokontroller programozása
A mikrokontroller programozása
A mikrokontroller programozása
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: