Страница 1 из 3

ATtiny2313 => Metronom

Добавлено: Ср янв 14, 2009 13:06:00
VenomXP
Доброго времени суток всем котам :)) Возникла срочная необходимость собрать себе метроном, весь поиск упирался в аналоговые схемы с регулированием частоты тактов лишь на угад, то есть крутишь ручку, а какая точно частота не известно. Хотелось бы собрать такой девайс где будет отображаться на семи-сегментном индикаторе частота тактов, а выход, где идут собственно сами тики можно было бы подключить в любой микшер или усилитель. Я думаю целесообразно будет использовать такой контроллер как ATtiny2313, так как портов у него достаточно да и программка я так думаю будет не большая. Вот только как это реализовать ума не приложу.

Добавлено: Ср янв 14, 2009 19:27:07
Ежик в тумане
А Вам нужна плавная регулировка частоты или можно дискретно регулировать? И чтобы это подключить к микшеру или усилителю желательно знать что там у них внутри....
Я так думаю что Вам все таки нужна плавная регулировка. Первое что пришло мне на ум это использование АЦП. Идея примерно такая: подавать с помощью переменного резистора на вход ацп напряжение от 0 до 5В и в зависимости от входного напряжения выставлять на выходе мк нужную частоту. Частоту формировать по таймеру и выводить на индикатор. Примерно как то так.

Добавлено: Ср янв 14, 2009 20:36:51
DIM4
В статье С.М.Рюмика в Радиоаматор 2004_09 есть прекрасный пример, только он на AT89C2051 но пограмма на Си так что перенести на тиньку можно безпроблем

ссылка на журнал http://files.lv-soft.info/Journals/Radioamator/2004/ra2004_04.djvu

Добавлено: Ср янв 14, 2009 20:45:51
VenomXP
Вообще планируется так: будут 3 кнопки - "+1", "-1" и "Стоп/Старт/Выкл".

Я думал использовать как нить прерывание, метроном устроен так что какое значение на нем установленно, то столько ударов в минуту он и должен производить. Например заданно у него значение 60 - значит 60 ударов в минуту он должен производить причем ОЧЕНЬ ровно то есть как секундомер, допустим заданно у него 220 - соответсвенно 220 ударов в минуту. Планируется изменение от 1 до 250. Допусти при первом включении кнопками мы задаем ему значение, пусть начальное у него по умолчанию будет стоять 1, кнопками мы догоняем его до нужного,оно выводится на индикаторы, жмем старт. Может используя каким то образом прерывания можно будет хотя бы для начала реализовать тактировку.

Добавлено: Ср янв 14, 2009 21:47:27
VenomXP
DIM4 писал(а):В статье С.М.Рюмика в Радиоаматор 2004_09 есть прекрасный пример, только он на AT89C2051 но пограмма на Си так что перенести на тиньку можно безпроблем

ссылка на журнал http://files.lv-soft.info/Journals/Radioamator/2004/ra2004_04.djvu


Ничего толкогого там не нашел. Но за ссылку пасипа. :))

Добавлено: Ср янв 14, 2009 22:32:38
Ежик в тумане
Я бы возможно сделала так :при каждом нажатии кнопки можно менять настройки таймера, от которых зависит значение формируемой частоты... нажатием другой кнопки можно запускать таймер...

Добавлено: Ср янв 14, 2009 22:39:29
VenomXP
Нее... Это как то ацко... Я тут с прерываниями уже почти доделал... Лучше подскажите как мне эти звуковые тики получить из тиньки... Да еще такие чтобы можно было в наушники этот сигнал отправить или в усилок, а то я ваще чет туплю :shock:

Добавлено: Ср янв 14, 2009 23:19:44
sachok
А в чем проблема? на выводе тини будет сигнал нужной частоты амплитудой около 5 В. Нужно уменьшить ставим резистор.....
P.S. если можно то поделитесь настройками прерывания у меня никак не получается сделать прерывания с такой низкой частотой:)

Добавлено: Чт янв 15, 2009 13:21:26
VenomXP
sachok писал(а):P.S. если можно то поделитесь настройками прерывания у меня никак не получается сделать прерывания с такой низкой частотой:)

Вот примерная схема и начальный вариант программы(использую часовой кварц для точности).

Что сделано:

1. Вывод значения Метронома на семи-сегментный индикатор.
2. С помощью прерывания проделана тактировка тиков. (отдельное спасибо QZ_)

Что предстоит:

1. Прикрутить кнопки и осуществить их чтение.
2. Программно и аппаратно решить проблему вывода звука.

Какие есть предложения?

Добавлено: Чт янв 15, 2009 15:32:32
sachok
Кнопками я так понимаю нужно менять значение регистра TCNT0. только нужно продумать вывод на индикатор.

Добавлено: Чт янв 15, 2009 15:49:50
VenomXP
Нет. Кнопками мы меняем значение значение 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();}

А что с выводом не так? Помоиму я на схеме все обозначил и в программе все прокомментировано.

Добавлено: Чт янв 15, 2009 18:43:55
sachok
ага. что то понял. а beep это просто сигнализатор нажатия на кнопку или это то устройство которое должно тикать. если последнее то можно на порт выдавать просто лог.1 тоесть +5В а потом можно зумер или лучше поставить мультивибратор на 2 транзисторах.

Добавлено: Чт янв 15, 2009 20:24:40
VenomXP
beep - это то устройство которое должно тикать.

n - это значение метронома. Устанавливается кнопками.

А вот как реализовать устройство тикающее я незнаю. Мне нужно выводить этот тик либо в наушники либо в усилитель.

Добавлено: Чт янв 15, 2009 20:27:56
sachok
можно с помощью +5В управлять транзистором, а там далее что угодно... можно пробовать делать на ножке во время тика ШИМ сигнал тогда можно через резистивный делитель на усилитель.

Добавлено: Пт янв 16, 2009 16:27:46
VenomXP
Вобщем посидел я тут подумал, посоветовался с умными людми ( QZ_ ).

Возможны 2 варианта. Итак.

Вариант первый.
Когда то давно собирал я в радио кружке вешь которая назвалась "Имитатор подпрыгивающего шарика". Устройство было предельно просто состояло оно из 2-х конденсаторов, 2-х транзисторов, кнопки и источника питания. звук у него был как раз таким какой мне нужен. Подумав над схемой я пришел вот к такому схемному решению. Я так думаю конденсатор надо подобрать либо очень маленькой емкости либо вообще его из схемы исключить. А в программе просто в функции beep включать на некоторое время на выходе порта куда подключено это устройство, то есть делать на выход +5в. Что скажете?

Добавлено: Пт янв 16, 2009 16:34:10
МитяРа
В принципе - идея правильная, но вот реализация - не очень..
При включении по второй схеме не хватит выходного тока порта МК, что-бы "запитать схему..
Надо поставить в схему транзистор, который будет как ключ подавать напряжение на схему..
А вот уже этот транзистор вкл/выключать с МК...

Добавлено: Пт янв 16, 2009 16:36:59
VenomXP
Вариант второй (предложенный QZ_).
Идея заключается в программной реализации звукового сигнала на частоте 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;
       
    }
}


В схема с выхода порта через ограничивающее сопротивление можно сразу выводить либо на наушники либо подклбчать к усилителю. Что скажете?

Добавлено: Пт янв 16, 2009 17:02:29
akl
"...Идея заключается в программной реализации звукового сигнала на частоте 1000 Гц..."???????????
Всегда думал, что звук метронома должен быть "немузыкальным", поэтому
"Вариант первый.
..."Имитатор подпрыгивающего шарика"... ИМХО более подходящий.

Добавлено: Пт янв 16, 2009 17:15:35
МитяРа
А может поступить проще - собрать схему "..шарика", посмотреть осцилом, какая форма одного периода сигнала, а потом постараться то-же самое программно сформировать...

Добавлено: Пт янв 16, 2009 19:09:43
sachok
Шарик мне тоже нравится. Только посмотрите на схемы включения там кажись ошибка. эмиттер VT1 на + питания, а не на корпус. просто питание не правильно нарисовано от МК. Транзистор я думаю обязательно нужно ставить что бы МК остался цел.