Talaan ng mga Nilalaman:

Kumukurap, Kumakanta, Marioman: 5 Hakbang
Kumukurap, Kumakanta, Marioman: 5 Hakbang

Video: Kumukurap, Kumakanta, Marioman: 5 Hakbang

Video: Kumukurap, Kumakanta, Marioman: 5 Hakbang
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Setyembre
Anonim
Kumukurap, Kumakanta, Marioman
Kumukurap, Kumakanta, Marioman

Gumamit ng isang attiny13a, dalawang LEDs at isang speaker card ng pagbati upang lumikha ng isang kumikislap na Marioman na nagpe-play ng kanta ng tema ng Super Mario Brothers. Ito ay maaaring isang madaling proyekto na mababa ang gastos para sa sinumang naghahanap ng isang kasiya-siyang paraan upang masira ang programa ng AVR! Ang ang mga tala ng mga kanta ay nabuo ng isang square wave na na-output sa isang solong pin ng AVR microcontroller. Ang mga LED na kahalili sa bawat tala ay konektado sa 2 mga pin bawat isa sa parehong chip.

Hakbang 1: Mga Materyales at Konstruksyon

Mga Materyales at Konstruksyon
Mga Materyales at Konstruksyon

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: $ 1.40

  • 2 LEDs - anumang mga LEDs ay gagawin
  • 1 baterya ng lithium coin cell

www.sparkfun.com/commerce/product_info.php?productions_id=338Gastos: $ 2.00

1 may hawak ng coin coin

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

1 maliit na speaker mula sa isang musikal na kard ng pagbati

Kabuuang halaga ng mga materyales ~ $ 5Ang dalawang LEDs ay nakalakip nang direkta sa dalawang mga pin bawat isa sa attiny13A. Ang dalawang pin ay ginagamit para sa bawat LED, ang pangalawang pin ay itinakda nang mababa upang magamit bilang koneksyon sa lupa. Ang kasalukuyang limitasyon ng mga I / O na pin sa AVR ay pipigilan ang mga LED mula sa pagguhit ng labis kaya't ang isang risistor ay hindi kinakailangan upang kumonekta serye. Ang ginamit na tagapagsalita ay tipikal ng isang matatagpuan sa isang musikal na kard ng pagbati, gagawin ng anumang maliit na tagapagsalita, na nagbibigay ito ng isang tono ng square wave, hindi masyadong mahalaga na mag-alala tungkol sa pagmamaneho ng speaker o kalidad ng tunog.

Hakbang 2: Pag-solder ng AVR sa mga LED at Speaker

Paghihinang ng AVR sa mga LED at Speaker
Paghihinang ng AVR sa mga LED at Speaker
Paghihinang ng AVR sa mga LED at Speaker
Paghihinang ng AVR sa mga LED at Speaker

Para sa mga LED na maabot tulad ng mga bisig ang isang pin ay baluktot sa AVR sa bawat panig. Ang pag-orient sa AVR sa ganitong paraan ay ginagawang madali upang kumonekta sa nagsasalita (pangalawang imahe) dahil ang mga koneksyon ay nasa dalawang ilalim na pin. Para sa mga estetika na nais mo sa harap ng maliit na tilad na nakaharap upang matiyak na ang nagsasalita ay nakaharap sa parehong paraan kapag nakakabit na.

Hakbang 3: Programming ang Attiny13a

Programming ang Attiny13a
Programming ang Attiny13a

Mayroong maraming iba't ibang mga pagpipilian para sa pag-program ng mga AVR. Para sa proyektong ito ang USBtiny ay ginamit na magagamit bilang isang kit mula sa sitada ng ladyada alinman sa maglakip ng mga wires sa babaeng socket at i-plug ang mga ito sa isang breadboard o mas mahusay na makakuha ng isang murang AVR program adapter tulad nito.

Hakbang 4: Paglikha ng Firmware para kay Marioman

Lumilikha ng Firmware para kay Marioman
Lumilikha ng Firmware para kay Marioman

Ang attiny13A ay may 1K ng programmable flash, at 64bytes ng SRAM. Ang naka-attach na file ng tar ay mayroong mapagkukunan ng file pati na rin ang pinagsamang firmware para sa pag-download. Tatlong mga array sa c code ang ginamit upang makabuo ng musika

  • freq - mga dalas ng bawat tala
  • haba - haba ng bawat tala
  • antala - huminto sa pagitan ng bawat tala

Ang array ng dalas ay walang aktwal na mga frequency ngunit sa halip ang halaga na ilagay sa rehistro ng TTCROB upang makabuo ng square wave mula sa PB0 pin. Narito ang isang maikling buod ng mga kalkulasyon at pagsasaayos ng pin para sa pagbuo ng square wave:

  • Ang attiny13A ay may panloob na oscillator na nakatakda sa 9.6MHz
  • Ang panloob na orasan para sa IO ay ang oscillator na hinati ng 8 o 1.2MHz
  • Ang isang panloob na timer ay naka-set up sa isang rehistro ng 8bit upang mabilang ang bawat ikot ng orasan na may prescale na 8.
  • Nagreresulta ito sa isang tick na katumbas ng 1 / (1.2MHz / 8) =.006667ms
  • Ang attiny13A ay naka-configure upang ihambing kung ano ang nasa 8bit na rehistro ng TCCR0B sa timer at magpalipat-lipat ng isang pin kapag tumugma sila.
  • Halimbawa, upang makabuo ng isang square alon sa 524Hz (isang oktaba sa itaas ng gitnang C) na may isang panahon na 1.908ms.

1.908ms = 286 mga ticks ng orasan (1.908 /.0067) Hatiin ang 286 ng 2 upang i-toggle ang pin sa t / 2 (286/2 = 143) Ilagay ang 143 sa rehistro ng TTCR0B upang makabuo ng tala na ito. Ito ang lahat ng code na kinakailangan upang i-set up ang timer, gawin ang paghahambing at paglabas ng isang square wave:

TCCR0A | = (1 << WGM01); // configure timer 1 para sa CTC mode TCCR0A | = (1 << COM0A0); // toggle OC0A on match match TCCR0B | = (1 << CS01); // clk / 8 prescale TTCR0B = 143; // makabuo ng square square sa 524HzUpang maantala ang mga tono at ang mga pag-pause sa pagitan ng mga ito isang simpleng pagpapaandar na pagpapaandar ang ginamit

walang bisa ang pagtulog (int ms) {int cnt; para sa (cnt = 0; cnt <(ms); cnt ++) {int i = 150; habang (i--) {_asm ("NOP"); }}}Bumibilang ito mula sa 150 kung saan ang bawat ikot ng NOP ay humigit-kumulang na.006667ms. Ang huling bagay na ginagawa ng code ay loop sa pamamagitan ng mga arrays, bumuo ng musika at kumurap ng dalawang LEDs. Ginagawa ito sa isang tuloy-tuloy na loop para sa sumusunod na code

const uint8_t freq PROGMEM = {… data}; const uint8_t haba PROGMEM = {… data}; const uint8_t antala PROGMEM = {… data};… habang (1) {para sa (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); pagtulog (pgm_read_byte (& haba [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stop timer TCCR0B = 0; pagtulog (pgm_read_word (& antala [cnt])); // start timer TCCR0B | = (1 << CS01); // clk / 8 prescale}}Mayroong 156 na mga elemento sa mga frequency / haba / pagkaantala ng mga arrays, ang loop na ito ay dumaan sa kanila. Ang Pin PB3 at PB4 ay bawat isa ay pinalitan upang sila ay kahalili sa bawat tala Ang unang pagtulog ay ang haba ng tala na nilalaro namin pagkatapos na maitakda ang rehistro ng OCR0A sa naaangkop na halaga. Ang pangalawang pagtulog ay ang pag-pause sa pagitan ng mga tala na nilalaro namin. Sa code sa itaas maaari mong mapansin ang dalawang pagpapaandar pgm_read_byte () at pgm_read_word () pati na rin ang keyword na PROGMEM. Sa isang naka-embed na maliit na tilad tulad ng matalinong ang halaga ng SRAM ay napakalimitado, sa kasong ito 64bytes lamang. Ang mga array na ginagamit namin para sa lahat ng data ng dalas / pagkaantala / haba ay mas malaki kaysa sa 64bytes at samakatuwid ay hindi mai-load sa memorya. Sa pamamagitan ng paggamit ng espesyal na PROGMEM avr-gcc directive ang mga malalaking arrays ng data na ito ay maiiwasang mai-load sa memorya, sa halip ay mabasa ito mula sa flash.

Hakbang 5: Hinahayaan ang Marioman na Malaya

Ipinapakita ng video sa itaas ang pagkilos ni Marioman. Ang average na pagkonsumo ng kuryente ay tungkol sa 25mA kaya maaari siyang magpikit at makagawa ng mga ingay nang halos 10 oras bago maubos ang lithium coin cell. Ang tanging paraan lamang upang paandarin siya at patayin ay alisin ang baterya ng coin cell, ang matibay na nakalista sa mga materyales ay angkop para dito. Maaaring idagdag ang isang switch ngunit may sasabihin para sa pagpapanatili nito na simple.

Inirerekumendang: