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

Ликбез по программированию PIC , vol. # 2

1 16 17

Ув 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 вернулись бы...

 

Спасибо