Мазмұны:

Жыпылықтау, ән айту, Мариоман: 5 қадам
Жыпылықтау, ән айту, Мариоман: 5 қадам

Бейне: Жыпылықтау, ән айту, Мариоман: 5 қадам

Бейне: Жыпылықтау, ән айту, Мариоман: 5 қадам
Бейне: Немерелерінің әні 💔жүректі елжіретер😢😭Әр отбасыға бұйырсын👨‍👩‍👧‍👦 🤲КӨРСЕҢІЗ ТАМСАНАСЫЗ🧍‍♂️🧍‍♀️ 2024, Қараша
Anonim
Жыпылықтау, ән айту, Мариоман
Жыпылықтау, ән айту, Мариоман

Super Mario Brothers тақырыптық әнді ойнайтын жыпылықтайтын Мариоман жасау үшін attiny13a, екі жарық диодты және сәлемдесу картасының динамигін қолданыңыз. Бұл AVR бағдарламалаудың қызықты жолын іздейтін кез келген адам үшін арзан бағадағы жоба болуы мүмкін! әндердің ноталары AVR микроконтроллерінің бір түйреуішінде шығатын төртбұрышты толқынмен жасалады. Әр жазбада ауысатын светодиодтар бір чиптің әрқайсысына 2 түйреуішке қосылады.

1 -қадам: материалдар мен құрылыс

Материалдар мен құрылыс
Материалдар мен құрылыс

1 аттин13а

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

  • 2 жарық диоды - кез келген светодиод жасайды
  • 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 Екі светодиоды тікелей екі түйреуішке бекітілген13A. Әр светодиод үшін екі түйреуіш пайдаланылады, екінші түйреуіш жерге қосылу үшін төмен орнатылады. AVR -дегі енгізу -шығару түйреуіштерінің ағымдағы шегі светодиодтардың шамадан тыс тартылуына жол бермейді, сондықтан оларды қосу үшін резистор қажет емес. Қолданылатын динамик музыкалық сәлемдесу картасына тән, кез келген кішкентай спикер бұл шаршы толқынды үн шығаратынын ескере отырып жасайды, динамикті басқару немесе дыбыс сапасы туралы алаңдау маңызды емес.

2 -қадам: AVR диодты және динамикке дәнекерлеу

AVR диодты және динамикке дәнекерлеу
AVR диодты және динамикке дәнекерлеу
AVR диодты және динамикке дәнекерлеу
AVR диодты және динамикке дәнекерлеу

Жарық диодтары қолдар сияқты жетуі үшін, AVR -дің әр жағында бір түйреуіш иілген. AVR -ді осылай бағыттау динамикке (екінші сурет) қосылуды жеңілдетеді, себебі қосылымдар төменгі екі түйреуіште. Эстетика үшін чиптің алдыңғы жағын сыртқа қаратқыңыз келеді. ол бекітілген.

3 -қадам: Attiny13a бағдарламалау

Attiny13a бағдарламалау
Attiny13a бағдарламалау

AVR бағдарламалаудың көптеген нұсқалары бар, бұл жоба үшін USBtiny қолданылды, ол ladyada сайтынан жинақ ретінде қол жетімді https://www.ladyada.net/make/usbtinyisp/index.html АВР -ны бағдарламашыға қосу үшін сымдарды аналық розеткаға жалғап, оларды тақтаға қосыңыз немесе одан да жақсы AVR бағдарламалау адаптерін алыңыз, мысалы: штепсельді жалғау үшін 3x2 ерлер тақырыптары бар..

4 -қадам: Marioman үшін микробағдарламаны құру

Marioman үшін микробағдарламаны құру
Marioman үшін микробағдарламаны құру

Attiny13A -де 1K бағдарламаланатын жарқыл және 64 байт SRAM бар. Қосылған tar файлында бастапқы файл, сонымен қатар жүктеуге арналған микробағдарлама бар. Музыканы құру үшін c кодының үш массиві қолданылған.

  • жиілік - әр нотаның жиіліктері
  • ұзындық - әр нотаның ұзындығы
  • кешіктіру - әр нотаның арасындағы үзіліс

Жиіліктер жиілігінде нақты жиіліктер жоқ, керісінше PB0 түйреуішінің квадраттық толқынын генерациялау үшін TTCROB регистріне енгізілетін мән бар. Мұнда шаршы толқын генерациясы үшін есептеулер мен түйреуіштердің қысқаша мазмұны берілген:

  • Attiny13A 9,6 МГц ішкі осцилляторы бар
  • IO үшін ішкі сағат - осциллятор 8 немесе 1,2 МГц -ке бөлінеді
  • Ішкі таймер 8 биттік тізілімде орнатылған, ол әрбір сағат циклін 8 -ге дейінгі бағамен есептейді.
  • Нәтижесінде 1 / (1.2МГц / 8) =.006667 мс тең болатын бір белгі пайда болады
  • Attiny13A 8 биттік TCCR0B регистріндегілерді таймермен салыстыруға және олар сәйкес келген кезде түйреуішті ауыстыруға арналған.
  • Мысалы, 524 Гц (С ортасынан бір октава) квадраттық толқын құру үшін оның периоды 1,908 мс.

1.908ms = 286 сағат белгісі (1.908/.0067) 286 -ны 2 -ге бөліп, түйреуішті t/2 -ге ауыстырыңыз (286/2 = 143) Бұл жазбаны құру үшін TTCR0B регистріне 143 қойыңыз. Бұл барлық код қажет. таймерді орнату үшін төртбұрышты толқынды салыстырыңыз және шығарыңыз:

TCCR0A | = (1 << WGM01); // CTC режимі үшін таймер 1 конфигурациялау TCCR0A | = (1 << COM0A0); // салыстыру матчында OC0A ауыстыру TCCR0B | = (1 << CS01); // clk/8 алдын ала шкаласы TTCR0B = 143; // 524 Гц жиіліктегі шаршы толқын шығарадыДыбыстарды және олардың арасындағы кідірістерді кешіктіру үшін қарапайым кешіктіру функциясы қолданылды

бос ұйқы (int ms) {int cnt; үшін (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm («NOP»); }}}Бұл әрбір NOP циклі шамамен.006667ms болатын 150 -ден бастап есептеледі. Кодтың соңғы әрекеті - массивтерді айналдыру, музыканы шығару және екі жарық диодты жыпылықтау.

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& жиілік [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); ұйқы (pgm_read_byte (& length [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // тоқтату таймері TCCR0B = 0; ұйқы (pgm_read_word (& delay [cnt]))); // іске қосу таймері TCCR0B | = (1 << CS01); // clk/8 prescale}}Жиіліктер/ұзындықтар/кідіріс массивтерінде 156 элемент бар, бұл цикл оларды кесіп өтеді. PB3 пен PB4 түйреуіштері әрқайсысы ауысады, сондықтан олар әр жазбамен ауысады. Бірінші ұйқы - OCR0A регистрін тиісті мәнге орнатқаннан кейін ойнайтын жазбаның ұзындығы. Екінші ұйқы - біз ойнайтын ноталар арасындағы үзіліс. Жоғарыда келтірілген кодта сіз pgm_read_byte () және pgm_read_word () екі функциясын, сондай -ақ PROGMEM кілт сөзін байқай аласыз. Барлық жиілік/кідіріс/ұзындық деректері үшін біз қолданатын массивтер 64 байттан әлдеқайда үлкен, сондықтан оларды жадқа жүктеу мүмкін емес. Арнайы PROGMEM avr-gcc директивасын қолдану арқылы бұл үлкен деректер массивтерін жадқа жүктеуге жол берілмейді, керісінше олар флэштен оқылады.

5 -қадам: Мариоманды босатыңыз

Жоғарыдағы бейнеде Мариоманның әрекеті көрсетілген. Орташа қуатты тұтыну шамамен 25 мА құрайды, сондықтан ол литий монетасының ұясын ағызар алдында шамамен 10 сағат бойы жыпылықтап, шу шығаруы мүмкін. Оны қосудың және өшірудің жалғыз жолы - монеталық батареяны шығарып алу. бұл үшін өте қолайлы. Қосқышты қосуға болады, бірақ оны қарапайым ұстау үшін айту керек.

Ұсынылған: