Продолжая с прошлой статьи тему несложных устройств, решил собрать генератор DTMF сигнала на все той же ATtiny2313. Кто не знает, DTMF (англ.Dual-Tone Multi-Frequency) – это двухтональный многочастотный аналоговый сигнал, используемый для набора телефонного номера. Читать Википедию.
Решение собрать такое устройство продиктовано желанием попробовать реализовать сложные аналоговые сигналы при помощи микроконтроллера. Никакого практического применения для данного устройства не планировалось, но может кому пригодится такое устройство? Пользуйтесь!
107-keypad_dtmf_schem.zip (2172 Загрузки)
Работа устройства.
Устройство формирует сложный двухкомпонентный сигнал по факту нажатия кнопки на матричной клавиатура 4х4, стандартно используемой для таких целей. Я отлаживал устройство при помощи вот такой мембранной клавиатуры.
Кроме формирования тона кнопки, устройство дублирует нажатие клавиш выдачей соответствующих символов по UART (цифры и большие буквы латиницы). Еще устройство формирует тональную последовательность согласно посланной в UART строчке символов. Например, сообщение «4563245». Если нужно сделать паузу в тоновом озвучивании, применяется символ «P». Например «8P097P111P22P33». Параметры UART — Baud Rate: 9600, 8 Data, 2 Stopbit, без контроля четности
Немного теории.
Тон, формируемый по нажатию клавиши, является суммой двух синусоидальных сигналов с частотами, соответственно, строки и столбца нажатой клавиши (на схеме выше указаны эти частоты). Алгоритм формирования смешанного сигнала, довольно интересен, но не оригинален и велосипед я по новой не изобретал. Кому интересно как это делается, можно почитать соответствующий документ Atmel
doc1982.pdf (2862 Загрузки)
Прошивка микроконтроллера.
Микроконтроллер может работать:
— как от внутреннего задающего генератора 8МГц (отпадает необходимость в кварцевом резонаторе – ножки нужно оставить «висеть в воздухе», но меньше точность выходных частот и больше зависимость от внешних факторов),
— так и от внешнего задающего кварцевого генератора (кварц на 8МГц) для более точной работы.
При выборе варианта задающего генератора прошивка остается одна и та же, разные будут только фьюзы (фьюзы аналогичны предыдущей статье, откуда они и взяты).
keypad_dtmf_out.zip (2176 Загрузок)
106-fuse_8in.png (2650 Загрузок)
Фьюз-байты: Low=$E4, High=$DF, Ext=$FF
[
106-fuse_ext.png (2593 Загрузки)
Фьюз-байты: Low=$FF, High=$DF, Ext=$FF
Напоминаю:Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Как программировать микроконтроллеры читаем в FAQ.
Теперь посмотрим, что у нас получилось.
Сигнал формируется при помощи ШИМ и для того чтобы придать ему нужную форму применяется RC-цепочка. В итоге, после RC-цепочки, получаем вот такой сигнал (нажата кнопка 6):
По всей кривой полезного сигнала мы наблюдаем гребенку высокой частоты (частота выше слышимой, так что шума она не будет создавать) – это работа RC-цепочки. Можно линию сделать более плавной, увеличив емкость конденсатора или сопротивление резистора, но в этом случае значительно уменьшиться размах полезного сигнала.
Смотрим спектр сигнала и убеждаемся в наличии двух отдельных частот (частота ШИМ ушла за пределы области отображения), значит все нормально – устройство работает как нужно.
Готовые решения
Для задач генерирования и декодирования DTMF-сигнала существуют готовые решения. Вот пару даташитов на эти микросхемы.
TP5089N.pdf (Одна Загрузка)
MT8870D.pdf (2160 Загрузок)
P.S. Жалко нет в ATtiny2313 АЦП — можно было еще и декодер DTMF забабахать! Но ничего, буду повторять на меге обязательно приделаю.