Предлагаю Вашему вниманию очень простой мультичастотный цифровой генератор звуковых частот. Этот генератор попросил меня сделать Valera-E. Ему он нужен для проверки низкочастотной части приемников тонального вызова, но я думаю такой генератор может сгодиться и для более широкого применения. Основная изюминка этого генератора – 15 независимых выходов. Генератор собран на микроконтроллере ATtiny2313 и в самом простом варианте (без внешнего кварцевого генератора) вообще не имеет обвязки!
Алгоритм программы простой и у Вас имеется возможность самому задавать выходные частоты для каждой линии, подставляя нужный коэффициент в таблицу констант (естественно, Вам придется перекомпилировать проект и прошить его в МК по новой).
Для правки алгоритма откройте проект в Algorithm Builder и переключитесь в режим таблицы (F12). Далее рассчитайте и заполните соответствующие строчки в разделе «Constants» для нужных линий.
Значение коэффициента записывается в столбец «Value» и рассчитывается по формуле:
top_x = fck/(f*484), где:
top_x – значение коэффициента
fck – частота задающего генератора МК
f – требуемая частота выходного сигнала
Например, если нужно получить на выходе B0 частоту 123Гц при частоте задающего генератора 8МГц, то расчет будет следующим:
top_B0 = 8000000/(123*484) = 134
Для упрощения расчетов я сделал exell-документ, который сам все сделает за Вас.
106-freq_calc.xls (1717 Загрузок)
При расчетах нужно учитывать несколько моментов:
— максимально возможная частота выходного сигнала составит fck/484
— в виду того, что рассчитываемый период – величина целая, то очевидно, невозможно получить выходную частоту абсолютно точно и чем больше необходимая частота, тем больше будет погрешность.
Для уменьшения погрешности необходимо увеличить частоту задающего генератора, установив кварц нужного номинала. Напомню, AVR микроконтроллеры работают с частотой задающего генератора вплоть до 20 МГц. Можно попробовать поставить и чуть больше – у меня одно устройство работает нормально с кварцем 24МГц.
По умолчанию (для кварца 8МГц) на линиях выставлены следующие частоты:
B7 – 8 Гц
B6 – 12 Гц
B5 – 423 Гц
B4 – 486 Гц
B3 – 550 Гц
B2 – 590 Гц
B1 – 718 Гц
B0 – 787 Гц
D6 – 972 Гц
D5 – 2066 Гц
D4 – 2754 Гц
D3 – 3305 Гц
D2 – 4132 Гц
D1 – 5509 Гц
D0 – 8264 Гц
Прошивка микроконтроллера
Микроконтроллер может работать:
— как от внутреннего задающего генератора 8МГц (отпадает необходимость в кварцевом резонаторе – ножки нужно оставить «висеть в воздухе», но меньше точность выходных частот и больше зависимость от внешних факторов),
— так и от внешнего задающего кварцевого генератора (с произвольной частотой) для более точной работы.
При выборе варианта задающего генератора прошивка остается одна и та же, разные будут только фьюзы.
106-main.zip (Одна Загрузка)
106-fuse_8in.png (2627 Загрузок)
Фьюз-байты: Low=$E4, High=$DF, Ext=$FF
106-fuse_ext.png (2570 Загрузок)
Фьюз-байты: Low=$FF, High=$DF, Ext=$FF
Напоминаю:Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Как программировать микроконтроллеры читаем в FAQ.
Выходной фильтр.
Выходной сигнал на линиях представляет из себя меандр, для придания ему формы более приближенной к пиле (если такое выражении вообще корректно), можно установить RC-цепочки вида: