Sisukord:

1 dollari suurune LED -meeleolulamp koos ATtiny13 ja WS2812: 7 sammu
1 dollari suurune LED -meeleolulamp koos ATtiny13 ja WS2812: 7 sammu

Video: 1 dollari suurune LED -meeleolulamp koos ATtiny13 ja WS2812: 7 sammu

Video: 1 dollari suurune LED -meeleolulamp koos ATtiny13 ja WS2812: 7 sammu
Video: Основные ошибки при возведении перегородок из газобетона #5 2024, November
Anonim
1 dollari suurune LED -meeleolulamp koos ATtiny13 ja WS2812 -ga
1 dollari suurune LED -meeleolulamp koos ATtiny13 ja WS2812 -ga

Jälgi autori lisateavet:

Isiklik CalDAV-server ühe pardaarvutis
Isiklik CalDAV-server ühe pardaarvutis
Isiklik CalDAV-server ühe pardaarvutis
Isiklik CalDAV-server ühe pardaarvutis
LCD -sissetungijad: Space Invaders Like Game 16x2 LCD -tähemärkide ekraanil
LCD -sissetungijad: Space Invaders Like Game 16x2 LCD -tähemärkide ekraanil
LCD -sissetungijad: Space Invaders Like Game 16x2 LCD -tähemärkide ekraanil
LCD -sissetungijad: Space Invaders Like Game 16x2 LCD -tähemärkide ekraanil
Oktariin: värvide sobitamise mäng WS2812 RGB LED -idega
Oktariin: värvide sobitamise mäng WS2812 RGB LED -idega
Oktariin: värvide sobitamise mäng WS2812 RGB LED -idega
Oktariin: värvide sobitamise mäng WS2812 RGB LED -idega

See on nelja režiimiga odav meeleolulamp.

1. Vikerkaare säde. Valgusäde liigub aeg -ajalt ülespoole ja muudab järk -järgult värvi.

2. Vikerkaare kuma. Stabiilne sära, mis muudab värvi järk -järgult.

3. Küünla tule simulatsioon.

4. Väljas.

Režiime saate vahetada, puudutades ülaosas olevat puutetundlikku nuppu. Praegune režiim salvestatakse pärast väljalülitamist EEPROM -i mällu.

Kui väike on ATtiny13?

Idee oli saada maksimaalseid funktsioone minimaalsest riistvarast - midagi keerulisemat kui automaatne lüliti või termomeeter - projekt, mis asub selle väikese mikrokontrolleri serva lähedal. Lõppude lõpuks panevad piirangud mõtlema loovalt, eks? No alguses tundus nii.

Selle projekti kõige keerulisem oli kogu kood ATtiny13 -sse sisestada. Mikrokontrolleril on 1K baiti välk ja vaid 64 baiti RAM. Jah, kui ma ütlen “baite”, pean silmas neid, mis koosnevad kaheksast bitist. 64 baiti kõigi kohalike muutujate ja kõnede virna jaoks. Selguse huvides peame kaaluma 8 RGB LED -i juhtimist. Igaüks neist on määratletud 3 baidiga (üks vastavalt punase, rohelise ja sinise kanali jaoks). Niisiis, lihtsalt 8 LED -i oleku salvestamiseks peame rakendama 8 struktuuri massiivi, igaüks 3 baiti ja kursor selle massiivi algusesse võtaks veel ühe baidi. Seega on 64 baidist 25 väljas. Me kasutasime äsja 39% muutmälu ja pole veel tegelikult alustanud. Lisaks vajate seitsme põhivärvvärvi salvestamiseks 7 × 3 = 21 baiti, nii et 72% RAM -ist on väljas. Põhivärvide osas liialdan: me ei vaja neid kõiki korraga RAM -is ja need ei muutu kunagi, nii et neid võidakse rakendada püsiva massiivina, mis salvestatakse RAM -i asemel välklampi. Igatahes jätab see üldise mulje kasutatud riistvara kohta.

Meenutades Knuthi avaldust enneaegse optimeerimise kohta, alustasin kolme lambirežiimi prototüüpimisega, et näha, mis juhtub. Olen neid eraldi testinud, veendumaks, et need töötavad korralikult ja igaüks sobib minu mikrokontrolleriga. Selle saavutamiseks kulus paar õhtut ja kõik läks hästi … kuni proovisin neid lüliti avalduses kokku panna. avr-suurusega utiliit teatas 1,5 Kb tekstiosa suurusest (koos -s lipuga avr-gcc). Sel hetkel oli minu esialgne kavatsus haarata 2Kb välguga ATtiny25 ja see võis olla selle loo õnnelik lõpp.

Kuid millegipärast tundsin, et pärast märkimisväärset optimeerimist suudan selle jubeda koodi 1Kb -ni kokku tõmmata. Siiski kulus veel nädal, et aru saada, et see on võimatu, ja veel nädal selle saavutamiseks. Pidin vikerkaare viieks põhivärviks lõikama (ilma olulise visuaalse erinevuseta). Ma vabanesin juhtumite avaldustest ja kasutasin binaarse koodi suuruse vähendamiseks ahelat if-then-if. Tuleanimatsioon vajab pseudojuhuslike numbrite generaatorit, mis on üsna mahukas, nii et rakendasin LFSR -i lihtsustatud versiooni, millel oli konstantne algväärtus. Mind ei huvita PRNG kogu tsükli pikkus ja ma otsin lihtsalt tasakaalu koodi suuruse ja "realistliku tuleanimatsiooni" vahel. Rakendasin ka palju väiksemaid optimeerimisi, mida ma praegu ei mäleta, ja suutsin isegi kõik režiimid peale tule kiibile välgutada. Kui mul ideed otsa said, oli minu kood kokku umbes 1200 baiti.

Võtsin aja maha ja lugesin palju AVR -koodi optimeerimise kohta. Olin lähedal loobumisele ja kõike koostamiskeeles ümber kirjutama, kuid andsin sellele viimase võimaluse. Viimase optimeerimissurma ajal lõikasin vikerkaare kolmeks põhivärviks ja panin teised käigu pealt arvutama, kontrollisin kõike ja järgisin AVR -i optimeerimissoovitusi ning lõpuks…

avrdude: kirjutusvälk (1004 baiti):

Kirjutamine | ########################################### | 100% 0,90

Pole vaja öelda, et kasutasin praeguse režiimi salvestamiseks peaaegu kogu RAM -i ja ainult ühte baiti EEPROM -i. Ma ei vihja sellele, et see on ideaalne ja ülim teostus. See lihtsalt töötab ja sobib mikrokontrolleriga. Olen kindel, et saaksite seda paremini teha. Ma tõesti olen. Ma tahan lihtsalt jagada lõbu lahendada näiliselt ebapraktilist probleemi, mida peate alguses peaaegu võimatuks. "Seega tähendab häkkimine võimalike piiride uurimist …" -Richard Stallman.

Tarvikud:

1x ATtiny13 MCU (0,28 dollarit = 0,24 dollarit MCU jaoks SOP-8 paketis ja 0,04 dollarit DIP8 adapteri jaoks)

8x WS2812 RGB LED -d (soovitan tahvlit või LED -riba) (0,42 dollarit)

1x TTP223 puutetundlik nupp (0,10 dollarit)

1x mikro -USB -DIP -adapter (0,14 dollarit)

1x 10 kΩ takisti (<$ 0,01)

1x 100nF keraamiline kondensaator (<$ 0,01)

1x 10–47 µF elektrolüütkondensaator (<$ 0,01)

Kokku <0,97 dollarit

Samm: tarkvara seadistamine

Tarkvara seadistamine
Tarkvara seadistamine

Lähtekoodi koostamiseks ja mikrokontrolleri ROM-i üleslaadimiseks vajate avrdude utiliiti. Installiprotsess on üsna lihtne ja arusaadav, kuid see sõltub teie operatsioonisüsteemist. Kui kasutate mingit GNU/Linuxi, on teie hoidlapuus tõenäoliselt juba korralikud paketid. Selle projekti lähtekoodi saab alla laadida siit:

github.com/arduinocelentano/t13_ws2812_lamp

Teil on vaja ka raamatukogu light_ws2812:

github.com/cpldcpu/light_ws2812

Kui teil on avr-gcc tööriistakett ja projektiallikad, käivitage oma terminal ja tippige järgmine kood:

cd tee/projektile

tegema

Samm: mikrokontrolleri programmeerimine

Mikrokontrolleri programmeerimine
Mikrokontrolleri programmeerimine
Mikrokontrolleri programmeerimine
Mikrokontrolleri programmeerimine
Mikrokontrolleri programmeerimine
Mikrokontrolleri programmeerimine

Kui teil on mingi USBASP -programmeerija, ühendage see lihtsalt Attiny -ga vastavalt selle pistikule. Tavaliselt näeks see välja selline, kuid soovitan tungivalt kontrollida oma tegelikku pinouti!

Teise võimalusena võite programmeerijana kasutada Arduino plaati. Avage Arduino IDE ja leidke Arduino ISP näide menüüst „Fail → Näited”. Pärast visandi üleslaadimist toimib teie Arduino plaat programmeerijana. Eskiisikoodi kommentaarid annaksid teile vihje selle kohta, kuidas neid otsida.

Nüüd jookse

sähvatama

MCU välgutamiseks ja

teha kaitsmeid

kaitsmeotsikute seadistamiseks.

Soovitan: