Відтворення однотональний мелодій за допомогою avr - мікроконтролери та технології

Формування звуку за допомогою мікроконтролера не складає великих труднощів. Досить взяти за основу програму миготливого світлодіода і підключити замість нього динамік, а в самій програмі поміняти константу затримки таким чином, щоб частота на виході підвищилася до звукового діапазону. Людина може почути звуки з частотою від 50Hz до 15kHz. Світлодіод в одному з наших уроків блимає з частотою 4Hz, а якщо зменшити час затримки в 1000 разів, то можна отримати частоту на виході 4Hz.

Завдання: розробимо програму, за допомогою якої мікроконтролер Atmega8 буде відтворювати просту однотональний мелодію.

Відтворення однотональний мелодій за допомогою avr - мікроконтролери та технології

Музичний ряд ділиться на октави, кожна октава ділиться на 12 нот, це 7 основних (До, Ре, Мі, Фа, Соль, Ля, Сі) і п'ять додаткових (До дієз, Ре дієз, Фа дієз, Сіль дієз, Ля дієз) . Частоти двох сусідніх нот відрізняються один від одного в однакову кількість разів, а частоти двох однойменних нот двох сусідніх октав відрізняються в 2 рази.

Для формування звуку використовуємо шестнадцатіразрядний таймер / счетчік1, він буде працювати в режимі СТС (скидання при збігу), для управління коефіцієнтом перерахунку використовуємо регістр ICR1. Режим СТС дозволяє здійснювати безпосереднє управління частотою сигналу. Для активізації цього режиму біти WGM13 і WGM12 встановлюємо в одиницю.

Для того щоб в режимі СТС на виході формувався періодичний сигнал, необхідно налаштувати вихід OC1A таким чином, щоб при кожному збігу сигнал на виході міняв своє значення на протилежне. Для цього встановимо біт COM1A1 в одиницю і підключимо до нього динамік, а також налаштовуємо порт PB1 на вихід.

Частота сигналу на виході OC1A визначається за формулою:

де N - коефіцієнт перерахунку попереднього подільника, замість OCR1A в нашому випадку ICR1.

Крім нот будь-яка мелодія містить паузи, це проміжок часу коли жоден звук не звучить. за паузи відповідає функція Set_temp. вона просто в потрібний час відключає таймер / лічильник.

Нижче представлений вихідний код з докладним описом, якщо щось не зрозуміло задавайте питання. На одному з наступних завдань розберемо як можна зробити синтезатор голосу.

Схожі статті