INHOUDSOPGAWE:
Video: N LED -bui van $ 1 met ATtiny13 en WS2812: 7 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Deur arduinocelentano Volg meer deur die skrywer:
Dit is 'n goedkoop stemmingslamp met vier modusse.
1. Reënboogvonk. 'N Vonk van lig beweeg keer op keer opwaarts en verander geleidelik die kleur.
2. Rainbow gloei. 'N Stabiele gloed wat geleidelik die kleur verander.
3. Kersvuur simulasie.
4. Af.
U kan van modus verander deur op die aanraakknoppie bo -aan te tik. Die huidige modus word in EEPROM -geheue gestoor nadat dit afgeskakel is.
Hoe klein is ATtiny13?
Die idee was om maksimum funksies te verkry van minimum hardeware, iets ingewikkelder as outomatiese skakelaar of termometer, 'n projek naby die rand van hierdie klein mikrobeheerder. Beperkings laat jou tog kreatief dink, nie waar nie? Wel, dit het in die begin so gelyk.
Die uitdagendste in hierdie projek was om al die kode in ATtiny13 te skuif. Die mikrobeheerder het 1K grepe flits en slegs 64 grepe RAM. Ja, as ek 'grepe' sê, bedoel ek dié wat uit agt bis bestaan. 64 grepe vir al u plaaslike veranderlikes en oproepstapel. Om dit duidelik te maak, oorweeg ons dat ons 8 RGB -LED's moet beheer. Elkeen van hulle word gedefinieer deur 3 grepe (een vir onderskeidelik rooi, groen en blou kanaal). Dus, net om die toestand van 8 LED's op te slaan, moet ons 'n skikking van 8 strukture van 3 grepe elk implementeer, en 'n aanwyser na die begin van hierdie skikking sal nog een byte verg. Dus is 25 van 64 grepe uit. Ons het pas 39% RAM gebruik en nog nie regtig begin nie. Om sewe basiese reënboogkleure te stoor, benodig u 7 × 3 = 21 grepe, dus is 72% van die RAM op. Wat basiese kleure betref, ek oordryf: ons het hulle nie almal terselfdertyd in RAM nodig nie, en hulle verander nooit, daarom kan hulle geïmplementeer word as 'n konstante skikking wat in flash in plaas van RAM gestoor moet word. Dit gee in elk geval 'n algehele indruk oor gebruikte hardeware.
Toe ek Knuth se stelling oor voortydige optimalisering onthou, het ek begin om drie lampmodusse afsonderlik te prototipeer om te sien wat gebeur. Ek het dit afsonderlik getoets om seker te maak dat dit behoorlik werk en dat elkeen by my mikrobeheerder pas. Dit het 'n paar aande geneem om dit te bereik, en alles het goed afgeloop … totdat ek probeer het om dit in die skakelaarverklaring saam te stel. avr-size nut berig 'n teksgrootte van 1,5 Kb (met -s vlag van avr-gcc). Op daardie oomblik was my oorspronklike bedoeling om ATtiny25 met 2Kb -flits te gryp, en dit kon die gelukkige einde van hierdie verhaal gewees het.
Maar op die een of ander manier het ek gevoel dat ek na 'n aansienlike optimalisering die slegte kode in 1Kb kon krimp. Dit het egter nog 'n week geneem om te besef dat dit onmoontlik is en nog 'n week om dit te bereik. Ek moes 'n reënboog in vyf basiese kleure sny (sonder noemenswaardige visuele verskil). Ek het van die verklarings ontslae geraak en 'n ketting van if-then-if gebruik om die grootte van die binêre kode te verminder. Vuuranimasie benodig 'n pseudo -ewekansige getalgenerator wat taamlik omvangryk is, so ek het 'n vereenvoudigde weergawe van LFSR met konstante aanvanklike waarde geïmplementeer. Ek gee nie om vir PRNG se volle sikluslengte nie en soek net 'n afdraande balans tussen kodegrootte en 'realistiese vuuranimasie'. Ek het ook baie klein optimerings geïmplementeer wat ek nie nou kan onthou nie, en selfs daarin geslaag om al die modi, behalwe vuur, in die chip te flits. Toe ek sonder idees was, was my totale kode ongeveer 1200 grepe.
Ek het tyd geneem en ek het baie gelees oor die optimalisering van AVR -kode. Ek was naby daaraan om op te gee en alles in monteringstaal te herskryf, maar het dit die laaste kans gegee. Tydens die laaste optimalisasie -stormloop het ek 'n reënboog in drie basiese kleure gesny en ander vinnig laat bereken, ek het alles nagegaan en AVR -aanbevelings gevolg en uiteindelik …
avrdude: skryfflits (1004 grepe):
Skryf | #################################################### | 100% 0.90s
Dit is nie nodig om te sê dat ek byna al die RAM en net een byte EEPROM gebruik het om die huidige modus op te slaan. Ek impliseer nie dat dit 'n ideale en uiteindelike implementering is nie. Dit werk net en pas by die mikrobeheerder. Ek is seker, jy kan dit beter doen. Ek is regtig. Ek wil net die plesier deel om 'n skynbaar onpraktiese probleem op te los wat u aan die begin amper onmoontlik vind. 'Inbraak beteken dus om die grense van wat moontlik is te ondersoek …' -Richard Stallman.
Benodighede:
1x ATtiny13 MCU ($ 0,28 = $ 0,24 vir MCU in SOP-8-pakket en $ 0,04 vir DIP8-adapter)
8x WS2812 RGB LED's (ek beveel 'n bord of 'n stuk LED -streep aan) ($ 0,42)
1x TTP223 aanraakknoppie ($ 0,10)
1x Micro USB na DIP -adapter ($ 0,14)
1x 10kΩ weerstand (<$ 0,01)
1x 100nF keramiek kondensator (<$ 0,01)
1x 10–47µF elektrolitiese kondensator (<$ 0,01)
Totaal <$ 0,97
Stap 1: Opstel van sagteware
U benodig avr-gcc-werktuigketting om die bronkode en avrdude-nut saam te stel om die ROM van die mikrobeheerder op te laai. Die installasieproses is redelik eenvoudig en eenvoudig, maar dit hang af van u bedryfstelsel. As u 'n soort GNU/Linux gebruik, het u waarskynlik reeds die regte pakkette in u bewaarplekboom. Die bronkode van hierdie projek kan hier afgelaai word:
github.com/arduinocelentano/t13_ws2812_lamp
U benodig ook 'n light_ws2812 -biblioteek:
github.com/cpldcpu/light_ws2812
Sodra u avr-gcc toolchain en projekbronne gekry het, voer u terminale uit en tik die volgende kode:
cd pad/na/projek
maak
Stap 2: Programmering van die mikrobeheerder
As u 'n USBASP -programmeerder het, koppel dit dan net aan Attiny volgens die pinout. Gewoonlik sou dit so lyk, maar ek beveel sterk aan dat u u werklike pinout nagaan!
Alternatiewelik kan u 'n Arduino -bord as programmeerder gebruik. Maak Arduino IDE oop en vind die voorbeeld van Arduino ISP in die menu "File → voorbeelde". Nadat u die skets opgelaai het, tree u Arduino -bord op as 'n programmeerder. Die opmerkings in die sketskode gee u 'n idee om vas te stel.
Nou hardloop
flits maak
om die MCU te flits en
maak lont
om lontstukke in te stel.
Aanbeveel:
Die beheer van verskeie LED's met Python en die GPIO -penne van u Framboos Pi: 4 stappe (met foto's)
Die beheer van verskeie LED's met Python en die GPIO -penne van u Raspberry Pi: Hierdie instruksie demonstreer hoe u meer GPIO -penne op u RaspberryPi kan beheer om 4 LED's aan te dryf. Dit sal u ook kennis maak met parameters en voorwaardelike stellings in Python. Ons vorige instruksies met behulp van die GPIO -penne van u Raspberry Pi om
Neopixel Ws2812 Rainbow LED Glow With M5stick-C - Rainbow op Neopixel Ws2812 gebruik M5stack M5stick C met Arduino IDE: 5 stappe
Neopixel Ws2812 Rainbow LED Glow With M5stick-C | Rainbow op Neopixel Ws2812 gebruik M5stack M5stick C Met behulp van Arduino IDE: Hallo ouens in hierdie instruksies, ons leer hoe om neopixel ws2812 LED's of led strip of led matrix of led ring te gebruik met m5stack m5stick-C ontwikkelbord met Arduino IDE en ons sal maak 'n reënboogpatroon daarmee saam
Beheer van 7-segment LED-skerm met behulp van ESP8266-webbediener: 8 stappe (met foto's)
Beheer van 7-segment LED-skerm met behulp van ESP8266-webbediener: My projek het 'n Nodemcu ESP8266 wat 'n 7-segment-skerm deur die http-bediener beheer met behulp van html-vorm
Hoe om van 0 tot 99 te tel met behulp van 8051 mikrobeheerder met 7 segmentweergawe: 5 stappe (met foto's)
Hoe om van 0 tot 99 te tel Met behulp van 8051 mikrobeheerder met 7 -segmentweergawe: Hallo almal, in hierdie tutoriaal gaan ons u vertel hoe om van 0 tot 99 te tel met twee 7 -segment -skerms
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: 9 stappe (met foto's)
Instruksies vir die voltooiing van die opmaak van die baanskyfontwerp vir die opheffing/verlaging van die middelste voetsteun op motorwielstoele: die middelste voetsteunhysers moet goed onder die sitplek geberg word en laer om te ontplooi. 'N Meganisme vir die onafhanklike werking van die opberging en ontplooiing van voetsteun is nie ingesluit by rolstoele op die mark nie, en PWC -gebruikers het die behoefte uitgespreek