Taula de continguts:
Vídeo: Una làmpada d'ànim LED d'1 $ amb ATtiny13 i WS2812: 7 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:10
Per arduinocelentano Segueix més de l'autor:
Es tracta d’una làmpada d’ànim de baix cost amb quatre modes.
1. Espurna arc de Sant Martí. Una espurna de llum es mou cap amunt cada cop i canvia de color a poc a poc.
2. Resplendor de l’arc de Sant Martí. Un resplendor estable que canvia de color a poc a poc.
3. Simulació de foc d’espelmes.
4. Desactivat.
Podeu canviar de mode tocant un botó tàctil situat a la part superior. El mode actual es desa a la memòria EEPROM després d’apagar-lo.
Què tan petit és ATtiny13?
La idea era obtenir les màximes funcions del maquinari mínim, quelcom més complex que el commutador automàtic o el termòmetre, un projecte proper a la vora d’aquest petit microcontrolador. Al cap i a la fi, les restriccions et fan pensar creatiu, oi? Bé, semblava que al principi.
El més difícil d’aquest projecte va ser introduir tot el codi a ATtiny13. El microcontrolador té flash de 1K bytes i només 64 bytes de RAM. Sí, quan dic "bytes", em refereixo a aquells que consten de vuit bits. 64 bytes per a totes les vostres variables locals i pila de trucades. Per deixar-ho clar, considerem que hem de controlar 8 LED RGB. Cadascun d'ells està definit per 3 bytes (un per al canal vermell, verd i blau respectivament). Per tant, només per emmagatzemar l’estat dels vuit LEDs, haurem d’implementar una matriu de vuit estructures de 3 bytes cadascun i un punter al començament d’aquesta matriu prendria un byte més. Així, 25 de 64 bytes estan fora. Acabem d’utilitzar un 39% de memòria RAM i encara no hem començat. A més, per emmagatzemar set colors bàsics de l’arc de Sant Martí, necessitareu 7 × 3 = 21 bytes, de manera que el 72% de la memòria RAM està fora. Bé, pel que fa als colors bàsics, exagero: no els necessitem tots al mateix temps a la memòria RAM i mai canvien, de manera que es poden implementar com una matriu constant per emmagatzemar en flash en lloc de RAM. De tota manera, dóna una impressió general sobre el maquinari usat.
Recordant l’afirmació de Knuth sobre l’optimització prematura, vaig començar a prototipar tres modes de làmpades per separat per veure què passa. Els he provat per separat per assegurar-me que funcionen correctament i que cadascun s’adapta al meu microcontrolador. Va passar un parell de tardes per aconseguir-ho i tot va anar bé … fins que vaig intentar reunir-les dins de la declaració switch. La utilitat avr-size va informar d'una mida de secció de text d'1,5 Kb (amb el senyalador -s d'avr-gcc). En aquell moment la meva intenció original era agafar una mica d'ATtiny25 amb flash de 2 KB i aquest podria haver estat el final feliç d'aquesta història.
Però d'alguna manera vaig sentir que després d'una considerable optimització podia reduir aquest codi merdós a 1Kb. Tot i això, va trigar una setmana més a adonar-se que és impossible i una setmana més aconseguir-ho de totes maneres. Vaig haver de tallar un arc de Sant Martí a cinc colors bàsics (sense diferències visuals significatives). Em vaig desfer de les afirmacions de cas i vaig utilitzar una cadena de if-then-if per reduir la mida del codi binari. L'animació de foc necessita un generador de números pseudoreator que és bastant voluminós, de manera que vaig implementar una versió simplificada de LFSR amb un valor inicial constant. No m'importa la durada del cicle complet de PRNG i només busco un equilibri de descens entre la mida del codi i "l'animació de foc realista". També he implementat moltes optimitzacions menors que no recordo ara mateix i fins i tot he aconseguit fer passar tots els modes a part de disparar al xip. Quan em vaig quedar sense idees, el meu codi total era d’uns 1200 bytes.
Em vaig trigar i havia estat llegint molt sobre l’optimització del codi AVR. Vaig estar a punt de renunciar i reescriure tot en llenguatge assemblador, però vaig donar-li l’última oportunitat. Durant la punta d’optimització final, he tallat un arc de Sant Martí a tres colors bàsics i he fet que es calculessin altres sobre la marxa, ho inspeccionava tot i seguia les recomanacions d’optimització AVR i finalment …
avrdude: escriptura flash (1004 bytes):
Escriptura | ####################################################### | 100% 0,90
No cal dir que he utilitzat gairebé tota la memòria RAM i només un byte d'EEPROM per emmagatzemar el mode actual. No implica que es tracti d'una implementació ideal i definitiva. Simplement funciona i s’adapta al microcontrolador. Estic segur que ho podríeu fer millor. Realment ho estic. Només vull compartir la diversió de resoldre un problema aparentment poc pràctic que considereu gairebé impossible al principi. "Per tant, pirateria significa explorar els límits del que és possible …" - Richard Stallman.
Subministraments:
1 x MCU ATtiny13 (0,28 dòlars = 0,24 dòlars per a MCU al paquet SOP-8 i 0,04 dòlars per a l'adaptador DIP8)
8 LEDs RGB WS2812 (recomano una placa o una peça de banda LED) (0,42 dòlars)
1 botó tàctil TTP223 (0,10 dòlars)
1 adaptador Micro USB a DIP (0,14 dòlars)
1 resistència de 10 kΩ (<0,01 dòlars)
1x condensador ceràmic 100nF (<0,01 $)
1x condensador electrolític de 10–47µF (<0,01 $)
Total <0,97 USD
Pas 1: Configuració del programari
Necessitareu la cadena d’eines avr-gcc per compilar el codi font i la utilitat avrdude per penjar la ROM del microcontrolador. El procés d’instal·lació és pràcticament senzill i senzill, però depèn del vostre sistema operatiu. Si utilitzeu algun tipus de GNU / Linux, probablement ja tingueu paquets adequats a l'arbre del vostre dipòsit. El codi font d’aquest projecte es pot descarregar aquí:
github.com/arduinocelentano/t13_ws2812_lamp
També necessitareu una biblioteca light_ws2812:
github.com/cpldcpu/light_ws2812
Un cop tingueu les fonts del projecte i de la cadena d’eines avr-gcc, executeu el terminal i escriviu el codi següent:
camí del CD / a / projecte
fer
Pas 2: Programació del microcontrolador
Si teniu algun tipus de programador USBASP, connecteu-lo a Attiny segons el seu pinout. Normalment es veuria així, però us recomano que comproveu el vostre pinout real.
Com a alternativa, podeu utilitzar una placa Arduino com a programador. Obriu Arduino IDE i cerqueu l’exemple d’ISP Arduino al menú “Fitxer → Exemples”. Després de penjar l’esbós, la vostra placa Arduino fa de programador. Els comentaris del codi d’esbós us donarien una pista per identificar-los.
Ara corre
fer flaix
per llampar la MCU i
fer fusible
per configurar bits de fusibles.
Recomanat:
Làmpada d'ànim LED impresa en 3D: 15 passos (amb imatges)
Làmpada d’ànim LED amb impressió 3D: sempre he tingut aquesta fascinació per les làmpades, de manera que tenia la capacitat de combinar la impressió 3D i Arduino amb LEDs. El concepte és molt senzill i el resultat és un dels aspectes visuals més satisfactoris experiències que pots posar
Làmpada d'ànim LED Low Poly: 9 passos (amb imatges)
Làmpada d'ànim LED Low Poly: una gran addició a qualsevol escriptori, prestatge o taula. El botó discret situat a la base us permet recórrer diversos patrons d’il·luminació LED. Tant se val si voleu utilitzar la vostra làmpada per estudiar, relaxar-vos o fins i tot fer festa … n’hi ha moltes
Neopixel Ws2812 Rainbow LED Glow amb M5stick-C - Funcionament de Rainbow a Neopixel Ws2812 amb M5stack M5stick C amb Arduino IDE: 5 passos
Neopixel Ws2812 Rainbow LED Glow amb M5stick-C | Execució de Rainbow a Neopixel Ws2812 Utilització de M5stack M5stick C Usant Arduino IDE: Hola, nois en aquest instructable, aprendrem a utilitzar LEDs neopixel ws2812 o led strip o led matrix o anell led amb placa de desenvolupament m5stack m5stick-C amb Arduino IDE i farem un patró d'arc de Sant Martí amb ell
Llum LED de bricolatge: llum d'ànim moderna d'escriptori amb control remot: 8 passos (amb imatges)
Llum LED de bricolatge: làmpada moderna d'ànim d'escriptori amb control remot: en aquest article repassaré el procés que vaig fer per construir aquesta impressionant làmpada d'ànim LED en forma de piràmide. Vaig utilitzar l'auró per a l'estructura principal i algunes espines de caoba per obtenir més resistència. Per a les llums he utilitzat llums LED RGB que vénen en una tira de 16 peus
Una llum d'ànim LED RGB de potència controlada a distància: 3 passos (amb imatges)
Una llum d'ànim LED RGB de potència controlada a distància: controleu el color d'un potent feix de llum LED amb un control remot, emmagatzemeu els colors i recordeu-los a voluntat. Amb aquesta cosa, puc controlar el color d'una llum brillant en molts colors diferents mitjançant els tres colors fonamentals: vermell verd