|
|
|
|
Ув AlexAlcoa, вариантов много, все зависит от конкретных условий задачи. Навскидку можно посоветовать следующее: 1. Среднее значение. Самый малозатратный алгоритм. Суммируете (2 в степени N) значений, а затем полученный результат делите на количество просуммированных значений. Деление в данном случае заменяется правым арифметическим сдвигом на N разрядов. 2. Скользящее среднее. Требует (2 в степени N) ячеек ОЗУ для хранения списка выборок. Сумма считается по этому списку и делится на число элементов (также правым арифметическим сдвигом), а очередное значение с АЦП заменяет самое старое значение в списке выборки. Список обычно реализуют в виде кольцевого буфера. 3. Вариант Z-преобразования - рекурсивный фильтр НЧ. Расчет ведется по формуле Y[i] = a*Y[i-1]+b*X[i]. Сумма коэффициентов a+b <= 1 (обязательное требование, иначе фильтр идет вразнос!!!). Чем больше а, тем "ровнее" выходной сигнал, но и тем больше фазовое запаздывание. Для целочисленной арифметики формулу можно преобразовать, к примеру, вот в такую: (15*Y[i-1]+X[i])/16 или (Y[i-1] << 4 - Y[i-1]+ X[i]) >> 4, тогда никаких умножений и делений не потребуется. Правый сдвиг в формуле - тоже арифметический. В формулах X[i] - значение выборки с АЦП, Y[i] - величина сигнала на выходе фильтра, Y[i-1] - величина сигнала на выходе фильтра при предыдущем расчете. Самое первое Y[i-1] принимают равным нулю. Попробуйте, посмотрите, что больше подойдет. |
|
|
Ridiko: , chav1961: Спасибо, буду пробовать. Понравилось "скользящее среднее" |
|
|
picmaniac: Начнём танцевать от печки... PIC какой, конкретно? Неужто однократно программируемый? Лучше многократного, есть ещё пара вещей которые возникло желание реализовать, но у меня _пока_ нет на руках железа, поэтому буду изучать протус или скорее всего сидеть в асемблеровксом отладчике и смотреть на "логический анализатор". схема. ТЗ. Клавиатура 21*5, зашита от дребезга - 4 полных цикла опроса, память на 4 нажатых кнопки, индикация "caps lock" "num lock" "scrlk"(rc5-rc7), вывод скан кода через 1 порт с синхросигналом(rd0-rd1). Реализовано: опрос клавиатуры, зашита от дребезга, память. Вместо трех индикаторов пока счетчик количества скан кодов в памяти. Вывода пока нет.
|
|
|
немного поправленная блок сема. |
|
|
и доработанный код. Теперь я могу задать более конкретные вопросы. 1)почему он не разрешил использовать RA6 RA7. 2)почему некоторый пишут ORG перед подпрограммой. 3) к чему это "Warning[203] Found opcode in column 1. (return)" 91602.asm |
|
|
LIKBIK: директива ORG, указывает компилятору с какой ячейки памяти MCPU, располагаются данные, следующие после директивы. Сообщение 203 говорит о том что в первом столбце найдена команда "return", хотя это место для меток, а не команд, устранить легко вставьте таб или пробел перед командой. Про RA6 RA7 незнаю, но корее всего конфликт с железом, читайте даташит на данный MCPU |
|
|
... уже "прячемся" под никами уважаемых людей??? |
|
|
Да нет, Левон, не похоже. |
|
|
chav1961: не похоже. Ну да, конечно! Он белый и пушистый! Мало мне было этого, теперь и там ещё с ним "лаяться"... chav1961 Рад снова видеть Вас на форуме! Ещё бы Splav56 и slava_2005 вернулись бы... |
|
|
Спасибо |
|
|
|
|