Kazalo:

Utripanje, petje, Marioman: 5 korakov
Utripanje, petje, Marioman: 5 korakov

Video: Utripanje, petje, Marioman: 5 korakov

Video: Utripanje, petje, Marioman: 5 korakov
Video: Часть 5 - Аудиокнига Уолдена Генри Дэвида Торо (глы 12–15) 2024, November
Anonim
Utripa, poje, Marioman
Utripa, poje, Marioman

Z attiny13a, dvema LED diodama in zvočnikom za voščilnico ustvarite utripajoč Marioman, ki predvaja temo pesmi Super Mario Brothers. To je lahko enostaven poceni projekt za vsakogar, ki išče zabaven način za vstop v programiranje AVR! note pesmi nastanejo s kvadratnim valom, ki se odda na en sam pin mikrokrmilnika AVR. Svetleče diode, ki se izmenjujejo na vsaki bankovci, so povezane na 2 zatiča istega čipa.

1. korak: Materiali in izdelava

Materiali in izdelava
Materiali in izdelava

1 attiny13a

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

  • 2 LED - vse LED bodo primerne
  • 1 litijeva gumbasta baterija

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

1 držalo za gumbaste celice

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

1 majhen zvočnik iz glasbene voščilnice

Skupni stroški materiala ~ 5 USD Dve LED diodi sta bili pritrjeni neposredno na dva zatiča attiny13A. Za vsako LED se uporabljata dva zatiča, drugi zatič je nastavljen nizko za uporabo kot ozemljitvena povezava. Trenutna omejitev vhodno -izhodnih zatičev na AVR bo preprečila, da bi LED diode vlekle preveč, zato za priključitev upora ni potrebno Uporabljeni zvočnik je tipičen za tistega, ki ga najdemo v glasbeni voščilnici, to bo naredil vsak majhen zvočnik, saj ta oddaja ton kvadratnega vala, ni preveč pomembno skrbeti za vožnjo zvočnika ali kakovost zvoka.

2. korak: Spajkanje AVR na LED in zvočnik

Spajkanje AVR na LED in zvočnik
Spajkanje AVR na LED in zvočnik
Spajkanje AVR na LED in zvočnik
Spajkanje AVR na LED in zvočnik

Če želite, da svetleče diode sežejo kot roke, je en zatič upognjen nad AVR na vsaki strani. Tako usmerjanje AVR -ja olajša povezavo z zvočnikom (druga slika), saj sta povezavi na dveh spodnjih zatičih. Zaradi estetike želite, da je sprednji del čipa obrnjen navzven, zato se prepričajte, da je zvočnik obrnjen v isto smer, ko je priloženo.

3. korak: Programiranje Attiny13a

Programiranje Attiny13a
Programiranje Attiny13a

Obstaja veliko različnih možnosti za programiranje AVR -jev. Za ta projekt je bil uporabljen USBtiny, ki je na voljo kot komplet na spletnem mestu ladyadahttps://www.ladyada.net/make/usbtinyisp/index.html Za povezavo AVR -ja s programerjem lahko bodisi priključite žice v žensko vtičnico in jih priključite na mizo ali še bolje, da dobite poceni programski vmesnik AVR, kot je ta https://www.sparkfun.com/commerce/product_info.php? products_id = 8508 skupaj z moškimi priključki 3x2 za priključitev vtiča.

4. korak: Ustvarjanje vdelane programske opreme za Marioman

Ustvarjanje vdelane programske opreme za Marioman
Ustvarjanje vdelane programske opreme za Marioman

Attiny13A ima 1K programabilne bliskavice in 64 bajtov SRAM. Priložena tar datoteka vsebuje izvorno datoteko in sestavljeno vdelano programsko opremo za prenos. Tri nizi v kodi c so bili uporabljeni za ustvarjanje glasbe

  • freq - frekvence vsake note
  • length - dolžina vsake note
  • zamik - premor med vsako noto

Frekvenčni niz nima dejanskih frekvenc, ampak vrednost, ki jo je treba vnesti v register TTCROB za ustvarjanje kvadratnega vala iz zatiča PB0. Tu je kratek povzetek izračunov in konfiguracije nožic za generiranje kvadratnih valov:

  • Attiny13A ima notranji oscilator, nastavljen na 9,6 MHz
  • Notranja ura za IO je oscilator, deljen z 8 ali 1,2 MHz
  • Notranji časovnik je nastavljen v 8 -bitnem registru za štetje vsakega cikla ure s predrazmerjem 8.
  • Posledica tega je, da je ena kljukica enaka 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A je konfiguriran tako, da primerja tisto, kar je v 8 -bitnem registru TCCR0B, s časovnikom in preklaplja pin, ko se ujemata.
  • Na primer, da bi ustvarili kvadratni val pri 524Hz (eno oktavo nad sredino C), ki ima obdobje 1.908ms.

1.908ms = 286 odmikov ure (1.908/.0067) 286 delite z 2, da preklopite pin na t/2 (286/2 = 143) Vnesite 143 v register TTCR0B, da ustvarite to opombo. To je vsa koda, ki je potrebna za nastavitev časovnika naredite primerjavo in iznesite kvadratni val:

TCCR0A | = (1 << WGM01); // konfiguriramo časovnik 1 za način CTC TCCR0A | = (1 << COM0A0); // preklopite OC0A na primerjalno ujemanje TCCR0B | = (1 << CS01); // clk/8 predrazmerna TTCR0B = 143; // ustvari kvadratni val pri 524HzZa zakasnitev tonov in premorov med njimi je bila uporabljena preprosta funkcija zamika

void sleep (int ms) {int cnt; za (cnt = 0; cnt <(ms); cnt ++) {int i = 150; medtem ko (i--) {_asm ("NOP"); }}}To odšteva od 150, pri čemer je vsak cikel NOP približno 0,006667 ms. Zadnja stvar, ki jo naredi koda, je zanka skozi matrike, ustvarjanje glasbe in utripanje obeh LED. To se naredi v neprekinjeni zanki for z naslednjo kodo

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t zakasnitev 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); // časovnik ustavitve TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // časovnik za zagon TCCR0B | = (1 << CS01); // clk/8 predstopenj}}V frekvenčnih/dolžinskih/zakasnitvenih nizih je 156 elementov, ta zanka jih prečka. Pin PB3 in PB4 se preklopita, tako da se bosta izmenjevali z vsako noto. Prvi spanec je dolžina note, ki jo igramo po nastavitvi registra OCR0A na ustrezno vrednost. Drugi spanec je premor med notami, ki jih igramo. V zgornji kodi ste morda opazili dve funkciji pgm_read_byte () in pgm_read_word () ter ključno besedo PROGMEM. Z vgrajenim čipom, kot je atiny, je količina SRAM zelo omejena, v tem primeru le 64 bajtov. Nizki, ki jih uporabljamo za vse podatke o frekvenci/zakasnitvi/dolžini, so veliko večji od 64 bajtov in jih zato ni mogoče naložiti v pomnilnik. Z uporabo posebne direktive PROGMEM avr-gcc se prepreči nalaganje teh velikih podatkovnih nizov v pomnilnik, namesto da se preberejo iz bliskavice.

5. korak: Pustite Mariomanu na volju

Zgornji video prikazuje Mariomana v akciji. Povprečna poraba energije je približno 25 mA, tako da lahko približno 10 ur utripa in oddaja zvoke, preden izprazni litijevo gumbno celico. temu primerno. Stikalo je mogoče dodati, vendar je za poenostavitev reči nekaj.

Priporočena: