Съдържание:
- Стъпка 1: Материали и изработка
- Стъпка 2: Запояване на AVR към светодиодите и високоговорителя
- Стъпка 3: Програмиране на Attiny13a
- Стъпка 4: Създаване на фърмуера за Marioman
- Стъпка 5: Оставяне на Marioman на свобода
Видео: Мига, пее, Marioman: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:55
Използвайте 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 по този начин улеснява свързването към високоговорителя (второ изображение), тъй като връзките са на двата долни пина. той е приложен.
Стъпка 3: Програмиране на Attiny13a
Има много различни опции за програмиране на AVR -та. или прикрепете проводници към женския контакт и ги включете в макет или още по -добре вземете евтин адаптер за програмиране на AVR като тозиhttps://www.sparkfun.com/commerce/product_info.php? products_id = 8508 заедно с 3x2 мъжки заглавки за свързване на щепсела.
Стъпка 4: Създаване на фърмуера за 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 часа, преди да източи литиевата монета. подходящ за това. Може да се добави превключвател, но има какво да се каже, за да го поддържате прост.
Препоръчано:
StickC M5Stack LED мига: 7 стъпки
StickC M5Stack LED Blink: В този проект ще се научим как да свързваме и правим LED Blink с помощта на модул M5StickC ESP32
Малък светодиод мига Фигура: 6 стъпки
Малка LED мигаща фигура: Можете лесно да мигате светодиода с таймер arduino или 555. Но можете да направите мигаща верига без такива интегрални схеми. Това е проста мигаща фигура, направена от отделни части
Ремонт на безжични слушалки Creative Tactic3D Rage (синьо мига, без сдвояване, смяна на батерията): 11 стъпки
Ремонт на безжични слушалки Creative Tactic3D Rage (синьо мига, без сдвояване, смяна на батерията): Това ръководство в снимки е за тези, които притежават Creative слушалки, които са загубили сдвояването с USB предавателя и повторното сдвояване не работи, тъй като слушалките бавно мигат синьо и не реагира повече на бутоните. В това състояние не можете да
Контролен светодиод мига с потенциометър и OLED дисплей: 6 стъпки
Контролирайте мигащия светодиод с потенциометър и OLED дисплей: В този урок ще научим как да контролираме мигащия светодиод с потенциометър и да показваме стойността на честотата на импулсите на OLED дисплея. Гледайте демонстрационен видеоклип
Програмиране на Arduino чрез мобилни устройства -- Arduinodroid -- Arduino Ide за Android -- Мига: 4 стъпки
Програмиране на Arduino чрез мобилни устройства || Arduinodroid || Arduino Ide за Android || Blink: Моля, абонирайте се за канала ми в YouTube за още видеоклипове …… Arduino е платка, която може да се програмира директно през USB. Той е много прост и евтин за колежи и училищни проекти или дори за прототип на продукти. Много от продуктите първо се основават на него за