Atmega8 мелодии. Звуковые сирены на МК AVR. Как это работает

Если в вашем автомобиле не установлена звуковая сирена, и вы все еще никак не решайтесь какую купить и установить, то данная статья именно для Вас. Зачем купить дорогие сигнализации если можно довольно простым образом собрать все это своими руками?

Представляю две такие простые схемы на микроконтроллерах AVR ATmega8 и Attiny2313, точнее схема одна, просто реализована для работы на этих двух микроконтроллерах. Кстати в архиве вы найдете два варианта прошивок для микроконтроллера Атмега8, из которых первый воспроизводит звук похожий на автомобильную сигнализацию, а второй звук похож на охранную сигнализацию здании(быстрый и резкий сигнал).

Все прошивки можете скачать ниже в архиве (они все подписаны), в архиве вы также найдете симуляцию схем в Proteus, а это значит что послушав все мелодии вы сами из списка сможете подобрать то что больше понравился.

Ниже схема сигнализации на Atmega8

Список применяемых радиокомпонентов в схеме Атмега8

U1- Микроконтроллер AVR 8-бит ATmega8-16PU, кол. 1,
R1- Резистор с номиналом 47 Ом, кол. 1,
R2, R3- Резистор с номиналом 270 Ом, кол. 2,
D2,D3-светодиод, кол. 2,
LS1-динамик, кол. 1,
S1- датчик.

А в схеме сигнализации на Attiny2313 изменен только мк.
U1- Микроконтроллер AVR 8-бит ATtiny2313-20PU, кол. 1.

Печатная плата для Atmega8 выглядит следующим образом:

Как видим схема очень простая, там всего один микроконтроллер, 3резистора, 2светодиода и еще один динамик. Вместо кнопки можете применить геркон, или другой контакт.

Принцип работы следующее. Как только мы подаем питание, сразу же загорается или начнет мигать(в зависимо от прошивки) светодиод(в схеме D3), и если датчика не будем трогать, то сигнализация будет молчать. Вот если сработал датчик то и сирена заработает, также будет мигать светодиод, но уже D2.

Если хотите чтобы при работе сигнализации моргал также фары автомобиля, то для этого нужно вывод микроконтроллера 24 РС1 подключить к реле через транзистор, а сам реле уже к фарам. Чтобы отключить сирену необходима выключить и снова включить прибор, или просто нажать на кнопку. Для работы микроконтроллера нужен внутренний генератор на 8МГЦ,

Если хотите как то усилить звук сигнализации, то с транзисторами можете собрать усилитель и подключить к схеме. Я именно так и сделал, только в данной схеме этого не изобразил.

Перейдем к схеме на Attiny 2313, в нем как и сказал раньше все те же детали и тот же принцип работы, только изменен МК, в следствие и подключенные выводы.Такой микроконтроллер работает от внутреннего генератора 4МГц, хотя можно и на 1Мгц прошить.

Ниже схема подключении уже на Attiny2313

Для данной мк написал всего одну версию прошивки, собрал все на какетной плате, проверил, все нормально работает.
А фьюзи нужны выставить ниже представленным образом:


Модуль работает с отформатированными в FAT16 SD-картами объемом не более 2 Гб и воспроизводит в любой последовательности звуковые фрагменты в форматах.ad4 или.wav. Предусмотрено питание внутренних цепей модуля от встроенного стабилизатора на 3.3 В, что очень удобно, поскольку это позволяет на сам модуль подавать напряжение 5 В. (Для этого нужно замкнуть площадку «5V» со средней площадкой на плате модуля, предварительно, разомкнув перемычку из припоя с площадкой «3.3V», как показано на Рисунке 2).

Управлять модулем можно как «вручную», так и с помощью микроконтроллера. В «ручном» режиме достаточно подключить к устройству кнопки, согласно схеме, представленной на Рисунке 3. В техническом описании модуля WTV020 можно найти другие варианты подключения, которые по функциональности мало чем отличаются от предложенной схемы.

Динамик подключается к выходам ШИМ или к встроенному 16-разрядному ЦАП. В последнем случае нужно подключать внешний ОУ и усилитель (Рисунок 4). При подключении к ШИМ каналу разрешается коммутировать динамики сопротивлением 8 Ом и мощностью до 0.5 Вт.

Назначение выводов модуля WTV020 показано в Таблице 1. Каналы двухпроводного интерфейса связи могут использоваться как для подключения кнопок, так и для внешнего микроконтроллера.

Таблица1.

Номер
вывода

Назначение

Аудио выход с ЦАП

Не используется

ШИМ выход

ШИМ выход

Не используется

Громкость «+» / CLK

Воспроизведение - пауза

Громкость «-» / DI

Не используется

Следующий файл

Не используется

Для визуального контроля были использованы LCD дисплей 2×16 и согласующий контроллер . Общая схема проигрывателя представлена на Рисунке 5. Микроконтроллер и модуль питаются напряжением 3.3 В, дисплей - 4 В, поскольку для выбранного LCD напряжения 3.3 В было недостаточно. На прием данных от МК эта разница напряжений никак не влияет. Внутренний стабилизатор модуля WTV020 автор решил не активировать.

Для передачи данных в модуль WTV020 используются линии CLK и DI. Согласно техническому описанию (Рисунок 6а), 16 бит данных должны передаваться с периодичностью 200 мкс, однако на практике эти значение нужно увеличить до 2 мс (Рисунок 6б).

Исходя из документации, после подачи питания рекомендуется на выход «Reset» модуля подать отрицательный импульс длительностью 5 мс, и по истечении 300 мс отправлять команды. Но это явная ошибка, поскольку время инициализации модуля WTV020 составляет порядка 600 мс. Если подавать команды раньше, чем через 600 мс после сброса, модуль их просто не воспринимает.

Список основных команд, принимаемых модулем, представлен в Таблице 2. Из таблицы видно, что максимальное количество воспроизводимых аудио файлов составляет 512, однако автор ограничился тридцатью. Громкость регулируется в 7 диапазонах. На практике с адреса FFF0 по FFF3 наблюдаются искажения звука, причем как с ШИМ-выхода, так и с ЦАП. Команды FFFE (Play/Pause) и FFFF (Stop/Play) - триггерные.

На экран LCD выводятся номер воспроизводимого файла и громкость в виде шкалы из 7 закрашенных прямоугольников. Фото готового устройства показано на Рисунке 8.

Демонстрационное видео:

Программное обеспечение МК, виртуальная модель Proteus и аудиофайл формата.ad4 -

Программа для конвертирования аудио записи в формат.ad4 -

Написал программный модуль, позволяющий добавить функцию воспроизведения мелодий или последовательностей звуков практически в любой проект на микроконтроллере AVR.

Особенности модуля:

Простая интеграция с готовым проектом

Задействован только 8-ми разрядный таймер т2, при этом остается возможность использовать его для опроса или формирования временных интервалов

Модуль настраивается практически на любую частоту тактового генератора

Высота нот задается в виде символических констант (С0, А2 и т.д) или в Герцах

Длительности задаются в стандартном виде (четверти, восьмые и т.д.) или в миллисекундах

Имеется возможность задавать темп воспроизведения мелодии и количество ее повторений

В процессе воспроизведения мелодия может быть поставлена на паузу


Подключение звукового модуля

1. Переписываем все файлы модуля (tone.h, sound.h, sound.c) в папку проекта.

2. Подключаем файл sound.c к проекту.

Для IAR `a – кликнуть правой кнопкой мышке в окне workspace и выбрать Add > Add Files…

Для WINAVR примерно то же самое, только sound.c нужно еще прописать в make файл:

SRC = $(TARGET).c sound.c

3. Включаем заголовочный файл sound.h в соответствующий модуль. Например, в main.c

#include "sound.h"

4. Задаем настройки модуля в файле sound.h

//если закомментировать - длительность нот будет

//рассчитываться из BPM`а заданного в мелодии

//если оставить, то из значения заданного ниже

//#define SOUND_BPM 24

//тактовая частота мк

#define SOUND_F_CPU 16U

//вывод микроконтроллера, на котором будет генерироваться звук

#define PORT_SOUND PORTB

#define PINX_SOUND 0

//количество заданных мелодий.

#define SOUND_AMOUNT_MELODY 4

5. Добавляем в sound.c свои мелодии и прописываем названия мелодий в массив melody.

Добавление мелодий

Мелодия представляет собой массив 16-ти разрядных чисел и имеет следующую структуру

BPM (количество четвертных нот в минуту) – это константа, используемая для расчета длительности нот и определяющая скорость воспроизведения мелодии.

BPM может принимать значения от 1 до 24, что соответствует 10 и 240 четвертным нотам в минуту соответственно.

Если длительность нот/звуков задается в миллисекундах, то BPM, прописанный в массиве, должен быть равен 1.

Если в заголовочном файле sound.h константа SOUND_BPM закомментирована, то длительность нот рассчитывается в процессе выполнения программы по BPM `у заданному в массиве. Если SOUND_BPM не закомментирована – длительность нот рассчитывается еще на этапе компиляции, исходя из значения этой константы, при этом все мелодии будут воспроизводиться в одинаковом темпе. Это ограничивает функционал, но позволяет сэкономить несколько байт кода.

Количество повторений. Может принимать значения 1 ... 254 и LOOP (255). LOOP - означает, что мелодия будет повторяться бесконечно, пока не будет подана команда SOUND_STOP или SOUND_PAUSE.

Длительность ноты – время в течение, которого генерируется заданный тон звука или выдерживается пауза. Может задаваться в ms, с помощью макроса ms(x), или в виде стандартных длительностей нот – восьмых, шестнадцатых и т.д. Ниже приведен список поддерживаемых длительностей. Если возникнет нужда в каких-то экзотических длительностях, их всегда можно добавить в файле tone.h

n1 - целая нота

n2 - половинная нота

n4 - четверть

n8 - восьмая

n3 - восьмая триоль

n16 - шестнадцатая

n6 - секстоль

n32 - тридцать вторая

Высота ноты задается с помощью символических констант описанных в файле tone.h, например C2, A1 и т.д. Также высота нот может задаваться в Герцах с помощью макроса f(x).

В программе есть ограничения на минимальную и максимальную частоту звука!

Маркер конца мелодии. Значение последнего элемента массива обязательно должно быть нулевым.

Использование звукового модуля

В начале main`a нужно обязательно вызывать функцию SOUND_Init(). Эта функция настраивает вывод микроконтроллера на выход, конфигурирует таймер Т2 и инициализирует переменные модуля.

Затем нужно установить флаг разрешения прерываний - __enable_interrupt(), ведь в модуле используется прерывания таймера Т2 по переполнению и совпадению.

После этого можно запускать воспроизведение мелодий.

Например, так:

SOUND_SetSong(2);

SOUND_Com(SOUND_PLAY); //воспроизвести мелодию

//установить указатель на 2-ю мелодию

//и запустить воспроизведение

SOUND_PlaySong(2);

Воспроизведение мелодии можно в любой момент остановить, подав команду SOUND_STOP.
Также мелодию можно поставить на паузу с помощью команды SOUND_PAUSE. Последующая подача команды SOUND_PLAY возобновляет воспроизведение мелодии с места, на котором произошла остановка.

В принципе данный функционал не особо нужен (это уж я просто навернул) и при работе с модулем достаточно функции SOUND_PlaySong(unsigned char numSong);

Файлы

Примеры использования звукового модуля вы можете скачать по ссылкам ниже. Схему рисовать не стал, потому что там все просто. подключен к выводу PB0, кнопка запуска мелодий подключена к выводу PD3. В проектах определено 4 мелодии. Нажатие на кнопку запускает каждый раз новую мелодию. Используется микроконтроллер atmega8535. Изначально хотел заморочиться на проект с четырьмя кнопками - PLAY, STOP, PAUSE и NEXT, но потом подумал, что это лишнее.

PS: Модуль не проходил расширенное тестирование и предоставляется “как есть“. Если есть какие-то рациональные предложения - давайте его доработаем.

Сидел я на днях думал, чего бы такого к своему скутеру "присобачить": музыка есть, подсветка есть, но чего то не хватает, и тут я вспомнил про сигнализацию, точно! Ведь как раз ее то у меня и нету! Предлагаю и вам тоже собрать сигнализацию для своего двухколесного – например велосипеда, а может быть и четырехколесного друга. Сигнализация собрана на микроконтроллере AVR ATmega8, проект так же повторен на микроконтроллере Attiny2313. Для варианты схемы на Atmega8 я написал три варианта прошивок, одна прошивка воспроизводит звук напоминающий сигнализацию автомобиля, а другой похож на сирену охранной сигнализации расположенной в здании (более быстрая и резкая мелодия). Все прошивки подписаны и лежат ниже в архиве, думаю вы в них разберетесь. Кроме того, в архиве содержится симуляция схем в протеусе, так что вы сможете прослушать звуки и подобрать свой вариант, который вам больше по душе.

Схема на Atmega8:

Как видите, ничего особенного, микроконтроллер, три резистора и два светодиод с динамиком. Вместо кнопки на схеме можно использовать например геркон, или другой контакт. Схема работает следующим образом, если подать питание то загорится (или замигает – в зависимости от варианта схемы) светодиод D3, если датчик не тронут, то сирена будет молчать. Как только сработает датчик сработает сигнализация и одновременно с этим будет мигать светодиод D2. Лично я вывод 24 PС1 через транзисторный ключ подключил к релюшке, а реле последовательно передней фаре скутера, так чтобы когда сработает сигнализация мигала фара скутера. Для того чтобы остановить сирену нужно выключить и включить схему или снова нажать на кнопку. Хочу заметить, что сигнал с контроллера можно усилить несколькими транзисторами собрав небольшой усилитель – что я в принципе и сделал, правда на схеме эту цепь не изобразил. Микроконтроллер работает от внутреннего генератора 8 МГц, фьюзы выставляем соответствующие.

Печатная плата для Atmega8 выглядит следующим образом:

Схема на Attiny2313 не сильно отличаются от первого варианта, просто там другие порты вывода.

Схема на Attiny2313:

Для этого варианта схемы я написал всего одну прошивку, с одним вариантом сигнала, схему на всякий случай собрал навесным монтажом и проверил работоспособность. Микроконтроллер работает от внутреннего генератора 4 МГц (можно прошить на 1 МГц), фьюзы при программировании выставляем следующие:

Так как под рукой не было живого контроллера Atmega8, я собрал схему на Attiny2313, схема заработала сразу, собирал схему навесным монтажом, ниже фото:

Ну и видео работы схемы, видео правда не самого лучшего качества и на нем не видно мигания светодиода, потому что частота кадров низкая.

Скачать проекты в , прошивки и файлы печатных плат вы можете ниже

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит

ATmega8-16PU

1 В блокнот
R1 Резистор

47 Ом

1 В блокнот
R2, R3 Резистор

270 Ом

2 В блокнот
Схема на Attiny2313
U1 МК AVR 8-бит
  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то