Turinys:

Mirksi, dainuoja, mariomanas: 5 žingsniai
Mirksi, dainuoja, mariomanas: 5 žingsniai

Video: Mirksi, dainuoja, mariomanas: 5 žingsniai

Video: Mirksi, dainuoja, mariomanas: 5 žingsniai
Video: DŽIMBA - Laikrodukai 2024, Lapkritis
Anonim
Mirksi, dainuoja, mariomanas
Mirksi, dainuoja, mariomanas

Naudokite „attiny13a“, du šviesos diodus ir sveikinimo atviruko garsiakalbį, kad sukurtumėte mirksinčią „Marioman“, kuri groja „Super Mario Brothers“teminę dainą. Tai gali būti lengvas ir nebrangus projektas visiems, kurie ieško smagaus būdo įsitraukti į AVR programavimą! dainų natas generuoja kvadratinė banga, išvesta ant vieno AVR mikrovaldiklio kaiščio. Šviesos diodai, kurie keičiasi kiekvienoje natoje, yra prijungti prie 2 kaiščių, kurių kiekvienas yra to paties lusto.

1 žingsnis: medžiagos ir konstrukcija

Medžiagos ir konstrukcija
Medžiagos ir konstrukcija

1 attiny13a

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

  • 2 šviesos diodai - tinka bet kokie šviesos diodai
  • 1 ličio monetų elementų baterija

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

1 monetos elementų laikiklis

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

1 mažas garsiakalbis iš muzikinio sveikinimo atviruko

Bendra medžiagų kaina ~ 5 USD Du šviesos diodai buvo pritvirtinti tiesiai prie dviejų kaiščių, kurių kiekviena yra attiny13A. Kiekvienam šviesos diodui naudojami du kaiščiai, antrasis kaištis yra žemas, kad būtų naudojamas kaip įžeminimo jungtis. Dabartinė AVR įvesties/išvesties kaiščių riba neleis šviesos diodams per daug traukti, todėl rezistoriaus prijungti nereikia serija. Naudojamas garsiakalbis yra tipiškas tam, kuris randamas muzikinėje sveikinimo atviruke, bet kuris mažas garsiakalbis tai padarys, nes tai yra kvadratinės bangos tonas, todėl nėra labai svarbu nerimauti dėl garsiakalbio vairavimo ar garso kokybės.

2 žingsnis: AVR litavimas prie šviesos diodų ir garsiakalbio

AVR litavimas prie šviesos diodų ir garsiakalbio
AVR litavimas prie šviesos diodų ir garsiakalbio
AVR litavimas prie šviesos diodų ir garsiakalbio
AVR litavimas prie šviesos diodų ir garsiakalbio

Kad šviesos diodai pasiektų kaip rankos, vienas kaištis yra sulenktas virš AVR kiekvienoje pusėje. Tokiu būdu orientuodami AVR, galite lengvai prisijungti prie garsiakalbio (antrasis vaizdas), nes jungtys yra ant dviejų apatinių kaiščių. Dėl estetikos norite, kad priekinė lusto pusė būtų nukreipta į išorę, todėl įsitikinkite, kad garsiakalbis nukreiptas taip pat jis pridedamas.

3 žingsnis: „Attiny13a“programavimas

„Attiny13a“programavimas
„Attiny13a“programavimas

Yra daug įvairių AVR programavimo variantų. Šiam projektui buvo naudojamas USBtiny, kurį galima įsigyti kaip rinkinį iš ladyada svetainės https://www.ladyada.net/make/usbtinyisp/index.html Norėdami prijungti AVR prie programuotojo, galite prijunkite laidus prie moteriško lizdo ir prijunkite juos prie duonos lentos arba dar geriau įsigykite tokį pigų AVR programavimo adapterį, kaip šishttps://www.sparkfun.com/commerce/product_info.php? products_id = 8508 kartu su 3x2 antraštėmis, skirtomis prijungti kištuką.

4 žingsnis: sukurkite „Marioman“programinę -aparatinę įrangą

„Marioman“programinės įrangos kūrimas
„Marioman“programinės įrangos kūrimas

„Attiny13A“turi 1K programuojamosios blykstės ir 64 baitų SRAM. Pridėtame deguto faile yra šaltinio failas ir sudaryta programinė įranga, skirta atsisiųsti. Muzikai generuoti buvo naudojami trys c kodo masyvai

  • freq - kiekvienos natos dažnis
  • ilgis - kiekvienos natos ilgis
  • delay - pauzė tarp kiekvienos natos

Dažnių masyvas neturi faktinių dažnių, o vertę, kurią reikia įvesti į TTCROB registrą, kad sugeneruotų kvadratinę bangą nuo PB0 kaiščio. Čia yra trumpa kvadratinių bangų generavimo skaičiavimų ir kaiščių konfigūracijos santrauka:

  • „Attiny13A“turi vidinį osciliatorių, kurio dažnis yra 9,6 MHz
  • Vidinis IO laikrodis yra osciliatorius, padalytas iš 8 arba 1,2 MHz
  • Vidinis laikmatis yra nustatytas 8 bitų registre, kad būtų galima suskaičiuoti kiekvieną laikrodžio ciklą su 8 skalėmis.
  • Dėl to vienas varnelė lygus 1 / (1,2MHz / 8) =.006667ms
  • „Attiny13A“sukonfigūruotas lyginti 8 bitų TCCR0B registre esantį laikmatį ir perjungti smeigtuką, kai jie sutampa.
  • Pavyzdžiui, norint sukurti kvadratinę bangą 524 Hz dažniu (viena oktava virš C vidurio), kurios periodas yra 1,908 ms.

1.908ms = 286 laikrodžio varnelės (1.908/.0067) Padalinkite 286 iš 2, kad perjungtumėte smeigtuką ties t/2 (286/2 = 143) Įrašykite 143 į TTCR0B registrą, kad sugeneruotumėte šią pastabą. Tai yra visas kodas, kurio reikia Norėdami nustatyti laikmatį, palyginkite ir išveskite kvadratinę bangą:

TCCR0A | = (1 << WGM01); // konfigūruoti 1 laikmatį CTC režimui TCCR0A | = (1 << COM0A0); // perjungti OC0A palyginimo rungtynėse TCCR0B | = (1 << CS01); // clk/8 prescale TTCR0B = 143; // generuoti kvadratinę bangą 524 Hz dažniuNorėdami atidėti tonus ir pauzes tarp jų, buvo naudojama paprasta atidėjimo funkcija

tuščias miegas (int ms) {int cnt; už (cnt = 0; cnt <(ms); cnt ++) {int i = 150; o (i--) {_asm ("NOP"); }}}Tai skaičiuoja nuo 150, kai kiekvienas NOP ciklas yra maždaug. 006667 ms. Paskutinis dalykas, kurį daro kodas, yra ciklas per masyvus, generuoja muziką ir mirksi du šviesos diodai. Tai daroma nuolatine ciklu naudojant šį kodą

const uint8_t freq PROGMEM = {… duomenys}; const uint8_t ilgis PROGMEM = {… duomenys}; const uint8_t delsa PROGMEM = {… duomenys};… o (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); miegas (pgm_read_byte (& ilgis [cnt]))); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // sustabdymo laikmatis TCCR0B = 0; miegoti (pgm_read_word (& delay [cnt]))); // paleidimo laikmatis TCCR0B | = (1 << CS01); // clk/8 prescale}}Dažnių/ilgių/uždelsimo matricose yra 156 elementai, ši kilpa juos kerta. Smeigtukai PB3 ir PB4 yra perjungti, kad jie keistųsi su kiekviena nata. Pirmasis užmigimo laikas yra tos natos ilgis, kurią grojame nustačius atitinkamą OCR0A registro vertę. Antrasis miegas yra pauzė tarp grojamų natų. Aukščiau esančiame kode galite pastebėti dvi funkcijas pgm_read_byte () ir pgm_read_word (), taip pat raktinį žodį PROGMEM. Naudojant įterptą mikroschemą, tokią kaip attiny, SRAM kiekis yra labai ribotas, šiuo atveju tik 64 baitai. Masyvai, kuriuos naudojame visiems dažnio/vėlavimo/ilgio duomenims, yra daug didesni nei 64 baitai, todėl jų negalima įkelti į atmintį. Naudojant specialią PROGMEM avr-gcc direktyvą, šie dideli duomenų masyvai neįkeliami į atmintį, o nuskaitomi iš blykstės.

5 žingsnis: Leiskite mariomanui atsipalaiduoti

Aukščiau pateiktame vaizdo įraše parodyta, kaip Marioman veikia. Vidutinis energijos suvartojimas yra apie 25 mA, todėl jis gali mirksėti ir triukšmauti maždaug 10 valandų prieš išleisdamas ličio monetos elementą. Vienintelis būdas jį įjungti ir išjungti yra išimti monetų elementų bateriją, tvirtą medžiagoje. gerai tam tinka. Galima pridėti jungiklį, tačiau reikia ką nors pasakyti, kad būtų paprasta.

Rekomenduojamas: