ATtiny2313 => Metronom

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

МитяРа писал(а):А может поступить проще - собрать схему "..шарика", посмотреть осцилом, какая форма одного периода сигнала, а потом постараться то-же самое программно сформировать...


Вот эта идея мне нравится. Собрать эту схему не проблема. Вот только осцилла у меня нет. Может кто поможет с этим?

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


Да-да :) Там точно ошибка. Спасибо что указали.
Даташит - библия моя...
Изображение
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Ща я пойду собиру.
Я не Сашок!!!
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

sachok писал(а):Ща я пойду собиру.

Ога. Еси че выложи форму сигнала, интересно что там :))
Даташит - библия моя...
Изображение
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Вот тут проблемка:( нет у меня МП25 (МП нету в общем) поставил КТ361 не заработало так что завтра переделаю и посмотрю что там, а то на ночь глядя осциллограф доставать не охота.
Я не Сашок!!!
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

Ога. :) Ладно. Вот только что то мне кажется что возникнут сложности с созданием такого же сигнала. Хотя... Завтра будет видно.
Даташит - библия моя...
Изображение
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Извините. Проблемка у меня никак КТ не хотят работать. Не могу сейчас ничем помочь. Если кто то настроит схему на КТ тогда смогу посмотреть что там, сейчас имею очень мало времени.
Я не Сашок!!!
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

ДА лан не проблема, я тут вспомнил что у меня на кафедре стоят осциллы... Соберу пойду посмотрю... Заодно может че там подскажут :)
Даташит - библия моя...
Изображение
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

Тут мне пришла в голову еще идея :) . Запихнуть в этот девайс еще и Камертон, устройство для настройки инструментов, выдающее идеальную ноту Ля частота которой составляет 440 Гц. Ну думаю это будет не сложно рализовать при помощи ШИМ'а.
Даташит - библия моя...
Изображение
Аватара пользователя
InvisibleKid
Грызет канифоль
Сообщения: 265
Зарегистрирован: Пт май 09, 2008 13:21:38

Сообщение InvisibleKid »

Отличная тема! Вчера решил как раз мероном собрать... Вот только в контроллерах не разбираюсь.

Я думаю, что нужны не только кнопки +/-1 bpm, но и +/- 10! т.к. иначе слишком долго и нудно переключать будет. Или кнопку сделать, переключающую "цену" нажатия кнопок "+" и "-" на 1, 10 и 50. Еще было бы здорово, если бы метроном пикал на каждый пятый клик (Обозначает первую долю в такте в размере 4/4)
А если возможно сделать не только на пятый ( а на 2, 3,... 12)... То вообще здорово :) Но это сложная программа, наверное.
Аватара пользователя
DIM4
Родился
Сообщения: 16
Зарегистрирован: Пн янв 21, 2008 20:21:02
Контактная информация:

Сообщение DIM4 »

если использовать компилятор mikroC PRO for AVR то там есть библиотека sound с помощью которой можно вывести на любую ножку мк сигнал нужной частоты и длительности
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

InvisibleKid писал(а):Отличная тема! Вчера решил как раз мероном собрать... Вот только в контроллерах не разбираюсь.

Я думаю, что нужны не только кнопки +/-1 bpm, но и +/- 10! т.к. иначе слишком долго и нудно переключать будет. Или кнопку сделать, переключающую "цену" нажатия кнопок "+" и "-" на 1, 10 и 50. Еще было бы здорово, если бы метроном пикал на каждый пятый клик (Обозначает первую долю в такте в размере 4/4)
А если возможно сделать не только на пятый ( а на 2, 3,... 12)... То вообще здорово :) Но это сложная программа, наверное.

Все будет не пережевывайте :) Осталось совсем чуток... На счет долей знаю, Муз образование есть :))
DIM4 писал(а):если использовать компилятор mikroC PRO for AVR то там есть библиотека sound с помощью которой можно вывести на любую ножку мк сигнал нужной частоты и длительности

Спасибо за информацию. Будем смотреть. +)
Даташит - библия моя...
Изображение
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Сообщение Neekeetos »

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

А просто короткий прямоугольный импульс не подходит разьве? Это ведь и есть щелчек по сути. Кроме того что ты с тиками разбираешься когда у тебя сама основная функция не очень работает? Ты же задаешь период частоты в то время как реально нужно саму частоту, в результате имея всего 256 значений периода ты врятле можешь точно отсчитать нужную частоту, будет погрешность. В принципе можешь просто переделать свой код немного изменив прерывание и условие тика вот так :

Код: Выделить всё

interrupt [TIM0_OVF] void timer0_ovf_isr(void) // Считаем длительности каждого тика. Читаем состояние кнопок и выводим значение n на индикатор
{
   TCNT0 = 225;
   
   count+=freq;
   read_but();
   Send();
}


и условие из основной функции:

Код: Выделить всё

if (count > 32000) 
      {
         count -= 32000;
         beep();         
      }


В этом случае ты сможешь напрямую задавать частоту с помощью переменной Freq, а шаг изменения частоты будет фиксированый и равен Ftimer/32000 а генерируемая частота в таком случае будет F=Ftimer*Freq/32000. Советую выбрать частоту таймера и число вместо 32000 чтобы шаг попадал в нужную тебе сетку, тоесть 1 bpm =1/60 Hz ~ 0,016666(6).
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

Neekeetos писал(а):В этом случае ты сможешь напрямую задавать частоту с помощью переменной Freq, а шаг изменения частоты будет фиксированый и равен Ftimer/32000 а генерируемая частота в таком случае будет F=Ftimer*Freq/32000. Советую выбрать частоту таймера и число вместо 32000 чтобы шаг попадал в нужную тебе сетку, тоесть 1 bpm =1/60 Hz ~ 0,016666(6).


Не очень понял, можно наглядный пример в виде кода?
Даташит - библия моя...
Изображение
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Сообщение Neekeetos »

VenomXP писал(а):
Neekeetos писал(а):В этом случае ты сможешь напрямую задавать частоту с помощью переменной Freq, а шаг изменения частоты будет фиксированый и равен Ftimer/32000 а генерируемая частота в таком случае будет F=Ftimer*Freq/32000. Советую выбрать частоту таймера и число вместо 32000 чтобы шаг попадал в нужную тебе сетку, тоесть 1 bpm =1/60 Hz ~ 0,016666(6).


Не очень понял, можно наглядный пример в виде кода?

Так ведь я в предыдущем посте нарисовал что требуется заменить, все остальное тоже самое. Заместо переменной n частота будет задаваться в моем примере переменной freq которую надо будет гдето объявить и записать в нее значение требуемой частоты.
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

Neekeetos писал(а):В этом случае ты сможешь напрямую задавать частоту с помощью переменной Freq, а шаг изменения частоты будет фиксированый и равен Ftimer/32000 а генерируемая частота в таком случае будет F=Ftimer*Freq/32000. Советую выбрать частоту таймера и число вместо 32000 чтобы шаг попадал в нужную тебе сетку, тоесть 1 bpm =1/60 Hz ~ 0,016666(6).


То есть в freq будет содержатся число сообщающее количество ударов в минуту, ну или количество bpm, так?

Еще вопрос что за Ftimer и откуда появилось значение 32000?

Советую выбрать частоту таймера и число вместо 32000 чтобы шаг попадал в нужную тебе сетку, то есть 1 bpm =1/60 Hz ~ 0,016666(6).[
Вот вы этой фразе ниче не понял, может вы какое то слово забыли или знак препинания, что нужно выбрать, вместо чего и причем здесь число 32000?
Даташит - библия моя...
Изображение
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Сообщение Neekeetos »

VenomXP писал(а):
Neekeetos писал(а):В этом случае ты сможешь напрямую задавать частоту с помощью переменной Freq, а шаг изменения частоты будет фиксированый и равен Ftimer/32000 а генерируемая частота в таком случае будет F=Ftimer*Freq/32000. Советую выбрать частоту таймера и число вместо 32000 чтобы шаг попадал в нужную тебе сетку, тоесть 1 bpm =1/60 Hz ~ 0,016666(6).

То есть в freq будет содержатся число сообщающее количество ударов в минуту, ну или количество bpm, так?


если сделаешь шаг равным 1bpm то во freq будет частота в bpm

VenomXP писал(а):Еще вопрос что за Ftimer и откуда появилось значение 32000?
Советую выбрать частоту таймера и число вместо 32000 чтобы шаг попадал в нужную тебе сетку, то есть 1 bpm =1/60 Hz ~ 0,016666(6).[
Вот вы этой фразе ниче не понял, может вы какое то слово забыли или знак препинания, что нужно выбрать, вместо чего и причем здесь число 32000?


Число задает порог переполнения переменной count. Частота ее переполнений и есть выходная частота которую ты хочешь получить.
Повторяться не буду, опишу вкратце как все рассчитать. Назовем число 32000 словом ЧИСЛО. Физическую частоту прерываний таймера - ЧАСТОТА_ТАЙМЕРА (тупой пример- если у тебя кварц на 4М и делитель перед таймером на 2, а сам таймер 8 битный и считает до 256 то она будет равна 7812,5Гц ). Частота которую ты хочеш получить на выходе - ЧАСТОТА , переменная freq ее задает из программы. Далее формула из предыдущих постов будет выглядеть так :
ЧАСТОТА = ЧАСТОТА_ТАЙМЕРА*freq/ЧИСЛО
к примеру ты хочешь чтобы freq задавало частоту с точностью до 1bpm, это 0,016666Гц, таймер возьмем тот что в примере выше - у которого прерывания идут с частотой 7812,5Гц, ищем число, такое чтобы был шаг 1bpm:
0,016666Гц = 7812,5Гц * 1( freq=1 те 1bpm)/ЧИСЛО
ЧИСЛО= 7812,5/0,0166666 = 468750 , число как видно не влезает в тип int, у которого до 65535 только /для беззнакового/, меняем делитель таймера, чтобы частота прерываний была еще в 16 раз меньше, тоесть прескалер делается не 2 а 32, тогда ЧАСТОТА_ТАЙМЕРА = 488,28125Гц

ЧИСЛО = 488,28125 / 0,01666666 = 29296,875, округляя - 29297
из за округления отклонение от заданного bpm будет 0,000427% в меньшую сторону.
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

Что то я пробовал все это посчитать для Часового кварца 32768 Гц, ничего у меня не выходит, может чего то не понимаю, помогите, как будут выглядеть расчеты для него?
Даташит - библия моя...
Изображение
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Сообщение Neekeetos »

VenomXP писал(а):Что то я пробовал все это посчитать для Часового кварца 32768 Гц, ничего у меня не выходит, может чего то не понимаю, помогите, как будут выглядеть расчеты для него?


Если таймер тактируется без делителя от часов МК которые 32768Гц и он 8 битный, то его прерывания будут с частотой 32768/256= 128Гц , далее
ЧИСЛО= 128Гц/(0,0166666666666)= 7680. Погрешность установки при этом равна нулю.
Аватара пользователя
VenomXP
Грызет канифоль
Сообщения: 293
Зарегистрирован: Пн дек 24, 2007 07:09:09
Контактная информация:

Сообщение VenomXP »

Вот посидел надо кодом, получилось вот так, Neekeetos и все кто может проверьте плиз правильность, пока что вместо тика просто включаем/гасим светодиод.
Вложения
tinyMetro.c
(3.68 КБ) 315 скачиваний
Даташит - библия моя...
Изображение
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Сообщение Neekeetos »

VenomXP писал(а):Вот посидел надо кодом, получилось вот так, Neekeetos и все кто может проверьте плиз правильность, пока что вместо тика просто включаем/гасим светодиод.

Все вроде бы должно работать, но есть пару замечаний. У тебя основной цикл в программе так построен что вывод бипа следует за проверкой кнопок и функцией Convert в цикле. соответственно будет приличная задержка между временем когда его нужно выводить по таймеру и когда он реально выводится, и эта разница во времени не постоянна а зависит от числа которое преобразуется. Могу посоветовать сделать выполнение Convert только в том случае если нажата кнопка, тогда косяк будет только если кнопки жмакать. Кстати как светодиод то, моргает правильно?
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»