Sisällysluettelo:

1 dollarin LED -tunnelmavalaisin ATtiny13: lla ja WS2812: 7 vaihetta
1 dollarin LED -tunnelmavalaisin ATtiny13: lla ja WS2812: 7 vaihetta

Video: 1 dollarin LED -tunnelmavalaisin ATtiny13: lla ja WS2812: 7 vaihetta

Video: 1 dollarin LED -tunnelmavalaisin ATtiny13: lla ja WS2812: 7 vaihetta
Video: От Берлина до Праги: белоэмигранты расселяются по Европе. Вторая серия супервыпуска Редакции 2024, Marraskuu
Anonim
1 dollarin LED -tunnelmavalaisin, jossa ATtiny13 ja WS2812
1 dollarin LED -tunnelmavalaisin, jossa ATtiny13 ja WS2812

Seuraa lisää tekijältä:

Henkilökohtainen CalDAV-palvelin yhden kortin tietokoneella
Henkilökohtainen CalDAV-palvelin yhden kortin tietokoneella
Henkilökohtainen CalDAV-palvelin yhden kortin tietokoneella
Henkilökohtainen CalDAV-palvelin yhden kortin tietokoneella
LCD -hyökkääjät: Space Invaders Like Game 16x2 LCD -merkkinäytöllä
LCD -hyökkääjät: Space Invaders Like Game 16x2 LCD -merkkinäytöllä
LCD -hyökkääjät: Space Invaders Like Game 16x2 LCD -merkkinäytöllä
LCD -hyökkääjät: Space Invaders Like Game 16x2 LCD -merkkinäytöllä
Octarine: Värien sovituspeli, jossa WS2812 RGB -LEDit
Octarine: Värien sovituspeli, jossa WS2812 RGB -LEDit
Octarine: Värien sovituspeli, jossa WS2812 RGB -LEDit
Octarine: Värien sovituspeli, jossa WS2812 RGB -LEDit

Tämä on edullinen tunnelmavalaisin, jossa on neljä tilaa.

1. Sateenkaaren kipinä. Valon kipinä liikkuu kerta toisensa jälkeen ylöspäin ja muuttaa väriä vähitellen.

2. Sateenkaaren hehku. Vakaa hehku, joka muuttaa väriä vähitellen.

3. Kynttilän palosimulaatio.

4. Pois päältä.

Voit vaihtaa tilaa napauttamalla yläosassa olevaa kosketuspainiketta. Nykyinen tila tallennetaan EEPROM -muistiin virran katkaisun jälkeen.

Kuinka pieni ATtiny13 on?

Ajatuksena oli saada maksimaaliset ominaisuudet minimilaitteistosta, jotain monimutkaisempaa kuin automaattinen kytkin tai lämpömittari, projekti lähellä tämän pienen mikrokontrollerin reunaa. Loppujen lopuksi rajoitukset saavat sinut ajattelemaan luovaa, eikö? No siltä se näytti alussa.

Haastavinta tässä projektissa oli työntää kaikki koodit ATtiny13: een. Mikro -ohjaimessa on 1K tavua flash ja vain 64 tavua RAM. Kyllä, kun sanon "tavuja", tarkoitan niitä, jotka koostuvat kahdeksasta bitistä. 64 tavua kaikille paikallisille muuttujille ja puhelupinolle. Selvyyden vuoksi meidän on ohjattava 8 RGB -LEDiä. Jokainen niistä on määritelty 3 tavulla (yksi punaiselle, vihreälle ja siniselle kanavalle). Joten vain 8 LEDin tilan tallentamiseksi meidän on toteutettava 8 rakenteen ryhmä, joka on 3 tavua, ja osoitin tämän taulukon alkuun vie yhden tavun. Näin ollen 25 tavua 64 tavusta on poissa. Olemme juuri käyttäneet 39% RAM -muistista emmekä ole vielä aloittaneet. Lisäksi seitsemän sateenkaaren perusvärin tallentamiseen tarvitset 7 × 3 = 21 tavua, joten 72% RAM -muistista on poissa. Mitä tulee perusväreihin, liioittelen: emme tarvitse kaikkia niitä samanaikaisesti RAM -muistissa, eivätkä ne muutu koskaan, joten ne voidaan toteuttaa vakiona, joka tallennetaan flash -muistiin RAM -muistin sijaan. Joka tapauksessa se antaa yleisen vaikutelman käytetyistä laitteista.

Muistaen Knuthin lausunnon ennenaikaisesta optimoinnista, aloin prototyypittää kolme lampputilaa erikseen nähdäkseni, mitä tapahtuu. Olen testannut niitä erikseen varmistaakseni, että ne toimivat kunnolla ja että jokainen sopii mikrokontrolleriini. Kesti pari iltaa sen suorittamiseen ja kaikki sujui hyvin… kunnes yritin koota ne yhteen kytkinlauseen sisällä. avr-kokoinen apuohjelma ilmoitti 1,5 kb: n tekstiosion koon (-s-lipulla avr-gcc). Tuolloin alkuperäinen tarkoitukseni oli napata ATtiny25 2Kb: n salamalla ja se olisi voinut olla tämän tarinan onnellinen loppu.

Mutta jotenkin minusta tuntui, että huomattavan optimoinnin jälkeen pystyisin pienentämään tuon paskan koodin 1 kt: ksi. Kesti kuitenkin vielä yhden viikon tajuta, että se on mahdotonta, ja vielä yksi viikko sen saavuttamiseen. Minun piti leikata sateenkaari viiteen perusväriin (ilman merkittävää visuaalista eroa). Pääsin eroon tapauslausunnoista ja pienensin binäärikoodin kokoa ketjussa jos-sitten-jos. Tulianimaatio tarvitsee näennäissatunnaislukugeneraattorin, joka on melko paljon tilaa vievä, joten toteutin yksinkertaistetun version LFSR: stä, jolla oli vakio alkuarvo. En välitä PRNG: n koko syklin pituudesta ja etsin vain laskevaa tasapainoa koodin koon ja "realistisen tulianimaation" välillä. Toteutin myös monia pieniä optimointeja, joita en muista juuri nyt, ja jopa onnistuin salamaan kaikki tilat tulipalon lisäksi sirulle. Kun ideat loppuivat, koko koodini oli noin 1200 tavua.

Otin aikakatkaisun ja olin lukenut paljon AVR -koodin optimoinnista. Olin lähellä luovuttaa ja kirjoittaa kaiken kokoonpanokielellä, mutta annoin sille viimeisen mahdollisuuden. Viimeisen optimointikurssin aikana olen leikannut sateenkaaren kolmeen perusväriin ja tehnyt muut laskettavaksi lennossa, tarkistin kaiken ja seurasin AVR -optimointisuosituksia ja lopulta…

avrdude: flash -kirjoitus (1004 tavua):

Kirjoittaminen | ################################################## | 100% 0.90s

Ei tarvitse sanoa, että käytin lähes koko RAM -muistia ja vain yhden tavun EEPROMia nykyisen tilan tallentamiseen. En tarkoita, että tämä olisi ihanteellinen ja lopullinen toteutus. Se vain toimii ja sopii mikrokontrolleriin. Olen varma, että voisit tehdä sen paremmin. Minä todella olen. Haluan vain jakaa ilon ratkaista ilmeisesti epäkäytännöllinen ongelma, jota pidät alussa lähes mahdottomana.”Hakkerointi tarkoittaa siis mahdollisuuksien rajojen tutkimista…” -Richard Stallman.

Tarvikkeet:

1x ATtiny13 MCU (0,28 dollaria = 0,24 dollaria MCU: lle SOP-8-paketissa ja 0,04 dollaria DIP8-sovittimelle)

8x WS2812 RGB -LEDit (suosittelen levyä tai pala LED -raitaa) (0,42 dollaria)

1x TTP223 -kosketuspainike (0,10 dollaria)

1x Micro USB -DIP -sovitin (0,14 dollaria)

1x 10 kΩ vastus (<$ 0.01)

1x 100nF keraaminen kondensaattori (<$ 0.01)

1x 10–47µF elektrolyyttikondensaattori (<0,01 $)

Yhteensä <0,97 dollaria

Vaihe 1: Ohjelmiston asennus

Ohjelmiston asennus
Ohjelmiston asennus

Tarvitset avr-gcc-työkaluketjun lähdekoodin kokoamiseen ja avrdude-apuohjelman mikro-ohjaimen ROM-levyn lataamiseen. Asennusprosessi on melko yksinkertainen ja suoraviivainen, mutta se riippuu käyttöjärjestelmästäsi. Jos käytät jonkinlaista GNU/Linuxia, sinulla on luultavasti jo asianmukaiset paketit arkistopuussasi. Tämän projektin lähdekoodin voi ladata täältä:

github.com/arduinocelentano/t13_ws2812_lamp

Tarvitset myös light_ws2812 -kirjaston:

github.com/cpldcpu/light_ws2812

Kun sinulla on avr-gcc-työkaluketju ja projektilähteet, suorita päätelaite ja kirjoita seuraava koodi:

cd -polku/projektiin

tehdä

Vaihe 2: Mikro -ohjaimen ohjelmointi

Mikro -ohjaimen ohjelmointi
Mikro -ohjaimen ohjelmointi
Mikro -ohjaimen ohjelmointi
Mikro -ohjaimen ohjelmointi
Mikro -ohjaimen ohjelmointi
Mikro -ohjaimen ohjelmointi

Jos sinulla on jonkinlainen USBASP -ohjelmoija, liitä se Attinyyn sen pistokkeen mukaisesti. Yleensä se näyttää tältä, mutta suosittelen lämpimästi tarkistamaan todellisen pinoutisi!

Vaihtoehtoisesti voit käyttää Arduino -korttia ohjelmoijana. Avaa Arduino IDE ja etsi Arduino ISP -esimerkki valikosta "Tiedosto → Esimerkit". Luonnoksen lataamisen jälkeen Arduino -korttisi toimii ohjelmoijana. Luonnoskoodin kommentit antavat sinulle vihjeen pinoutista.

Juokse nyt

saada salama

vilkuttaa MCU ja

tehdä sulake

sulakepaikkojen asettamiseen.

Suositeltava: