INHOUDSOPGAWE:

Knipper, sing, Marioman: 5 stappe
Knipper, sing, Marioman: 5 stappe

Video: Knipper, sing, Marioman: 5 stappe

Video: Knipper, sing, Marioman: 5 stappe
Video: a-ha - Take On Me (Official Video) [Remastered in 4K] 2024, November
Anonim
Knipper, sing, Marioman
Knipper, sing, Marioman

Gebruik 'n attiny13a, twee LED's en 'n wenskaartspreker om 'n flikkerende Marioman te maak wat die Super Mario Brothers-temalied speel. notas van die liedjies word gegenereer deur 'n vierkantige golf wat op 'n enkele pen van die AVR -mikrobeheerder geplaas word. Die LED's wat op elke noot wissel, is gekoppel aan 2 penne elk van dieselfde chip.

Stap 1: Materiaal en konstruksie

Materiaal en konstruksie
Materiaal en konstruksie

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dKoste: $ 1,40

  • 2 LED's - enige LED's sal regkom
  • 1 litium muntbattery

www.sparkfun.com/commerce/product_info.php?products_id=338 Koste: $ 2,00

1 muntstukhouer

www.sparkfun.com/commerce/product_info.php?products_id=8822 Koste: $ 1,25

1 klein spreker van 'n musikale wenskaart

Totale materiaalkoste ~ $ 5 Die twee LED's is direk aan twee penne elk van die attiny13A geheg. Twee penne word vir elke LED gebruik, die tweede pen word laag gestel om as 'n grondverbinding te gebruik. Die luidspreker wat gebruik word, is tipies van die spreker wat in 'n musikale wenskaart voorkom, wat enige klein luidspreker sal doen, aangesien dit 'n vierkantige toon toon, is dit nie te belangrik om bekommerd te wees oor die bestuur van die luidspreker of klankgehalte nie.

Stap 2: soldeer die AVR aan die LED's en luidsprekers

Soldeer die AVR aan die LED's en luidsprekers
Soldeer die AVR aan die LED's en luidsprekers
Soldeer die AVR aan die LED's en luidsprekers
Soldeer die AVR aan die LED's en luidsprekers

Om die LED's soos arms uit te steek, word een pen aan elke kant oor die AVR gebuig. Deur die AVR op hierdie manier te oriënteer, is dit maklik om aan te sluit op die luidspreker (tweede beeld), aangesien die verbindings op die twee onderste penne is. dit is aangeheg.

Stap 3: Programmering van die Attiny13a

Die programmering van die Attiny13a
Die programmering van die Attiny13a

Daar is baie verskillende opsies vir die programmering van AVR's. Vir hierdie projek is die USBtiny gebruik, wat as 'n kit beskikbaar is op ladyada se webwerf https://www.ladyada.net/make/usbtinyisp/index.html Om die AVR aan te sluit op die programmeerder kan u Sluit die drade aan op die vroulike aansluiting en steek dit in 'n broodbord, of nog beter, kry 'n goedkoop AVR -programmeringsadapter soos hierdie

Stap 4: Skep die firmware vir Marioman

Die skep van die firmware vir Marioman
Die skep van die firmware vir Marioman

Die attiny13A het 1K programmeerbare flits, en 64bytes SRAM. Die aangehegte teerlêer bevat die bronlêer en saamgestelde firmware om af te laai. Drie skikkings in die c -kode is gebruik om die musiek te genereer

  • freq - frekwensies van elke noot
  • lengte - lengte van elke noot
  • vertraging - pouse tussen elke noot

Die frekwensie -skikking het nie die werklike frekwensies nie, maar eerder die waarde wat in die TTCROB -register geplaas moet word om die vierkantgolf van die PB0 -pen af te genereer.

  • Die attiny13A het 'n interne ossillator op 9.6MHz
  • Die interne klok vir IO is die ossillator gedeel deur 8 of 1.2MHz
  • 'N Interne timer word opgestel in 'n 8bit -register om elke kloksiklus met 'n voorskaal van 8 te tel.
  • Dit lei tot een regmerkie gelyk aan 1 / (1.2MHz / 8) =.006667ms
  • Die attiny13A is gekonfigureer om dit wat in die 8bit TCCR0B -register is, te vergelyk met die timer en 'n speld te skakel wanneer dit ooreenstem.
  • Byvoorbeeld, om 'n vierkantgolf by 524Hz (een oktaaf bo middel C) te genereer met 'n periode van 1,908 ms.

1.908ms = 286 horlosies (1.908/.0067) Deel 286 met 2 om die pen te skakel by t/2 (286/2 = 143) Plaas 143 in die TTCR0B -register om hierdie nota te genereer. Dit is al die kode wat nodig is Om die timer op te stel, vergelyk en voer 'n vierkantgolf uit:

TCCR0A | = (1 << WGM01); // stel timer 1 in vir CTC -modus TCCR0A | = (1 << COM0A0); // skakel OC0A oor vergelykende pas TCCR0B | = (1 << CS01); // clk/8 voorskaal TTCR0B = 143; // genereer 'n vierkantgolf by 524Hz'N Eenvoudige vertragingsfunksie is gebruik om die toon en die pouses tussen hulle te vertraag

leegte slaap (int ms) {int cnt; vir (cnt = 0; cnt <(ms); cnt ++) {int i = 150; terwyl (i--) {_asm ("NOP"); }}}Dit tel af vanaf 150, waar elke NOP -siklus ongeveer 0,006667 ms is. Die laaste ding wat die kode doen, is om deur die skikkings te loop, die musiek te genereer en die twee LED's te knip.

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t vertraging PROGMEM = {… data};… terwyl (1) {vir (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); slaap (pgm_read_byte (& lengte [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stop timer TCCR0B = 0; slaap (pgm_read_word (& vertraging [cnt])); // begin timer TCCR0B | = (1 << CS01); // clk/8 voorskaal}}Daar is 156 elemente in die frekwensies/lengtes/vertragingsskikkings, hierdie lus loop dit deur. Speld PB3 en PB4 word elk aangeskakel, sodat hulle met elke noot afwissel. Die eerste slaap is die lengte van die noot wat ons speel nadat die OCR0A -register op die toepaslike waarde gestel is. Die tweede slaap is die pouse tussen die note wat ons speel. In die kode hierbo het u moontlik kennis geneem van die twee funksies pgm_read_byte () en pgm_read_word () sowel as die sleutelwoord PROGMEM. Met 'n ingebedde chip soos die attiny is die hoeveelheid SRAM baie beperk, in hierdie geval slegs 64 bytes. Die skikkings wat ons vir alle frekwensie-/vertragings-/lengte -data gebruik, is baie groter as 64 bytes en kan dus nie in die geheue gelaai word nie. Deur die spesiale PROGMEM avr-gcc-richtlijn te gebruik, word hierdie groot data-skikkings verhoed om in die geheue te laai, in plaas daarvan word dit van flits gelees.

Stap 5: Laat die Marioman los

Bogenoemde video wys Marioman in aksie. Die gemiddelde kragverbruik is ongeveer 25mA, sodat hy ongeveer 10 uur lank kan knip en geluide kan maak voordat hy die litiummuntsel kan afvoer. Die enigste manier om hom aan en af te skakel, is deur die muntbattery te verwyder, die stewige een wat in die materiaal verskyn, is goed geskik hiervoor. 'N Skakelaar kan bygevoeg word, maar daar is iets om te sê om dit eenvoudig te hou.

Aanbeveel: