107-Генератор DTMF сигнала на ATtiny2313

Автор: | 04.04.2014

Продолжая с прошлой статьи тему несложных устройств, решил собрать генератор DTMF сигнала на все той же ATtiny2313. Кто не знает, DTMF (англ.Dual-Tone Multi-Frequency) – это двухтональный многочастотный аналоговый сигнал, используемый для набора телефонного номера. Читать Википедию.

Решение собрать такое устройство продиктовано желанием попробовать реализовать сложные аналоговые сигналы при помощи микроконтроллера. Никакого практического применения для данного устройства не планировалось, но может кому пригодится такое устройство? Пользуйтесь!

107-keypad_dtmf_schem.spl7 - Схема генератора DTMF тона на ATtiny2313


Работа устройства.

Устройство формирует сложный двухкомпонентный сигнал по факту нажатия кнопки на матричной клавиатура 4х4, стандартно используемой для таких целей. Я отлаживал устройство при помощи вот такой мембранной клавиатуры.

Кроме формирования тона кнопки, устройство дублирует нажатие клавиш выдачей соответствующих символов по UART (цифры и большие буквы латиницы). Еще устройство формирует тональную последовательность согласно посланной в UART строчке символов. Например, сообщение «4563245». Если нужно сделать паузу в тоновом озвучивании, применяется символ «P». Например «8P097P111P22P33». Параметры UART — Baud Rate: 9600, 8 Data, 2  Stopbit, без контроля четности


Немного теории.

Тон, формируемый по нажатию клавиши, является суммой двух синусоидальных сигналов с частотами, соответственно, строки и столбца нажатой клавиши (на схеме выше указаны эти частоты). Алгоритм формирования смешанного сигнала, довольно интересен, но не оригинален и велосипед я по новой не изобретал. Кому интересно как это делается, можно почитать соответствующий документ Atmel

doc1982.pdf - Апнот AVR314: DTMF Generator


Прошивка микроконтроллера.

Микроконтроллер может работать:
— как от внутреннего задающего генератора 8МГц (отпадает необходимость в кварцевом резонаторе – ножки нужно оставить «висеть в воздухе», но меньше точность выходных частот и больше зависимость от внешних факторов),
— так и от внешнего задающего кварцевого генератора (кварц на 8МГц) для более точной работы.
При выборе варианта задающего генератора прошивка остается одна и та же, разные будут только фьюзы (фьюзы аналогичны предыдущей статье, откуда они и взяты).
keypad_dtmf_out.hex - Прошивка DTMF генератора на ATtiny2313

106-fuse_8in.png - фьюзбиты для варианта внутреннего задающего генератора 8МГц (без внешнего кварца)
Фьюз-байты: Low=$E4, High=$DF, Ext=$FF
106-fuse_ext.png - фьюзбиты для варианта с внешним кварцевым задающим генератором с произвольной частотой
Фьюз-байты: Low=$FF, High=$DF, Ext=$FF
Напоминаю:Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Как программировать микроконтроллеры читаем в FAQ.

keypad_dtmf_out_source.zip - Исходник DTMF генератора


Теперь посмотрим, что у нас получилось.

Сигнал формируется при помощи ШИМ и для того чтобы придать ему нужную форму применяется RC-цепочка. В итоге, после RC-цепочки, получаем вот такой сигнал (нажата кнопка 6):

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

Смотрим спектр сигнала и убеждаемся в наличии двух отдельных частот (частота ШИМ ушла за пределы области отображения), значит все нормально – устройство работает как нужно.

Готовые решения

Для задач генерирования и декодирования DTMF-сигнала существуют готовые решения. Вот пару даташитов на эти микросхемы.

TP5089N.pdf - DTMF генератор
MT8870D.pdf - DTMF декодер


P.S. Жалко нет в ATtiny2313 АЦП — можно было еще и декодер DTMF забабахать! Но ничего, буду повторять на меге обязательно приделаю.

(Visited 1 778 times, 7 visits today)

There are 16 comments

Комментарии подгрузятся после небольшой паузы.