Turinys:
- 1 žingsnis: medžiagos ir konstrukcija
- 2 žingsnis: AVR litavimas prie šviesos diodų ir garsiakalbio
- 3 žingsnis: „Attiny13a“programavimas
- 4 žingsnis: sukurkite „Marioman“programinę -aparatinę įrangą
- 5 žingsnis: Leiskite mariomanui atsipalaiduoti
Video: Mirksi, dainuoja, mariomanas: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:51
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
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
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
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ą
„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:
Dainą sekantis „Led“mirksi „Hack-O-Lantern“!: 6 žingsniai
Dainas sekantis LED mirksintis Hack-O-Lantern
Mažas šviesos diodas mirksi Pav. 6 žingsniai
Mažas šviesos diodas mirksi Pav. Bet jūs galite sukurti mirksinčią grandinę be tokių IC. Tai paprasta mirksinti figūra, pagaminta iš atskirų dalių
Kontrolinis LED mirksi naudojant potenciometrą ir OLED ekraną: 6 žingsniai
Šviesos diodų mirksėjimo valdymas naudojant potenciometrą ir OLED ekraną: Šioje pamokoje sužinosime, kaip valdyti LED mirksėjimą potenciometru ir parodyti impulsų dažnio vertę OLED ekrane. Žiūrėkite demonstracinį vaizdo įrašą
„Arduino“programavimas per mobilųjį telefoną -- Arduinodroid -- „Arduino Ide for Android“-- Mirksi: 4 žingsniai
„Arduino“programavimas per mobilųjį telefoną || Arduinodroid || „Arduino Ide for Android“|| Mirksėti: užsiprenumeruokite mano „YouTube“kanalą, kad gautumėte daugiau vaizdo įrašų …… „Arduino“yra lenta, kurią galima programuoti tiesiogiai per USB. Tai labai paprasta ir pigu kolegijų ir mokyklų projektams ar net gaminių prototipams. Daugelis produktų pirmiausia remiasi ja
Mirksi šviesos diodai!: 4 žingsniai
Mirksi šviesos diodai!: ATSARGIAI! Šviesos diodų mirksėjimas su muzika gali jus priversti beprotiškai! Ši pamoka yra apie tam tikrų šviesos diodų mirksėjimą pagal bet kokios muzikos ritmą! Šio proceso idėja yra tikrai paprasta ir grandinė yra tikrai maža. Pagrindinė koncepcija yra tokia: 1-maža