Sisukord:

Vilkuv, laulmine, marioman: 5 sammu
Vilkuv, laulmine, marioman: 5 sammu

Video: Vilkuv, laulmine, marioman: 5 sammu

Video: Vilkuv, laulmine, marioman: 5 sammu
Video: NIGHTMARE BEFORE HALLOWEEN (SALLY FACE EPISODE 2) 2024, November
Anonim
Vilkuv, laul, marioman
Vilkuv, laul, marioman

Kasutage atiny13a, kahte LED-i ja õnnitluskaardi kõlarit, et luua vilkuv Marioman, kes mängib Super Mario Brothersi tunnuslaulu. See võib olla lihtne odav projekt kõigile, kes otsivad lõbusat viisi AVR-i programmeerimiseks! lugude noote genereerib AVR -i mikrokontrolleri ühele kontaktile väljastatud ruutlaine. Igas noodis vahelduvad LED -id on ühendatud 2 tihvtiga, millest igaüks on sama kiibiga.

Samm: materjalid ja ehitus

Materjalid ja ehitus
Materjalid ja ehitus

1 attiny13a

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

  • 2 LED -i - kõik LED -id sobivad
  • 1 liitium -mündipatarei

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

1 mündiraku hoidja

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

1 väike kõlar muusikaliselt õnnitluskaardilt

Materjalide kogumaksumus ~ 5 dollarit Iga LED -i jaoks kasutatakse kahte tihvti, teine tihvt on madal, et seda saaks kasutada maandusühendusena. AVR -i I/O -kontaktide praegune piir takistab LED -ide liigset tõmbamist, nii et takisti pole vaja ühendada seeria. Kasutatav kõlar on tüüpiline muusikalises õnnitluskaardis leiduvale kõlarile, mida teeb iga väike kõlar, arvestades, et see annab ruudukujulise laine tooni, pole liiga oluline muretseda kõlari juhtimise või helikvaliteedi pärast.

2. samm: AVR -i jootmine LED -ide ja kõlari külge

AVR -i jootmine LED -ide ja kõlari külge
AVR -i jootmine LED -ide ja kõlari külge
AVR -i jootmine LED -ide ja kõlari külge
AVR -i jootmine LED -ide ja kõlari külge

Selleks, et valgusdioodid sirutuksid välja nagu käed, on üks tihvt painutatud AVR -i mõlemal küljel. AVR -i sellisel suunamisel on lihtne ühendada kõlariga (teine pilt), kuna ühendused on kahel alumisel tihvtil. Esteetika huvides soovite, et kiibi esikülg jääks väljapoole, nii et veenduge, et kõlar oleks samal ajal see on kinnitatud.

3. samm: Attiny13a programmeerimine

Attiny13a programmeerimine
Attiny13a programmeerimine

AVR -ide programmeerimiseks on palju erinevaid võimalusi. Selle projekti jaoks kasutati USBtiny -d, mis on saadaval komplektina ladyada saidilt https://www.ladyada.net/make/usbtinyisp/index.html AVR -i ühendamiseks programmeerijaga saate kas ühendada juhtmed naissoost pistikupessa ja ühendada need leivaplaadiga või veel parem hankida selline odav AVR -i programmeerimisadapter nagu seehttps://www.sparkfun.com/commerce/product_info.php? products_id = 8508 koos 3x2 isasega päistega pistiku ühendamiseks.

Samm: püsivara loomine Mariomanile

Püsivara loomine Mariomanile
Püsivara loomine Mariomanile

Attiny13A -l on 1K programmeeritavat välklampi ja 64 baiti SRAM -i. Lisatud tõrvafailil on allikafail ja allalaadimiseks koostatud püsivara. Muusika genereerimiseks kasutati kolme massiivi c -koodis

  • freq - iga noodi sagedused
  • pikkus - iga noodi pikkus
  • delay - paus iga noodi vahel

Sagedusmassiivil ei ole tegelikke sagedusi, vaid pigem väärtus, mis tuleb TTCROB registrisse panna, et tekitada ruutlaine PB0 tihvtilt. Siin on lühike kokkuvõte ruutlaine genereerimise arvutustest ja tihvtide konfiguratsioonist:

  • Attiny13A sisemine ostsillaator on seatud 9,6 MHz
  • IO sisemine kell on ostsillaator, mis on jagatud 8 või 1,2 MHz -ga
  • 8 -bitises registris on seadistatud sisemine taimer, mis loeb kokku iga kellatsükli eelseadistusega 8.
  • Selle tulemuseks on üks linnuke 1 / (1,2MHz / 8) = 0,006667ms
  • Attiny13A on konfigureeritud võrdlema 8 -bitise TCCR0B registri andmeid taimeriga ja lülitama nööpnõela, kui need sobivad.
  • Näiteks selleks, et tekitada ruutlaine sagedusel 524 Hz (üks oktaav üle keskmise C), mille periood on 1,908 ms.

1.908ms = 286 kella tiksumist (1.908/.0067) Jagage 286 2 -ga, et nööpnõela t/2 ümber lülitada (286/2 = 143) Pange selle märkme loomiseks 143 TTCR0B registrisse. See on kõik vajalik kood Taimeri seadistamiseks tehke võrdlus ja väljastage ruutlaine:

TCCR0A | = (1 << WGM01); // seadista taimer 1 CTC režiimi jaoks TCCR0A | = (1 << COM0A0); // lülita OC0A võrdlusmängu TCCR0B | = (1 << CS01); // clk/8 eelskaala TTCR0B = 143; // genereerida ruutlaine sagedusel 524 HzToonide ja nende vaheliste pauside viivitamiseks kasutati lihtsat viivitusfunktsiooni

tühi uni (int ms) {int cnt; jaoks (cnt = 0; cnt <(ms); cnt ++) {int i = 150; samas (i--) {_asm ("NOP"); }}}See loeb alla 150 -st, kus iga NOP -tsükkel on ligikaudu 0,006667 ms. Viimane asi, mida kood teeb, on massiivide läbimine, muusika loomine ja kahe LED -i vilkumine. Seda tehakse pideva tsüklina järgmise koodiga

const uint8_t freq PROGMEM = {… andmed}; const uint8_t pikkus PROGMEM = {… andmed}; const uint8_t viivitus PROGMEM = {… andmed};… samas (1) {jaoks (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); uni (pgm_read_byte (& pikkus [cnt]))); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stopp -taimer TCCR0B = 0; uni (pgm_read_word (& delay [cnt]))); // starditaimer TCCR0B | = (1 << CS01); // clk/8 eelkaala}}Sageduste/pikkuste/viivituste massiivides on 156 elementi, see silmus läbib neid. Tihvtid PB3 ja PB4 on mõlemad ümber lülitatud, nii et need vahelduvad iga noodiga. Esimene uni on noodi pikkus, mida mängime pärast OCR0A registri sobiva väärtuse seadmist. Teine uni on paus mängitavate nootide vahel. Ülaltoodud koodis võite märgata kahte funktsiooni pgm_read_byte () ja pgm_read_word () ning märksõna PROGMEM. Sisseehitatud kiibiga, nagu atiny, on SRAM -i kogus väga piiratud, antud juhul ainult 64 baiti. Massiivid, mida kasutame kõigi sageduse/viivituse/pikkuse andmete jaoks, on palju suuremad kui 64 baiti ja seetõttu ei saa neid mällu laadida. Kasutades spetsiaalset programmi PROGMEM avr-gcc, takistatakse nende suurte andmemassiivide mällu laadimist, selle asemel loetakse neid välklambist.

Samm: lase Mariomanil lahti

Ülaltoodud video näitab Mariomanit tegevuses. Keskmine energiatarve on umbes 25 mA, nii et ta saab enne liitiumpatarei tühjendamist umbes 10 tundi vilkuda ja häält teha. Ainus viis, kuidas teda sisse ja välja lülitada, on eemaldada mündipatarei, materjalides loetletud vastupidav sobib selleks hästi. Lüliti saab lisada, kuid selle lihtsuse tagamiseks on midagi öelda.

Soovitan: