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 2 990 times, 1 visits today)

107-Генератор DTMF сигнала на ATtiny2313: 16 комментариев

  1. Mit

    Очень полезная штука.Не всегда получается найти специализированную микросхему генератора или декодера.А если ВЫ напишите прошивку для генератора и декодера например для ATmega8 (Распростроненный и компактный микроконтроллер)то очень многие любители по паять будут Вам крайне признательны и благодарны. НЕ придется больше топтать базары и магазины в поисках. Поставил контроллер, залил прошивку и получил что тебе надо.

  2. ramzes1903

    Добрый вечер Евгений.прошу вас к вашему генератору ДТМФ разработать -декодер DTMF.только полноценный.как на мт8870.если можно то реализовать на нем клавиатуру.то есть можно управлять как входным сигналом -так и с клавиатуры.наличие подтверждения опознания сигнала.не помешает юарт.очень прошу.в железе сразу испытаю .

  3. GetChiper Автор записи

    Есть идея сделать «все в одном», но вот пока не знаю когда дойдет дело до реализации.

  4. ramzes1903

    будем ждать ….

  5. akv

    Добрый вечер GetChiper. Протестировал генератор DTMF в Proteuse. Выдает такую же форму, что и на рисунке (графике) выше. Но этот полученный сигнал никак не хочет определяться декодером DTMF. Сам декодер я тестировал на записанном реальном сигнале (от микрофона) и всегда он всегда выдавал правильный результат. Я не хочу сказать, что DTMF сгенерирован неправельно, просто помогите разобраться в чем тут дело. Может частота генерации смещена или как-то влияет гребенка на сигнале. Самое интересное, что если ШИМ без RC подать на декодер, то тот определяет DTMF, но неправильно…

  6. GetChiper Автор записи

    Контроллер с кварцем? Возможен уход частоты если МК работает от внутреннего задающего генератора.
    Есть возможность посмотреть спектр выдаваемого сигнала? Соответствуют ли 2 выдаваемые частоты нажатой кнопке?

    Чтобы убрать гребенку можно увеличить резистор в RC цепочке (тот что 2к7). Но тогда уровень сигнала снизится значительно.

    Кстати, а для декодера хватает уровня сигнала? Наводит на мысль ошибочная но все же сработка без RC цепочки, когда уровень сигнала максимальный

  7. akv

    GetChiper, спасибо за советы. Проблема решена, DTMF определяется 100%. Все просто — неправильные фюзы :). Кстати сама идея формирования сигнала очень понравилась. Так можно любую форму сделать.
    Если будет время объединю генератор и декодер, для этого все есть.

  8. Vladimir_59

    Спасибо за схему и программу, заработало все сразу.
    Декодер DTMF у меня был собран раньше, тоже не ATtiny2313 с индикаторам 2х16. Все ОК. Правда на выходе я ставил дифференциальный трансформатор(т.к. сигнал передается через мультиплексор по НЧ каналам)и на обратном конце все декодируется нормально.

  9. Gauss

    GetChiper, а можешь выложить библиотеку элементов для splan, больно красиво схемы получаются)

  10. GetChiper Автор записи

    Библиотеки как таковой нет (все собираюсь собрать, да никак не выберусь этим заняться). Но все элементы можно взять в библиотеку из файлов проектов.

  11. biakss

    Полезная разработка!
    Применяю способ управления с помощью DTMF удаленными объектами по выделенной телефонной линии.

  12. Sidr

    GetChoper’y:
    Как говорил товарищ Саахов: «Всё правильно, бумага написана верно….»
    Только закралась ошибочка досадная.
    Так называемая RC-цепочка перед выходным транзистором, которую в кругах специалистов называют Фильтром Нижних Частот Первого Порядка, рассчитана из-рук-вон-плохо.
    Частота среза такого фильтра равна: Fср=1/2πRC, (Hz)
    Подставляем в формулу 2700(Ом) и 0,0000001(Фарад) и получаем 589 Гц.
    Меж тем как частоты DTMF сигнала лежат в области 697…1633 Гц, т.е. наш (вернее, ваш) фильтр подавляет даже частоты полезного сигнала. Поэтому-то отдельные граждане жалуются на нестабильность срабатывания DTMF-декодера.
    Как быть?
    Просто поставить фильтр с кошерной частотой среза и неплохо бы 2-го или 3-го порядка.
    Короче говоря, даёте мне ваш e-mail и получите файл с картинками.

  13. GetChiper Автор записи

    Мыло есть здесь http://www.getchip.net/o-proekte/

    Проблема с фильтром первого порядка в том, что спад у него плавный, а частота ШИМ не так далеко удалена от частот DTMF сигнала, соответственно приходится идти на компромисс — посильней прижать частоты ШИМ и не очень уменьшить полезный сигнал.

    По поводу фильтров N-го порядка — я с Вами согласен, было-бы лучше, но думаю это каждый сможет реализовать «под себя».

  14. Sidr

    Кстати, для желающих иметь DTMF-декодер советую:
    http://www.qrz.ru/schemes/contribute/constr/dtmf.shtml
    И связь с компьютером есть, можно по Терминальной программе запоминать DTMF-посылки пока винчестер не забьётся.

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