Taula de continguts:
- Pas 1: Materials i construcció
- Pas 2: soldar l'AVR amb els LED i l'altaveu
- Pas 3: Programació de l'Attiny13a
- Pas 4: Creació del firmware per a Marioman
- Pas 5: deixar anar el Marioman solt
Vídeo: Parpelleig, cant, marioman: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:18
Utilitzeu un attiny13a, dos LEDs i un altaveu de targetes de felicitació per crear un Marioman parpellejant que reprodueixi la cançó del tema Super Mario Brothers. Aquest pot ser un projecte de baix cost fàcil per a qualsevol persona que estigui buscant una manera divertida d’entrar a la programació AVR. les notes de les cançons es generen mitjançant una ona quadrada emesa en un sol pin del microcontrolador AVR. Els LED que s’alternen en cada nota estan connectats a 2 pins cadascun del mateix xip.
Pas 1: Materials i construcció
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: 1,40 $
- 2 LED: qualsevol LED funcionarà
- 1 bateria de cèl·lula de moneda de liti
www.sparkfun.com/commerce/product_info.php?products_id=338 Cost: 2,00 $
1 porta cel·les de monedes
www.sparkfun.com/commerce/product_info.php?products_id=8822 Cost: 1,25 $
1 altaveu petit d’una targeta de felicitació musical
Cost total dels materials ~ 5 $ Els dos LED es van connectar directament a dos pins cadascun dels attiny13A. S’utilitzen dos pins per a cada LED, el segon pin es troba baix per utilitzar-lo com a connexió a terra. L’altaveu que s’utilitza és el típic d’un que es troba en una targeta de felicitació musical, ho farà qualsevol altaveu petit, ja que genera un to d’ona quadrat, no és massa important preocupar-se per la conducció de l’altaveu ni per la qualitat del so.
Pas 2: soldar l'AVR amb els LED i l'altaveu
Perquè els LED s’allargin com si fossin braços, es doblega un passador sobre l’AVR de cada costat. L’orientació de l’AVR d’aquesta manera facilita la connexió a l’altaveu (segona imatge), ja que les connexions es troben als dos pins inferiors. s’adjunta.
Pas 3: Programació de l'Attiny13a
Hi ha un munt d’opcions diferents per programar AVRs. Per a aquest projecte s’ha utilitzat l’USBtiny que està disponible com a kit al lloc de ladyada https://www.ladyada.net/make/usbtinyisp/index.html Per connectar l’AVR al programador podeu connecteu els cables al sòcol femella i connecteu-los a una placa de connexió o, millor encara, obteniu un adaptador de programació AVR barat com aquest https://www.sparkfun.com/commerce/product_info.php? products_id = 8508long amb capçaleres masculines de 3x2 per connectar el connector.
Pas 4: Creació del firmware per a Marioman
L'attiny13A té 1 K de flash programable i 64 bytes de SRAM. El fitxer tar adjunt té el fitxer font, així com el microprogramari compilat per descarregar. S'han utilitzat tres matrius al codi c per generar la música.
- freq - freqüències de cada nota
- longitud : longitud de cada nota
- delay : pausa entre cada nota
La matriu de freqüències no té les freqüències reals, sinó el valor que cal introduir al registre TTCROB per generar l’ona quadrada del pin PB0. Aquí teniu un breu resum dels càlculs i la configuració del pin per a la generació d’ones quadrades:
- L'attiny13A té un oscil·lador intern definit a 9,6 MHz
- El rellotge intern per a E / S és l’oscil·lador dividit per 8 o 1,2 MHz
- Es configura un temporitzador intern en un registre de 8 bits per comptar cada cicle de rellotge amb una escala prèvia de 8.
- Això es tradueix en una marca igual a 1 / (1,2 MHz / 8) =, 006667ms
- L'attiny13A està configurat per comparar el que hi ha al registre TCCR0B de 8 bits amb el temporitzador i alternar un pin quan coincideixin.
- Per exemple, per generar una ona quadrada a 524Hz (una octava per sobre del mig C) que té un període de 1,908 ms.
1.908ms = 286 rellotges (1.908 /.0067) Divideix 286 per 2 per canviar el passador a t / 2 (286/2 = 143) Posa 143 al registre TTCR0B per generar aquesta nota. Tot això és el codi necessari per configurar el temporitzador, fes la comparació i produeix una ona quadrada:
TCCR0A | = (1 << WGM01); // configureu el temporitzador 1 per al mode CTC TCCR0A | = (1 << COM0A0); // commuta OC0A en la comparació de coincidències TCCR0B | = (1 << CS01); // clk / 8 prescale TTCR0B = 143; // generar una ona quadrada a 524HzPer retardar els tons i les pauses entre ells, es va utilitzar una simple funció de retard
void sleep (int ms) {int cnt; per a (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Això fa un compte enrere de 150, on cada cicle NOP és aproximadament de 0,006667 ms. L’últim que fa el codi és fer un bucle a través de les matrius, generar la música i parpellejar els dos LED. Això es fa en bucle continu per al següent codi
const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data}; … while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); sleep (pgm_read_byte (& length [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // atura el temporitzador TCCR0B = 0; dormir (pgm_read_word (& delay [cnt])); // temporitzador d’inici TCCR0B | = (1 << CS01); // clk / 8 prescale}}Hi ha 156 elements a les matrius de freqüències / longituds / retard, aquest bucle els travessa. Els pins PB3 i PB4 es commuten, de manera que s’alternaran amb cada nota. El primer son és la longitud de la nota que toquem després d’establir el registre OCR0A al valor adequat. El segon son és la pausa entre les notes que toquem. Al codi anterior, és possible que noteu les dues funcions pgm_read_byte () i pgm_read_word (), així com la paraula clau PROGMEM. Amb un xip incrustat com l'atiny, la quantitat de SRAM és molt limitada, en aquest cas només de 64 bytes. Les matrius que estem utilitzant per a totes les dades de freqüència / retard / longitud són molt superiors a 64 bytes i, per tant, no es poden carregar a la memòria. En utilitzar la directiva especial PROGMEM avr-gcc, es evita que es carreguin a la memòria aquestes grans matrius de dades, sinó que es llegeixen des del flash.
Pas 5: deixar anar el Marioman solt
El vídeo anterior mostra Marioman en acció. El consum mitjà d’energia és d’uns 25 mA, de manera que pot parpellejar i fer sorolls durant unes 10 hores abans d’esgotar la cel·la de liti. molt adequat per a això. Es pot afegir un commutador, però hi ha alguna cosa a dir per simplificar-lo.
Recomanat:
Parpelleig LED StickC M5Stack: 7 passos
StickC M5Stack LED Blink: en aquest projecte aprendrem a connectar i fer un LED Blink mitjançant un mòdul M5StickC ESP32
Parpelleig LED mitjançant 555 IC: 5 passos
Parpelleig LED mitjançant 555 IC: Hii amic, avui faré un parpelleig LED mitjançant el temporitzador IC 555. Comencem
ROBOT EVITANT EL CANT: 7 passos
EDGE EVITING ROBOT: EDGE EVITING ROBOT
Prop de Bust de cant: 7 passos
Singing Bust Prop: Alguna vegada us heu preguntat com funcionaven els Singing Busts a la Mansió encantada o fins i tot volíeu provar de fer-los bé, aquest instructiu us mostrarà com fer-los i és molt senzill
Altaveu impermeable per a un millor cant de la dutxa: 12 passos (amb imatges)
Altaveu impermeable per a un millor cant de dutxa: si ets com jo, i sé que ho ets, T’AGRADA cantar a la dutxa i T’ASPIRES en això! No puc fer res per tenir una veu cantant terrible, però el que realment em molesta, i probablement a tothom que estigui dins del meu vo