ATtiny2313 => Metronom
- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
ATtiny2313 => Metronom
Доброго времени суток всем котам
Возникла срочная необходимость собрать себе метроном, весь поиск упирался в аналоговые схемы с регулированием частоты тактов лишь на угад, то есть крутишь ручку, а какая точно частота не известно. Хотелось бы собрать такой девайс где будет отображаться на семи-сегментном индикаторе частота тактов, а выход, где идут собственно сами тики можно было бы подключить в любой микшер или усилитель. Я думаю целесообразно будет использовать такой контроллер как ATtiny2313, так как портов у него достаточно да и программка я так думаю будет не большая. Вот только как это реализовать ума не приложу.
Даташит - библия моя...


-
Ежик в тумане
- Встал на лапы
- Сообщения: 80
- Зарегистрирован: Ср ноя 28, 2007 09:42:28
А Вам нужна плавная регулировка частоты или можно дискретно регулировать? И чтобы это подключить к микшеру или усилителю желательно знать что там у них внутри....
Я так думаю что Вам все таки нужна плавная регулировка. Первое что пришло мне на ум это использование АЦП. Идея примерно такая: подавать с помощью переменного резистора на вход ацп напряжение от 0 до 5В и в зависимости от входного напряжения выставлять на выходе мк нужную частоту. Частоту формировать по таймеру и выводить на индикатор. Примерно как то так.
Я так думаю что Вам все таки нужна плавная регулировка. Первое что пришло мне на ум это использование АЦП. Идея примерно такая: подавать с помощью переменного резистора на вход ацп напряжение от 0 до 5В и в зависимости от входного напряжения выставлять на выходе мк нужную частоту. Частоту формировать по таймеру и выводить на индикатор. Примерно как то так.
В статье С.М.Рюмика в Радиоаматор 2004_09 есть прекрасный пример, только он на AT89C2051 но пограмма на Си так что перенести на тиньку можно безпроблем
ссылка на журнал http://files.lv-soft.info/Journals/Radioamator/2004/ra2004_04.djvu
ссылка на журнал http://files.lv-soft.info/Journals/Radioamator/2004/ra2004_04.djvu
- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
Вообще планируется так: будут 3 кнопки - "+1", "-1" и "Стоп/Старт/Выкл".
Я думал использовать как нить прерывание, метроном устроен так что какое значение на нем установленно, то столько ударов в минуту он и должен производить. Например заданно у него значение 60 - значит 60 ударов в минуту он должен производить причем ОЧЕНЬ ровно то есть как секундомер, допустим заданно у него 220 - соответсвенно 220 ударов в минуту. Планируется изменение от 1 до 250. Допусти при первом включении кнопками мы задаем ему значение, пусть начальное у него по умолчанию будет стоять 1, кнопками мы догоняем его до нужного,оно выводится на индикаторы, жмем старт. Может используя каким то образом прерывания можно будет хотя бы для начала реализовать тактировку.
Я думал использовать как нить прерывание, метроном устроен так что какое значение на нем установленно, то столько ударов в минуту он и должен производить. Например заданно у него значение 60 - значит 60 ударов в минуту он должен производить причем ОЧЕНЬ ровно то есть как секундомер, допустим заданно у него 220 - соответсвенно 220 ударов в минуту. Планируется изменение от 1 до 250. Допусти при первом включении кнопками мы задаем ему значение, пусть начальное у него по умолчанию будет стоять 1, кнопками мы догоняем его до нужного,оно выводится на индикаторы, жмем старт. Может используя каким то образом прерывания можно будет хотя бы для начала реализовать тактировку.
Даташит - библия моя...


- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
DIM4 писал(а):В статье С.М.Рюмика в Радиоаматор 2004_09 есть прекрасный пример, только он на AT89C2051 но пограмма на Си так что перенести на тиньку можно безпроблем
ссылка на журнал http://files.lv-soft.info/Journals/Radioamator/2004/ra2004_04.djvu
Ничего толкогого там не нашел. Но за ссылку пасипа.
Даташит - библия моя...


-
Ежик в тумане
- Встал на лапы
- Сообщения: 80
- Зарегистрирован: Ср ноя 28, 2007 09:42:28
- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
sachok писал(а):P.S. если можно то поделитесь настройками прерывания у меня никак не получается сделать прерывания с такой низкой частотой:)
Вот примерная схема и начальный вариант программы(использую часовой кварц для точности).
Что сделано:
1. Вывод значения Метронома на семи-сегментный индикатор.
2. С помощью прерывания проделана тактировка тиков. (отдельное спасибо QZ_)
Что предстоит:
1. Прикрутить кнопки и осуществить их чтение.
2. Программно и аппаратно решить проблему вывода звука.
Какие есть предложения?
- Вложения
-
- Metronome.rar
- (73.86 КБ) 281 скачивание
Даташит - библия моя...


- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
Нет. Кнопками мы меняем значение значение n.
Смысл такой
А что с выводом не так? Помоиму я на схеме все обозначил и в программе все прокомментировано.
Смысл такой
QZ_ писал(а):1. Если нада n тиков в 1 мин, то, тики будут идти с периодом 60/n сек. все. ставишь таймер время считать причем настраивешь так чтобы прерывания шли с периодом 60/n.
2. Если часовой кварц, то timer0 (с предделителем на 256) настраиваешь чтобы делал прерывание с периодом 60/255 сек
3. Тогда чтобы таймер прерывался каждые 60/255 сек надо в TCNT0 сунуть 255-30 = 225
4. В итоге: TCCR0A = 0; TCCR0B = 0x04; на прерываение пишешь TCNT0 = 225; count++;
5. n - число тиков в минуту, таймер делает прерывание и добавляет count каждые 60/255 сек, т. е. если выставим n=1, то (по идее) не будет тика пока count не наберет 255, т.е. нада if (count == (256 - n)){ count = 0; beep();}
А что с выводом не так? Помоиму я на схеме все обозначил и в программе все прокомментировано.
Даташит - библия моя...


- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
Вобщем посидел я тут подумал, посоветовался с умными людми ( QZ_ ).
Возможны 2 варианта. Итак.
Вариант первый.
Когда то давно собирал я в радио кружке вешь которая назвалась "Имитатор подпрыгивающего шарика". Устройство было предельно просто состояло оно из 2-х конденсаторов, 2-х транзисторов, кнопки и источника питания. звук у него был как раз таким какой мне нужен. Подумав над схемой я пришел вот к такому схемному решению. Я так думаю конденсатор надо подобрать либо очень маленькой емкости либо вообще его из схемы исключить. А в программе просто в функции beep включать на некоторое время на выходе порта куда подключено это устройство, то есть делать на выход +5в. Что скажете?
Возможны 2 варианта. Итак.
Вариант первый.
Когда то давно собирал я в радио кружке вешь которая назвалась "Имитатор подпрыгивающего шарика". Устройство было предельно просто состояло оно из 2-х конденсаторов, 2-х транзисторов, кнопки и источника питания. звук у него был как раз таким какой мне нужен. Подумав над схемой я пришел вот к такому схемному решению. Я так думаю конденсатор надо подобрать либо очень маленькой емкости либо вообще его из схемы исключить. А в программе просто в функции beep включать на некоторое время на выходе порта куда подключено это устройство, то есть делать на выход +5в. Что скажете?
- Вложения
-
- ver1.PNG
- (9.03 КБ) 512 скачиваний
Даташит - библия моя...


- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
Вариант второй (предложенный QZ_).
Идея заключается в программной реализации звукового сигнала на частоте 1000 Гц
Предложенный им код.
В схема с выхода порта через ограничивающее сопротивление можно сразу выводить либо на наушники либо подклбчать к усилителю. Что скажете?
Идея заключается в программной реализации звукового сигнала на частоте 1000 Гц
QZ_ писал(а):236 = 118*2.
118 это число включений ноги за время beep'а.
При таком числе включений будет частота ~1000 Гц.
Вот тока бип будет всего 0.18 сек по времени.
Впринципе можно чуть больше сделать.
Предложенный им код.
Код: Выделить всё
void beep() // Звуковой тик
{
tick = 236;
}
main()
{
init();
Dig_init();
while(1)
{
if (count == n)
{
count = 0;
beep();
}
if (tick != 0)
{
tick--;
PORTX.X ^= 1;
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
#asm("nop")
}
else PORTX.X = 0;
}
}
В схема с выхода порта через ограничивающее сопротивление можно сразу выводить либо на наушники либо подклбчать к усилителю. Что скажете?
Даташит - библия моя...

