Съдържание:

Мига, пее, Marioman: 5 стъпки
Мига, пее, Marioman: 5 стъпки

Видео: Мига, пее, Marioman: 5 стъпки

Видео: Мига, пее, Marioman: 5 стъпки
Видео: 7 февраля 2023 года каналу исполняется 10 лет, а количество просмотров превысило миллион. 2024, Ноември
Anonim
Мига, пее, Мариоман
Мига, пее, Мариоман

Използвайте attiny13a, два светодиода и високоговорител за поздравителна картичка, за да създадете мигащ Marioman, който възпроизвежда тематичната песен на Super Mario Brothers. Това може да бъде лесен евтин проект за всеки, който търси забавен начин да проникне в AVR програмирането! нотите на песните се генерират от квадратна вълна, изведена върху един щифт на микроконтролера AVR. Светодиодите, които се редуват на всяка нота, са свързани към 2 пина всеки от един и същ чип.

Стъпка 1: Материали и изработка

Материали и строителство
Материали и строителство

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dЦена: $ 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 Двата светодиода бяха прикрепени директно към два щифта всеки от attiny13A. За всеки светодиод се използват два пина, вторият щифт е настроен ниско, за да се използва като заземяваща връзка. Текущата граница на входно -изходните щифтове на AVR ще попречи на светодиодите да черпят твърде много, така че не е необходимо да се включва резистор Използваният високоговорител е типичен за този, който се намира в музикална поздравителна картичка, всеки малък говорител ще го направи, като се има предвид, че това извежда тон на квадратна вълна, не е твърде важно да се притеснявате за задвижването на високоговорителя или качеството на звука.

Стъпка 2: Запояване на AVR към светодиодите и високоговорителя

Запояване на AVR към светодиодите и високоговорителя
Запояване на AVR към светодиодите и високоговорителя
Запояване на AVR към светодиодите и високоговорителя
Запояване на AVR към светодиодите и високоговорителя

За да могат светодиодите да достигат, като ръцете, един щифт е огънат над AVR от всяка страна. Ориентирането на AVR по този начин улеснява свързването към високоговорителя (второ изображение), тъй като връзките са на двата долни пина. той е приложен.

Стъпка 3: Програмиране на Attiny13a

Програмиране на Attiny13a
Програмиране на Attiny13a

Има много различни опции за програмиране на AVR -та. или прикрепете проводници към женския контакт и ги включете в макет или още по -добре вземете евтин адаптер за програмиране на AVR като тозиhttps://www.sparkfun.com/commerce/product_info.php? products_id = 8508 заедно с 3x2 мъжки заглавки за свързване на щепсела.

Стъпка 4: Създаване на фърмуера за Marioman

Създаване на фърмуера за Marioman
Създаване на фърмуера за Marioman

Attiny13A има 1K програмируема флаш и 64 байта SRAM, Прикаченият tar файл има изходния файл, както и компилиран фърмуер за изтегляне. Три масива в кода c бяха използвани за генериране на музика

  • freq - честоти на всяка нота
  • length - дължина на всяка нота
  • забавяне - пауза между всяка нота

Честотният масив няма действителните честоти, а по -скоро стойността, която трябва да се постави в регистъра TTCROB за генериране на квадратната вълна от щифта PB0. Ето кратко резюме на изчисленията и конфигурацията на щифтове за генериране на квадратна вълна:

  • Attiny13A има вътрешен осцилатор, настроен на 9.6MHz
  • Вътрешният часовник за IO е осцилаторът, разделен на 8 или 1.2MHz
  • Вътрешен таймер е настроен в 8 -битов регистър за отброяване на всеки тактов цикъл с предварително мащаб 8.
  • Това води до едно отметка, равно на 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A е конфигуриран да сравнява това, което е в 8 -битовия регистър TCCR0B с таймера и да превключва щифт, когато съвпадат.
  • Например, за да се генерира квадратна вълна при 524Hz (една октава над средата C), която има период от 1.908ms.

1.908ms = 286 тактове (1.908/.0067) Разделете 286 на 2, за да превключите щифта при t/2 (286/2 = 143) Поставете 143 в регистъра TTCR0B, за да генерирате тази бележка. Това е целият код, който е необходим за да настроите таймера, направете сравнение и изведете квадратна вълна:

TCCR0A | = (1 << WGM01); // конфигуриране на таймер 1 за режим CTC TCCR0A | = (1 << COM0A0); // превключване на OC0A при сравняване на съвпадението TCCR0B | = (1 << CS01); // clk/8 предварително мащабиране TTCR0B = 143; // генериране на квадратна вълна при 524HzЗа забавяне на тоновете и паузите между тях беше използвана проста функция за забавяне

void sleep (int ms) {int cnt; за (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Това отброява от 150, където всеки цикъл на NOP е приблизително.006667ms. Последното нещо, което прави кодът, е да премине през масивите, да генерира музиката и да премигне двата светодиода. Това се прави в непрекъснат цикъл for със следния код

const uint8_t freq PROGMEM = {… данни}; const uint8_t дължина PROGMEM = {… данни}; const uint8_t забавяне PROGMEM = {… данни};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); sleep (pgm_read_byte (& length [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // таймер за спиране TCCR0B = 0; sleep (pgm_read_word (& забавяне [cnt])); // таймер за стартиране TCCR0B | = (1 << CS01); // clk/8 предварително мащаб}}В масивите с честоти/дължини/забавяне има 156 елемента, този цикъл ги пресича. Пин PB3 и PB4 се превключват, така че те ще се редуват с всяка нота. Първият режим на сън е дължината на нотата, която свирим, след като настроим регистъра OCR0A на съответната стойност. Вторият сън е паузата между нотите, които свирим. В кода по -горе може да сте забелязали двете функции pgm_read_byte () и pgm_read_word (), както и ключовата дума PROGMEM. С вграден чип като attiny количеството на SRAM е много ограничено, в този случай само 64 байта. Масивите, които използваме за всички данни за честота/забавяне/дължина, са много по -големи от 64 байта и следователно не могат да се зареждат в паметта. Чрез използването на специалната директива PROGMEM avr-gcc тези големи масиви от данни не се зареждат в паметта, вместо това те се четат от флаш.

Стъпка 5: Оставяне на Marioman на свобода

Горното видео показва Marioman в действие. Средната консумация на енергия е около 25 mA, така че той може да мига и да издава шум около 10 часа, преди да източи литиевата монета. подходящ за това. Може да се добави превключвател, но има какво да се каже, за да го поддържате прост.

Препоръчано: