Мазмуну:

Жаркылдоо, Ырдоо, Мариоман: 5 кадам
Жаркылдоо, Ырдоо, Мариоман: 5 кадам

Video: Жаркылдоо, Ырдоо, Мариоман: 5 кадам

Video: Жаркылдоо, Ырдоо, Мариоман: 5 кадам
Video: "Негизи "Жар-жар" ырын ырдоо кыз кищиге ылайыктуу"-дейт Гулбубу Орозкул кызы. 2024, Сентябрь
Anonim
Жаркылдоо, Ырдоо, Мариоман
Жаркылдоо, Ырдоо, Мариоман

Attiny13a, эки светодиоддорду жана куттуктоо карта спикерлерин колдонуп, Super Mario Brothers темасындагы ырды ойнотуучу жаркыраган Мариоманды түзүңүз. ырлардын ноталары AVR микроконтроллеринин бир төөнөгүчүндө чыгарылган төрт бурчтуу толкун аркылуу жаратылган. Ар бир нотада кезектешип турган диоддор бир чиптин ар бирине 2 төөнөгүчкө туташтырылган.

1 -кадам: материалдар жана курулуш

Материалдар жана Курулуш
Материалдар жана Курулуш

1 attiny13a

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 Эки LED түздөн -түз attiny13Aнын ар бирине эки казыкка тиркелет. Эки казык ар бир LED үчүн колдонулат, экинчи пин жерге туташуу катары колдонулат. AVRдеги I/O казыктарынын учурдагы чеги светодиоддордун өтө көп тартылышына жол бербейт, андыктан резистор туташуу үчүн зарыл эмес. Колдонулган спикер музыкалык куттуктоо баракчасында кездешкен типтүү, кичинекей спикер бул чарчы толкундун үнүн чыгарып жатканын эске алып, спикерди же үн сапатын айдап кетүү жөнүндө тынчсыздануунун анча деле мааниси жок.

2 -кадам: AVR диоддоруна жана спикерге ширетүү

AVR диоддоруна жана динамикке кошуу
AVR диоддоруна жана динамикке кошуу
AVR диоддоруна жана динамикке кошуу
AVR диоддоруна жана динамикке кошуу

Светодиоддор колу сыяктуу жетиши үчүн, AVRдин ар бир тарабында бир пин кадалат. AVRди мындай багыттоо спикерге (экинчи сүрөт) туташууну жеңилдетет, анткени туташуулар эки астыңкы казыкта. Эстетика үчүн чиптин алдыңкы жагын карагыңыз келет, андыктан спикер ошол эле жакка караганына ишениңиз. ал тиркелет

3 -кадам: Attiny13a программалоо

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

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

4 -кадам: Marioman үчүн жабдыкты түзүү

Marioman үчүн Firmware түзүү
Marioman үчүн Firmware түзүү

Attiny13A программалуу флештин 1К жана 64 байт SRAMге ээ. Тиркелген tar файлынын баштапкы файлы жана жүктөө үчүн камтылган программасы бар. C кодундагы үч массив музыканы жаратуу үчүн колдонулган.

  • freq - ар бир нотанын жыштыктары
  • узундук - ар бир нотанын узундугу
  • кечигүү - ар бир нотанын ортосунда пауза

Жыштык массиви чыныгы жыштыктарга ээ эмес, тескерисинче, квадрат толкунду түзүү үчүн TTCROB реестрине коюла турган мааниге ээ эмес.

  • Attiny13A 9.6МГцке орнотулган ички осцилляторго ээ
  • IO үчүн ички саат 8 же 1.2МГцке бөлүнгөн осциллятор
  • Ички таймер 8 биттик реестрде орнотулган, ал ар бир циклди 8ге чейинки баа менен эсептейт.
  • Бул 1 / (1.2MHz / 8) =.006667ms барабар болгон бир белгини алып келет
  • 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 prescale TTCR0B = 143; // 524 Гцте квадрат толкунду жарататОбондорду жана тыныгууларды кечиктирүү үчүн жөнөкөй кечигүү функциясы колдонулган

бош уктоо (int ms) {int cnt; үчүн (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Бул 150дөн баштап ар бир NOP циклинин болжол менен.006667ms. Соңку коду массивдерди аралап, музыканы жаратып, эки LEDди жаркылдатып турат.

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 (& freq [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 (& кечигүү [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 сааттай мурун көзүн ирмеп, ызы -чуу чыгара алат. Аны күйгүзүүнүн жана өчүрүүнүн бирден -бир жолу монетанын клеткасынын батареясын алып салуу болуп саналат. бул үчүн жакшы ылайыктуу. Которууну кошсо болот, бирок аны жөнөкөй сактоо үчүн айта турган нерсе бар.

Сунушталууда: