Агуулгын хүснэгт:

Нүдээ анивчих, дуулах, Мариоман: 5 алхам
Нүдээ анивчих, дуулах, Мариоман: 5 алхам

Видео: Нүдээ анивчих, дуулах, Мариоман: 5 алхам

Видео: Нүдээ анивчих, дуулах, Мариоман: 5 алхам
Видео: ENEREL x DESANT: Infinitea (Audio) (CC) 2024, Есдүгээр
Anonim
Нүдээ анивчих, дуулах, Мариоман
Нүдээ анивчих, дуулах, Мариоман

Attiny13a, хоёр LED болон мэндчилгээний картын чанга яригчийг ашиглан Super Mario Brothers сэдэвт дууг тоглодог анивчдаг Мариоманыг бүтээгээрэй. дуунуудын тэмдэглэлийг AVR микроконтроллерийн ганц зүү дээр байрлуулсан дөрвөлжин долгионоор үүсгэсэн болно. Тэмдэглэл бүрт ээлжлэн орших LED нь ижил чип тус бүрийг 2 голтой холбодог.

Алхам 1: Материал ба барилгын ажил

Материал ба барилгын ажил
Материал ба барилгын ажил

1 attina13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: $ 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 Хоёр LED -ийг attiny13A тус бүр хоёр голтой шууд холбосон. LED тус бүрт хоёр тээглүүр ашигладаг бөгөөд хоёр дахь зүүг газардуулгын холболт болгон ашиглахаар тохируулагдсан байдаг. AVR дээрх оролт/гаралтын одоогийн хязгаар нь LED -ийг хэт их зурахаас сэргийлдэг тул залгахад резистор шаардлагагүй болно. Цуврал. Ашигласан чанга яригч нь хөгжмийн мэндчилгээний картанд байдаг ердийн зүйл бөгөөд жижиг дөрвөлжин долгионы өнгө аяс өгч байгаа тул чанга яригч эсвэл дууны чанарт санаа зовох нь тийм ч чухал биш юм.

Алхам 2: AVR -ийг LED ба чанга яригч руу гагнах

AVR -ийг LED болон чанга яригч руу гагнах
AVR -ийг LED болон чанга яригч руу гагнах
AVR -ийг LED болон чанга яригч руу гагнах
AVR -ийг LED болон чанга яригч руу гагнах

LED нь гар шиг гараа сунгахын тулд AVR дээр нэг тээглүүрийг хоёр талд нь нугалав. AVR -ийг ингэж чиглүүлэх нь холбогч хоёр доод тээглүүр дээр байгаа тул чанга яригчтай (хоёр дахь зураг) холбогдоход хялбар болгодог. Гоо сайхны хувьд чипний урд талд нь харуулахыг хүсч байгаа тул чанга яригч яг ижилхэн тулгарч байгаа эсэхийг шалгаарай. үүнийг хавсаргасан болно.

Алхам 3: Attiny13a програмчлах

Attiny13a програмчлал
Attiny13a програмчлал

AVR програмчлах олон янзын сонголтууд байдаг. Энэхүү төслийн хувьд USBtiny -ийг ladyada -ийн сайтаас авах боломжтой https://www.ladyada.net/make/usbtinyisp/index.html AVR -ийг програмисттай холбохын тулд та Эмэгтэй залгуурт утсыг холбож, талхны тавцан дээр залгаарай, эсвэл хямд AVR програмчлалын адаптер худалдаж аваарай, жишээ нь:.

Алхам 4: Marioman -д зориулсан firmware үүсгэх

Marioman -д зориулсан програм хангамжийг бий болгох
Marioman -д зориулсан програм хангамжийг бий болгох

Attiny13A нь 1K програмчлагдах боломжтой флаштай, 64 битийн SRAM -тэй бөгөөд хавсаргасан tar файл нь эх файлтай бөгөөд татаж авахад зориулагдсан програм хангамжийг агуулдаг бөгөөд хөгжим үүсгэхэд c кодын гурван массивыг ашигласан болно.

  • freq - тэмдэглэл бүрийн давтамж
  • урт - тэмдэглэл бүрийн урт
  • саатал - тэмдэглэл бүрийн хооронд түр зогсоох

Давтамжийн массив нь бодит давтамжтай биш, харин PB0 зүүгээс квадрат долгион үүсгэхийн тулд TTCROB бүртгэлд оруулах утгыг агуулдаг. Дөрвөлжин долгион үүсгэх тооцоолол, зүү тохируулгын товч тоймыг энд оруулав.

  • Attiny13A нь 9.6МГц давтамжтай дотоод осциллятортой
  • IO -ийн дотоод цаг нь 8 эсвэл 1.2 МГц -т хуваагддаг осциллятор юм
  • Дотоод таймерыг 8 битийн регистрт тохируулж, цаг бүрийн мөчлөг бүрийг 8 -ийн урьдчилсан үнэлгээгээр тоолно.
  • Үүний үр дүнд 1 / (1.2MHz / 8) =.006667ms -тай тэнцэх нэг тэмдэг гарч ирнэ
  • Attiny13A нь 8 битийн TCCR0B бүртгэлд байгаа зүйлийг таймертай харьцуулж, таарах үед зүүг солихоор тохируулагдсан болно.
  • Жишээлбэл, 590 Гц давтамжтай (С дундаас дээш нэг октав) 1.908 мс давтамжтай дөрвөлжин долгион үүсгэхийн тулд.

1.908ms = 286 цагны хачиг (1.908/.0067) 286 -г 2 -т хувааж, зүүг t/2 (286/2 = 143) дээр сэлгэнэ үү (286/2 = 143) Энэ тэмдэглэлийг гаргахын тулд TTCR0B бүртгэлд 143 -ийг оруулна уу. Энэ бол шаардлагатай бүх код юм. таймерыг тохируулахын тулд квадрат долгионыг харьцуулж гаргана уу.

TCCR0A | = (1 << WGM01); // таймер 1 -ийг CTC горимд тохируулах TCCR0A | = (1 << COM0A0); // харьцуулах тохиргоон дээр OC0A -ийг солих TCCR0B | = (1 << CS01); // clk/8 урьдчилсан хуваарь TTCR0B = 143; // 524 Гц давтамжтай дөрвөлжин долгион үүсгэнэДуу болон завсарлагааны хугацааг хойшлуулахын тулд хойшлуулах энгийн функцийг ашигласан

хоосон нойр (int ms) {int cnt; for (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Энэ нь NOP -ийн мөчлөг бүр ойролцоогоор.006667ms байдаг 150 -аас тоологддог. Хамгийн сүүлд хийдэг код нь массивуудыг давтаж, хөгжим үүсгэж, хоёр LED -ийг анивчих явдал юм.

const uint8_t freq PROGMEM = {… өгөгдөл}; const uint8_t урт PROGMEM = {… өгөгдөл}; const uint8_t саатал PROGMEM = {… өгөгдөл};… байхад (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [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 (& хойшлуулах [cnt]))); // эхлэх таймер TCCR0B | = (1 << CS01); // clk/8 урьдчилсан үнэлгээ}}Давтамж/урт/хоцролтын массивт 156 элемент байдаг бөгөөд энэ давталт тэдгээрийг дайран өнгөрдөг. PB3 ба PB4 зүү тус бүрийг хооронд нь сэлгэн залгах тул эхний унтах нь OCR0A регистрийг зохих утгад оруулсны дараа бидний тоглодог тэмдэглэлийн урт юм. Хоёр дахь унтах нь бидний тоглодог нотуудын хоорондох завсарлага юм. Дээрх код дээр та pgm_read_byte () ба pgm_read_word () гэсэн хоёр функц болон PROGMEM түлхүүр үгийг анзаарсан байж магадгүй. Attini шиг суулгагдсан чиптэй бол SRAM -ийн хэмжээ маш хязгаарлагдмал бөгөөд энэ тохиолдолд зөвхөн 64 байт байдаг. Бидний давтамж/саатал/уртын бүх өгөгдөлд ашигладаг массивууд нь 64 байтаас хамаагүй том тул санах ойд ачаалах боломжгүй юм. Тусгай PROGMEM avr-gcc удирдамжийг ашигласнаар эдгээр том өгөгдлийн массивуудыг санах ойд ачаалахаас сэргийлж, харин флэшээс уншдаг.

Алхам 5: Мариоманыг сул тавь

Дээрх видеон дээр Мариоман хэрхэн ажиллаж байгааг харуулжээ. Цахилгаан эрчим хүчний дундаж хэрэглээ нь ойролцоогоор 25 мА байдаг тул литийн зоосыг шавхахаасаа өмнө 10 орчим цагийн турш анивчиж, дуу чимээ гаргаж чаддаг. Түүнийг асаах, унтраах цорын ганц арга бол зоосны батерейг салгах явдал юм. үүнд маш тохиромжтой. Шилжүүлэгч нэмж болно, гэхдээ үүнийг энгийн байлгахын тулд хэлэх зүйл байна.

Зөвлөмж болгож буй: