Taula de continguts:

Parpelleig, cant, marioman: 5 passos
Parpelleig, cant, marioman: 5 passos

Vídeo: Parpelleig, cant, marioman: 5 passos

Vídeo: Parpelleig, cant, marioman: 5 passos
Vídeo: How to DRAW SUPER MARIO BROS from MOVIE 2024, De novembre
Anonim
Parpellejant, cantant, Marioman
Parpellejant, cantant, Marioman

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ó

Materials i construcció
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

Soldar l’AVR als LED i a l’altaveu
Soldar l’AVR als LED i a l’altaveu
Soldar l’AVR als LEDs i a l’altaveu
Soldar l’AVR als LEDs i a 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

Programació de l’Attiny13a
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

Creació del firmware per a Marioman
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: