Orodha ya maudhui:

Kupepesa, Kuimba, Marioman: Hatua 5
Kupepesa, Kuimba, Marioman: Hatua 5

Video: Kupepesa, Kuimba, Marioman: Hatua 5

Video: Kupepesa, Kuimba, Marioman: Hatua 5
Video: АБСОЛЮТНОЕ ЗЛО НАХОДИТСЯ В СТЕНАХ ЭТОГО СТРАШНОГО ДОМА /С ДЕМОНОМ ОДИН НА ОДИН/ ABSOLUTE EVIL 2024, Novemba
Anonim
Kupepesa, Kuimba, Marioman
Kupepesa, Kuimba, Marioman

Tumia attiny13a, LED mbili na spika ya kadi ya salamu kuunda Marioman inayoangaza ambayo hucheza wimbo wa mandhari wa Super Mario Brothers. Hii inaweza kuwa mradi wa gharama nafuu kwa kila mtu ambaye anatafuta njia ya kufurahisha ya kuingia kwenye programu ya AVR! maelezo ya nyimbo hutengenezwa na wimbi la mraba lililotolewa kwenye pini moja ya microcontroller ya AVR. Taa zinazobadilisha kila daftari zimeunganishwa na pini 2 kila moja ya chip sawa.

Hatua ya 1: Vifaa na Ujenzi

Vifaa na Ujenzi
Vifaa na Ujenzi

1 kiambatisho13a

Gharama: $ 1.40

  • LED 2 - LEDs yoyote itafanya
  • 1 betri ya seli ya lithiamu

www.sparkfun.com/commerce/product_info.php?products_id=338 Gharama: $ 2.00

Mmiliki wa seli 1 ya sarafu

www.sparkfun.com/commerce/product_info.php?products_id=8822Gharama: $ 1.25

Spika 1 ndogo kutoka kwa kadi ya salamu ya muziki

Gharama ya jumla ya vifaa ~ $ 5 LED mbili ziliambatanishwa moja kwa moja kwenye pini mbili kila moja ya attiny13A. Pini mbili hutumiwa kwa kila LED, pini ya pili imewekwa chini ili kutumiwa kama unganisho la ardhi. Kikomo cha sasa cha pini za I / O kwenye AVR kitazuia taa za LED kuteka sana kwa hivyo kontena sio lazima kuungana Msemaji anayetumiwa ni kawaida ya ile inayopatikana kwenye kadi ya salamu ya muziki, spika yoyote ndogo itafanya, ikizingatiwa kuwa hii inatoa sauti ya wimbi la mraba, sio muhimu sana kuwa na wasiwasi juu ya kuendesha spika au ubora wa sauti.

Hatua ya 2: Kugundisha AVR kwa LED na Spika

Kuunganisha AVR kwa LEDs na Spika
Kuunganisha AVR kwa LEDs na Spika
Kuunganisha AVR kwa LEDs na Spika
Kuunganisha AVR kwa LEDs na Spika

Ili taa ziweze kufikia mikono kama pini moja imeinama juu ya AVR kila upande. Kuelekeza AVR kwa njia hii inafanya iwe rahisi kuungana na spika (picha ya pili) kwa kuwa unganisho liko kwenye pini mbili za chini. imeambatanishwa.

Hatua ya 3: Kupanga Attiny13a

Kupanga Attiny13a
Kupanga Attiny13a

Kuna chaguzi nyingi tofauti za programu za AVR. Kwa mradi huu USBtiny ilitumika ambayo inapatikana kama kit kutoka kwa tovuti ya ladyadahttps://www.ladyada.net/make/usbtinyisp/index.html Kuunganisha AVR kwa programu unaweza ama ambatisha waya kwenye tundu la kike na uzibe kwenye ubao wa mkate au bora upate adapta ya bei rahisi ya programu ya AVR kama hii https://www.sparkfun.com/commerce/product_info.php?.

Hatua ya 4: Kuunda Firmware ya Marioman

Kuunda Firmware kwa Marioman
Kuunda Firmware kwa Marioman

Attiny13A ina 1K ya flash inayoweza kupangiliwa, na 64byte za SRAM. Faili ya tar iliyoambatanishwa ina faili ya chanzo na vile vile imekusanya firmware ya kupakua.

  • freq - masafa ya kila maandishi
  • urefu - urefu wa kila noti
  • kuchelewesha - pumzika kati ya kila dokezo

Safu ya masafa haina masafa halisi lakini badala ya thamani ya kuweka kwenye rejista ya TTCROB ili kutoa wimbi la mraba kutoka kwenye pini ya PB0. Hapa kuna muhtasari mfupi wa mahesabu na usanidi wa pini kwa kizazi cha wimbi la mraba:

  • Attiny13A ina oscillator ya ndani iliyowekwa kwa 9.6MHz
  • Saa ya ndani ya IO ni oscillator iliyogawanywa na 8 au 1.2MHz
  • Kipima muda cha ndani ni kusanikisha katika rejista ya 8bit ili kuhesabu kila mzunguko wa saa na muhtasari wa 8.
  • Hii inasababisha kupe moja sawa na 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A imeundwa kulinganisha kile kilicho kwenye rejista ya 8bit TCCR0B na kipima muda na toa pini zinapolingana.
  • Kwa mfano, ili kutengeneza wimbi la mraba kwa 524Hz (octave moja juu ya katikati C) ambayo ina kipindi cha 1.908ms.

1.908ms = kupe za saa 286 (1.908 /.0067) Gawanya 286 na 2 kugeuza pini kwa t / 2 (286/2 = 143) Weka 143 kwenye rejista ya TTCR0B ili kutoa noti hii. Nambari hii yote ni muhimu kuanzisha kipima muda, fanya kulinganisha na kutoa wimbi la mraba:

TCCR0A | = (1 << WGM01); // sanidi kipima muda 1 cha hali ya CTC TCCR0A | = (1 << COM0A0); // toggle OC0A on kulinganisha mechi TCCR0B | = (1 << CS01); // clk / 8 prescale TTCR0B = 143; // tengeneza wimbi la mraba kwa 524HzKuchelewesha tani na mapumziko kati yao kazi rahisi ya kuchelewesha ilitumika

kulala tupu (int ms) {int cnt; kwa (cnt = 0; cnt <(ms); cnt ++) {int i = 150; wakati (i--) {_asm ("NOP"); }}}Hii inahesabu kutoka 150 ambapo kila mzunguko wa NOP ni takriban.006667ms. Jambo la mwisho nambari hufanya ni kuzunguka kwa safu, kutoa muziki na kupepesa LED mbili. Hii inafanywa kwa kitanzi kinachoendelea na nambari ifuatayo.

const uint8_t freq PROGMEM = {… data}; const uint8_t urefu PROGMEM = {… data}; 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); pato_badili (PORTB, PB3); pato_badili (PORTB, PB4); kulala (pgm_read_byte (& urefu [cnt])); pato_badili (PORTB, PB3); pato_badili (PORTB, PB4); // kipima muda TCCR0B = 0; kulala (pgm_read_wordword (& kuchelewesha [cnt])); // kuanza kipima muda TCCR0B | = (1 << CS01); // clk / 8 kielelezo}}Kuna vitu 156 katika masafa / urefu / safu za kuchelewesha, kitanzi hiki hupita. Pini PB3 na PB4 kila moja imebadilishwa ili wabadilike na kila dokezo Usingizi wa kwanza ni urefu wa noti tunayocheza baada ya kuweka rejista ya OCR0A kwa thamani inayofaa. Kulala kwa pili ni pause kati ya noti tunazocheza. Katika nambari hapo juu unaweza kuona kazi mbili pgm_read_byte () na pgm_read_word () pamoja na neno kuu PROGMEM Kwa chip iliyowekwa kama kiwango cha SRAM ni mdogo sana, katika kesi hii ni 64bytes tu. Safu tunazotumia kwa data zote za masafa / kuchelewesha / urefu ni kubwa zaidi kuliko 64byte na kwa hivyo haiwezi kupakiwa kwenye kumbukumbu. Kwa kutumia maagizo maalum ya PROGMEM avr-gcc safu hizi kubwa za data zinazuiwa kupakia kwenye kumbukumbu, badala yake zinasomwa kutoka kwa flash.

Hatua ya 5: Kumwachia Marioman Afunguke

Video hapo juu inaonyesha Marioman akifanya kazi. Matumizi ya nguvu wastani ni karibu 25mA ili aweze kupepesa na kupiga kelele kwa masaa kama 10 kabla ya kukimbia kiini cha sarafu ya lithiamu. Njia pekee ya kumzima na kuzima ni kuondoa betri ya seli ya sarafu, iliyo imara iliyoorodheshwa kwenye vifaa ni inafaa kwa hili. Kubadili kunaweza kuongezwa lakini kuna kitu cha kusema kwa kuiweka rahisi.

Ilipendekeza: