Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
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
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
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
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
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ë.