Свежие обсуждения
Микроконтроллеры

Определение BPM звука на pic - ах

1 3 4

djelektronik: куда их выложить? примерно 10мб
могу на rapidshare.com

ок, спс, без проблем.

 

djelektronik:
могу на rapidshare.com
Не-е-е-е! Только не туда.
Лучше вот, или вот.

 

вот с детектором бпм
http://www.sools.com/index.php?menu=lightning&page=lightning&edit=

http://discolitez.com/
PatControl может делать эффекты простые

и вот еще крутая прога http://www.pcdimmer.de/

 

djelektronik:

спасибо, погляжу.

Может на этой недели успею доделать вывод и опрос клавы и потом уже буду бится над алгоритмами)) пока получилось только вывести 12345678 и загорание индикатора при нажатии любой кнопки)))

 

Определение BPM звука на pic - ах

Вот собственно в этом и вопрос, Имеем АЦП с сигналом на входе, прошедшем через фильтр. Вычислить текущий уровень то мы вычислили, только что вот дальше с ним делать...

 

Al-x: Имеем АЦП с сигналом на входе, прошедшем через фильтр
Если у Вас полосовой фильтр на барабаны, то разве не достаточно просто отслеживать максимум? Периодически запускаем АЦП, как последующий уровень меньше предыдущего, то вот оно и есть...

 

Да чего-то после всех эксперементов вопросов стало ещё больше)))

 

А я вспомнил, что когда-то в прошлом веке делал цветомузыки - не одну - и красный басовый канал прекрасно моргал по ударам барабана - ну уж если пара транзисторов и тиристор с такой задачкой справлялись - наверно это на компараторе + ПИк можно повторить

 

Блин, всё приплыли, похоже чип сдох после программирования... прошивается и читается норм, а на выходах нефига. (100% не из-за программы, т.к. я брал и более старые провереные варианты)

 

Не, оживил)) Не знаю что это было, но сейчас норм...

Ну в общем пока алгоритм такой: (пока только чисто для выводы на индикаторы)

Если что - ногами не пинать, это моя первая программа и вообще работа с МК.

time_delay = 1; - вот это и есть та преславутая постоянная времени..
porog = 0.45; - порог срабатывания сравнения.... Обе указаные переменные имеют начальные значения, но в последующем должны будут автокорректироватся...

while(1){

analog_1 = read_adc();

if (analog_1 > 50){ - отсекаем слабый сигнал.
leds[7] = 1; leds[4] = 0; - два светодиода. 7 - зелёный, 4 красный. Индикация наличия сигнала.
j = 0;
if (analog_1 > (max*porog)){
j = 1;
}
if (stop_count != 0){
stop_count--;
if (stop_count < (time_delay*0.5)) leds[0] = 0;
}
else {
if (km == 0 && j==1){
temp_signal++;
leds[0] = 1;
stop_count = time_delay;
}
}
km = j;
- дальше ерунда. Обычное заполнение индикаторов..
d [1] = (temp_signal / 1000000) % 10;
d [2] = (temp_signal / 100000) % 10;
d [3] = (temp_signal / 10000) % 10;
d [4] = (temp_signal / 1000) % 10;
d [5] = (temp_signal / 100) % 10;
d [6] = (temp_signal / 10) % 10;
d [7] = (temp_signal / 1) % 10;

if (analog_1 > max) max = analog_1;

refresh = 1;
} else leds[7] = 0; leds[4] = 1;
}