Բովանդակություն:

Թարթում, երգում, Մարիոման ՝ 5 քայլ
Թարթում, երգում, Մարիոման ՝ 5 քայլ

Video: Թարթում, երգում, Մարիոման ՝ 5 քայլ

Video: Թարթում, երգում, Մարիոման ՝ 5 քայլ
Video: Ախ ինչ լավ են սարի վրա . 2024, Նոյեմբեր
Anonim
Թարթում, երգում, Մարիոման
Թարթում, երգում, Մարիոման

Օգտագործեք attiny13a, երկու LED և շնորհավորական բացիկի խոսնակ ՝ ստեղծելու համար թարթող Marioman, որը նվագում է Super Mario Brothers թեմայի երգը: Սա կարող է հեշտ էժան նախագիծ լինել բոլոր նրանց համար, ովքեր փնտրում են AVR ծրագրավորման մեջ ներխուժելու զվարճալի միջոց: Երգերի նոտաները գեներացվում են AVR միկրոկոնտրոլերի մեկ քորոցի վրա թողարկված քառակուսի ալիքի միջոցով: LED- ները, որոնք փոխարինվում են յուրաքանչյուր նոտայի վրա, միացված են նույն չիպից յուրաքանչյուրի 2 կապում:

Քայլ 1: Նյութեր և պատրաստում

Նյութեր և կոնստրուկցիա
Նյութեր և կոնստրուկցիա

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3d Արժեքը ՝ $ 1.40

  • 2 LED - ցանկացած LED կանի
  • 1 լիթիումի մետաղադրամով մարտկոց

www.sparkfun.com/commerce/product_info.php?products_id=338 Արժեքը ՝ $ 2.00

1 մետաղադրամի բջիջի սեփականատեր

www.sparkfun.com/commerce/product_info.php?products_id=8822 Արժեքը `$ 1.25

1 փոքր բարձրախոս երաժշտական շնորհավորական բացիկից

Նյութերի ընդհանուր արժեքը 5 5 դոլար Երկու LED- ները ուղղակիորեն ամրացված էին attain13A- ից յուրաքանչյուրի երկու կապում: Յուրաքանչյուր LED- ի համար օգտագործվում է երկու կապում, երկրորդ կապը ցածր է օգտագործվում որպես գետնին միանալու համար: AVR- ի I/O կապերի ընթացիկ սահմանը թույլ չի տա LED- ները չափից ավելի գծել, այնպես որ անհրաժեշտ չէ ռեզիստորը միացնել սերիա: Օգտագործված խոսնակը բնորոշ է երաժշտական բացիկի մեջ հայտնաբերվածին, որը կանի ցանկացած փոքր խոսնակ, հաշվի առնելով, որ սա թողարկում է քառակուսի ալիքի հնչերանգ, դա չափազանց կարևոր չէ անհանգստանալ բարձրախոսը վարելու կամ ձայնի որակի վրա:

Քայլ 2. AVR- ի զոդում LED- ներին և բարձրախոսին

AVR- ի զոդում LED- ներին և բարձրախոսին
AVR- ի զոդում LED- ներին և բարձրախոսին
AVR- ի զոդում LED- ներին և բարձրախոսին
AVR- ի զոդում LED- ներին և բարձրախոսին

Որպեսզի LED- ները գնան ձեռքերի պես, մեկ քորոց թեքված է AVR- ի վրա յուրաքանչյուր կողմում: Այս կերպ AVR- ով կողմնորոշվելը հեշտացնում է բարձրախոսին միանալը (երկրորդ պատկերը), քանի որ միացումները երկու ներքևի կապում են: Գեղագիտության համար դուք ցանկանում եք, որ չիպի դիմացի հատվածը դեպի դուրս լինի, այնպես որ համոզվեք, որ խոսնակը նույն կերպ է նայում, երբ այն կցված է:

Քայլ 3. mingրագրավորում Attiny13a

Mingրագրավորում Attiny13a
Mingրագրավորում Attiny13a

AVR- ների ծրագրավորման բազմաթիվ տարբերակներ կան: Այս նախագծի համար օգտագործվել է USBtiny- ն, որը հասանելի է որպես հավաքածու ladyada- ի կայքից https://www.ladyada.net/make/usbtinyisp/index.html կամ լարեր ամրացրեք կանացի վարդակին և միացրեք դրանք տախտակի մեջ, կամ ավելի լավ ՝ ձեռք բերեք այսպիսի էժան AVR ծրագրավորման ադապտեր:.

Քայլ 4: Ստեղծեք որոնվածը Marioman- ի համար

Ստեղծեք որոնվածը Marioman- ի համար
Ստեղծեք որոնվածը Marioman- ի համար

The attiny13A- ն ունի 1K ծրագրավորվող ֆլեշ և 64bytes SRAM: Կցված tar ֆայլը ունի սկզբնաղբյուր, ինչպես նաև ներբեռնման համար կազմված ծրագրակազմ: Երաժշտության ստեղծման համար c կոդի երեք զանգված է օգտագործվել

  • freq - յուրաքանչյուր նոտայի հաճախականություններ
  • երկարություն - յուրաքանչյուր գրառման երկարություն
  • հետաձգում - դադար յուրաքանչյուր նոտայի միջև

Հաճախականությունների զանգվածը չունի իրական հաճախականություններ, այլ այն արժեքը, որը պետք է դնել TTCROB գրանցամատյանում ՝ PB0 պինից քառակուսի ալիք առաջացնելու համար: Ահա քառակուսի ալիքների առաջացման հաշվարկների և կապի կազմաձևի համառոտ պատկերը.

  • The attiny13A- ն ունի ներքին տատանում `9.6 ՄՀց հաճախականությամբ
  • IO- ի ներքին ժամացույցը տատանումն է `բաժանված 8 կամ 1.2 ՄՀց
  • Ներքին ժամաչափը տեղադրված է 8 բիթանոց գրանցամատյանում ՝ յուրաքանչյուր ժամացույցի ցիկլը հաշվարկելու 8 -ով նախնական սանդղակով:
  • Սա հանգեցնում է մեկ տիզի ՝ հավասար 1 / (1.2MHz / 8) =.006667 մգ
  • The attiny13A- ն կազմաձևված է 8 բիթանոց TCCR0B գրանցամատյանում եղածը համեմատելու ժամաչափի հետ և միացնելու դեպքում քորոցը փոխելու ժամանակ:
  • Օրինակ, 524 Հց հաճախականությամբ քառակուսի ալիք առաջացնելու համար (միջին օկտավայից մեկ միջին C- ից բարձր), որն ունի 1,908 մկ:

1.908ms = 286 ժամացույցի տիտղոս (1.908/.0067) 286 -ը բաժանեք 2 -ի ՝ t/2 -ում քորոցը փոխելու համար (286/2 = 143) Այս գրառումը ստեղծելու համար 143 -ը դրեք TTCR0B գրանցամատյանում: Սա բոլոր անհրաժեշտ ծածկագիրն է ժամաչափը կարգավորելու համար համեմատեք և թողարկեք քառակուսի ալիք.

TCCR0A | = (1 << WGM01); // կարգավորել ժամանակաչափ 1 CTC ռեժիմի համար TCCR0A | = (1 << COM0A0); // միացնել OC0A- ն TCCR0B համեմատման խաղի վրա = = (1 << CS01); // clk/8 prescale TTCR0B = 143; // առաջացնել քառակուսի ալիք 524 Հց հաճախականությամբՀնչյուններն ու դրանց միջև դադարները հետաձգելու համար կիրառվեց մի պարզ հետաձգման գործառույթ

դատարկ քուն (int ms) {int cnt; համար (cnt = 0; cnt <(ms); cnt ++) {int i = 150; մինչդեռ (i--) {_asm («NOP»); }}}Սա հաշվում է 150 -ից, որտեղ յուրաքանչյուր NOP ցիկլը մոտավորապես.006667ms է: Վերջին բանը, որ անում է ծածկագիրը, զանգվածների միջով անցնելն է, երաժշտություն առաջացնելը և երկու LED- ները թարթելը: Դա արվում է հետևյալ կոդով շարունակական օղակի համար

const uint8_t հաճախականություն PROGMEM = {… տվյալներ}; const uint8_t երկարություն PROGMEM = {… տվյալներ}; const uint8_t հետաձգում PROGMEM = {… տվյալներ};… մինչդեռ (1) {համար (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& հաճախականություն [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); քնել (pgm_read_byte (& երկարությունը [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // կանգառի ժամանակաչափ TCCR0B = 0; քնել (pgm_read_word (& delay [cnt])); // գործարկման ժամանակաչափ TCCR0B | = (1 << CS01); // clk/8 նախնական սանդղակ}}Հաճախականությունների/երկարությունների/հետաձգման զանգվածներում կան 156 տարրեր, այս հանգույցն անցնում է դրանք: PB3 և PB4 կապանքները յուրաքանչյուրը փոխված է, այնպես որ դրանք կփոխարինվեն յուրաքանչյուր նոտայի հետ: Առաջին քունն այն նոտայի երկարությունն է, որը մենք նվագում ենք OCR0A գրանցամատյանը համապատասխան արժեքին դնելուց հետո: Երկրորդ քունը դադար է մեր նվագած նոտաների միջև: Վերը նշված կոդի մեջ կարող եք նկատել երկու գործառույթներ ՝ Հաճախականության/ուշացման/երկարության բոլոր տվյալների համար օգտագործվող զանգվածները շատ ավելի մեծ են, քան 64 բայթ, և, հետևաբար, դրանք չեն կարող բեռնվել հիշողության մեջ: Օգտագործելով PROGMEM avr-gcc հատուկ հրահանգը, այս մեծ տվյալների զանգվածները կանխվում են հիշողության մեջ բեռնվելուց, փոխարենը դրանք կարդացվում են ֆլեշից:

Քայլ 5: Թողնել Մարիոմանին ազատության մեջ

Վերոնշյալ տեսանյութը ցույց է տալիս Մարիոմանին գործողության մեջ: Միջին էներգիայի սպառումը մոտ 25 մԱ է, այնպես որ նա կարող է թարթել և աղմուկ բարձրացնել մոտ 10 ժամ ՝ լիթիումի մետաղադրամը լիցքաթափելուց առաջ: Նրան միացնելու և անջատելու միակ միջոցը մետաղադրամների մարտկոցը հանելն է, նյութերում նշված ամուրը ՝ լավ հարմար է դրա համար: Անջատիչը կարող է ավելացվել, բայց այն պարզ պահելու համար ասելիք կա:

Խորհուրդ ենք տալիս: