Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

000001Порадовать глаз различными миганием светодиодов мы уже умеем, а почему бы нам еще и не порадовать слух. В данном уроке мы рассмотрим как сгенерировать звук при помощи таймера AVR, вывести ее на динамик, и в конце концов сделаем некоторое подобие midi плеера. Чтож за дело…

Итак для сборки понадобится Atmega8, стандартная обвязка (кварц на 8МГц, 2 конденсатора на 22пФ) и пьезоизлучатель без внутреннего генератора, например HC0903A.

Можно, конечно, взять какой нибудь динамик 8Ом, но к нему придется городить усилитель. Нам же для образовательных целей достаточно будет простейшей схемы, которая без обвязки будет выглядеть так:

0000002

Достаточно просто, поэтому сразу переходим к теории. Чтобы создать звук нам нужно заставить колебаться мембрану динамика с определенной частотой. Каждой ноте соответствует своя частота, например ноте До 1 октавы, соответствует частота 261Гц. Т.е. дрыгая ногой микроконтроллера, подключенной к динамику, со скоростью 261 раз в секунду мы будем слышать звучание этой ноты. Для тех кто не силен в музыкальной теории, звук ближе от 1кГц и выше будет более писклявый, ниже 300Гц будет басить.

Перейдем к реализации. Как заставить ногу дрыгаться с такой скоростью? В этом нам поможет таймер, работу которого мы изучили в предыдущих уроках. В данном случае, нам пригодится timer1. Принцип формирования частоты таков: таймер тикает, до тех пор пока его значение не совпадет OCR1A. В в момент совпадения OCR1A, с текущим значением таймера происходит прерывание (выполняется функция) в котором текущее состояние PORTB.3 инвертируется (включается/отключается), таким образом мы получаем «пульсирующий» сигнал(мендр). Регулируя OCR1A мы изменяем частоту. Все, никаких сложностей.

timerb

Код исполняемый в прерывании:

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
PORTB.3=!PORTB.3;
}

Теперь, нужно соотнести каждой ноте частоты и по очереди их воспроизводить, т.е. создать массив со значениями, которые по очереди будем подставлять в  OCR1A. Прошивка далеко не идеальна, но вполне работоспособна. Доступна тут.

На последок видео, подобрал первое что в голову пришло: марио и танчики)))

Продолжение статьи

45 комментариев: Урок 7.1 Генерация звука при помощи AVR микроконтроллера

  • Добрый день. Я хотел сгенерировать звук с частотой 500 герц. Создавая проект в CV, настраиваю таймер: в clock value ставлю 8000000khz. Ставлю галочку в compare a match. И перевожу 500 в 1F4. Генерю. Пишу код PORTB.3=!PORTB.3;.А в итоге получается щелк с большой задержкой. Что делать? Больше кодов не писал.

  • Можете мне скинуть пример генерации одного звука?

  • Почитайте 5 урок, там все написано. Вам только и нужно настроить прерывание по совпадению. Не забывайте про фьюзы, если камень с завода не перепрошивался, то на нем будет 1МГц.

  • Дело в том что это все стимулировалось в протеусе. Я делаю все как в 5 уроке. Но результат такой и был «щелк с длинной задержкой». И нужно ли таймер нужно запускать в коде и останавливать?

  • про протеус можете забыть, он считает не в реальном времени, поэтому и результат соответствующий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Свежие записи
Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика