Përmbajtje:

Pulsim, Këndim, Marioman: 5 hapa
Pulsim, Këndim, Marioman: 5 hapa

Video: Pulsim, Këndim, Marioman: 5 hapa

Video: Pulsim, Këndim, Marioman: 5 hapa
Video: Все о покраске валиком за 20 минут. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #32 2024, Nëntor
Anonim
Mbyll sytë, duke kënduar, Marioman
Mbyll sytë, duke kënduar, Marioman

Përdorni një attiny13a, dy LED dhe një altoparlant kartash përshëndetëse për të krijuar një Marioman të ndezur që luan këngën e temës Super Mario Brothers. Ky mund të jetë një projekt i lehtë me kosto të ulët për këdo që po kërkon një mënyrë argëtuese për të hyrë në programimin AVR! shënimet e këngëve krijohen nga një valë katrore e nxjerrë në një kunj të vetëm të mikrokontrolluesit AVR. LED -të që alternohen në secilën shënim janë të lidhura me 2 kunja secila me të njëjtin çip.

Hapi 1: Materialet dhe Ndërtimi

Materialet dhe Ndërtimi
Materialet dhe Ndërtimi

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: $ 1.40

  • 2 LED - çdo LED do të bëjë
  • 1 bateri me qeliza monedhë litiumi

www.sparkfun.com/commerce/product_info.php?products_id=338 Kostoja: $ 2.00

1 mbajtëse e qelizës së monedhës

www.sparkfun.com/commerce/product_info.php?products_id=8822 Kostoja: $ 1.25

1 folës i vogël nga një kartë përshëndetëse muzikore

Kostoja totale e materialeve 5 5 dollarë Dy LED janë bashkangjitur drejtpërdrejt në dy kunja secila nga attiny13A. Dy kunja përdoren për secilën LED, kunja e dytë është e ulët për t'u përdorur si një lidhje tokësore. Kufiri aktual i kunjave I/O në AVR do të parandalojë LED -të të tërheqin shumë, kështu që një rezistencë nuk është e nevojshme për t'u lidhur seri. Altoparlanti i përdorur është tipik për atë që gjendet në një kartolinë muzikore, çdo altoparlant i vogël do të bëjë, duke pasur parasysh se kjo po nxjerr një ton valë katror, nuk është shumë e rëndësishme të shqetësoheni për drejtimin e altoparlantit ose cilësinë e zërit.

Hapi 2: Saldimi i AVR në LED dhe altoparlant

Saldimi i AVR në LED dhe altoparlant
Saldimi i AVR në LED dhe altoparlant
Saldimi i AVR në LED dhe altoparlant
Saldimi i AVR në LED dhe altoparlant

Që LED -të të shkojnë të shtrihen si krahët, një kunj është përkulur mbi AVR në çdo anë. Orientimi i AVR në këtë mënyrë e bën të lehtë lidhjen me altoparlantin (imazhi i dytë) pasi lidhjet janë në dy kunjat e poshtme. Për estetikë ju doni që pjesa e përparme e çipit të jetë e kthyer jashtë, prandaj sigurohuni që altoparlanti të jetë përballë në të njëjtën mënyrë kur është bashkangjitur.

Hapi 3: Programimi i Attiny13a

Programimi i Attiny13a
Programimi i Attiny13a

Ka shumë mundësi të ndryshme për programimin e AVR -ve. Për këtë projekt u përdor USBtiny i cili është i disponueshëm si një komplet nga faqja e zonjës https://www.ladyada.net/make/usbtinyisp/index.htmlPër të lidhur AVR me programuesin ose lidhni telat në prizën e femrës dhe futini në një pjatë ose akoma më mirë merrni një përshtatës të lirë programimi AVR si ky Me

Hapi 4: Krijimi i firmuerit për Marioman

Krijimi i firmuerit për Marioman
Krijimi i firmuerit për Marioman

Attiny13A ka 1K flash të programueshëm dhe 64bajt SRAM. Skedari tar i bashkangjitur ka skedarin burimor si dhe firmware të përpiluar për shkarkim. Tre vargje në kodin c janë përdorur për të gjeneruar muzikë

  • freq - frekuencat e secilës notë
  • gjatësia - gjatësia e secilës shënim
  • vonesë - pauzë midis secilës shënim

Grupi i frekuencës nuk ka frekuencat aktuale, por vlerën që duhet vendosur në regjistrin TTCROB për të gjeneruar valën katrore nga kunja PB0. Këtu është një përmbledhje e shkurtër e llogaritjeve dhe konfigurimit të kunjave për gjenerimin e valës katrore:

  • Attiny13A ka një oshilator të brendshëm të vendosur në 9.6MHz
  • Ora e brendshme për IO është oshilatori i ndarë me 8 ose 1.2MHz
  • Një kohëmatës i brendshëm është vendosur në një regjistër 8bit për të numëruar çdo cikël të orës me prescale prej 8.
  • Kjo rezulton në një shënim të barabartë me 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A është konfiguruar për të krahasuar atë që është në regjistrin 8bit TCCR0B me kohëmatësin dhe për të ndryshuar një kunj kur ato përputhen.
  • Për shembull, për të gjeneruar një valë katrore në 524Hz (një oktavë mbi C mesme) e cila ka një periudhë prej 1.908ms.

1.908ms = 286 tiketa të orës (1.908/.0067) Ndani 286 me 2 për të ndryshuar kunjin në t/2 (286/2 = 143) Vendosni 143 në regjistrin TTCR0B për të gjeneruar këtë shënim. Ky është i gjithë kodi që është i nevojshëm për të vendosur kohëmatësin, bëni krahasimin dhe nxjerrjen e një vale katrore:

TCCR0A | = (1 << WGM01); // konfiguroni kohëmatësin 1 për modalitetin CTC TCCR0A | = (1 << COM0A0); // kaloni OC0A në krahasimin e ndeshjes TCCR0B | = (1 << CS01); // clk/8 paraprakisht TTCR0B = 143; // gjeneroni një valë katrore në 524HzPër të vonuar tonet dhe pauzat midis tyre u përdor një funksion i thjeshtë vonimi

gjumë i pavlefshëm (int ms) {int cnt; për (cnt = 0; cnt <(ms); cnt ++) {int i = 150; ndërsa (i--) {_asm ("JO"); }}}Kjo numëron nga 150 ku secili cikël NOP është afërsisht.006667ms. Gjëja e fundit që bën kodi është qarkimi i vargjeve, krijimi i muzikës dhe ndezja e dy LED -ve. Kjo bëhet në një lak të vazhdueshëm për kodin me kodin e mëposhtëm

const uint8_t frekuencë PROGMEM = {… të dhëna}; const uint8_t gjatësi PROGMEM = {… të dhëna}; const uint8_t vonesë PROGMEM = {… të dhëna};… ndërsa (1) {për (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); ndërrimi_prodhues (PORTB, PB3); ndërrimi_prodhues (PORTB, PB4); fle (pgm_read_byte (& gjatësia [cnt])); ndërrimi_prodhues (PORTB, PB3); ndërrimi_prodhues (PORTB, PB4); // kohëmatësi i ndalimit TCCR0B = 0; gjumë (fjala_gëzimi_pgm (& vono [cnt])); // kohëmatësi i fillimit TCCR0B | = (1 << CS01); // clk/8 parashkollore}}Ekzistojnë 156 elementë në vargjet e frekuencave/gjatësisë/vonesës, ky lak i përshkon ato. Kunjat PB3 dhe PB4 ndryshohen secili kështu që do të alternohen me secilën notë Gjumi i parë është gjatësia e notës që luajmë pasi vendosim regjistrin OCR0A në vlerën e duhur. Gjumi i dytë është pauza mes notave që luajmë. Në kodin e mësipërm mund të keni vënë re dy funksionet pgm_read_byte () dhe pgm_read_word () si dhe fjalën kyçe PROGMEM. Me një çip të ngulitur si veshja sasia e SRAM është shumë e kufizuar, në këtë rast vetëm 64 bajt. Vargjet që ne po përdorim për të gjitha të dhënat e frekuencës/vonesës/gjatësisë janë shumë më të mëdha se 64 bajt dhe prandaj nuk mund të ngarkohen në memorie. Duke përdorur direktivën e veçantë PROGMEM avr-gcc, këto vargje të të dhënave të mëdha parandalohen të ngarkohen në memorie, në vend që të lexohen nga flashi.

Hapi 5: Lëreni Marioman -in të Lirë

Videoja e mësipërme tregon Marioman në veprim. Konsumi mesatar i energjisë është rreth 25mA kështu që ai mund të vezullojë dhe të bëjë zhurmë për rreth 10 orë para se të kullojë qelizën e monedhës litium. E vetmja mënyrë për ta ndezur dhe fikur atë është heqja e baterisë së qelizës së monedhës, ajo e fortë e listuar në materialet është i përshtatshëm për këtë. Mund të shtohet një ndërprerës, por ka diçka për të thënë për ta mbajtur atë të thjeshtë.

Recommended: