Добрый день!
Нужна Ваша помощь. Сделал я небольшой приборчик. Хочу его чуть переделать, но пока не могу понять как. Стоит у меня датчик давления MPX с него сигнал поступает на АЦП и информация выводиться на ЖК. но сигнал подается импульсами максимальная частота 1Гц. и естественно цифры скачут, можно ли как-нибудь сделать, чтоб показания давления как-нибудь задерживалось на экране секунд на десять потом обновлялось, ну как то так.
а чем делей не угодил в данном случае? Человеку же просто задержка надо на вывод данных
пусть поставит
_delay_ms(5000);
как раз и получит изменение данных на екран с частотой 5 секунд
не вижу смысла делать задержку на счетчтике в данном случае
Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
kobzar писал(а):не вижу смысла делать задержку на счетчтике в данном случае
Какая задержка на счётчике??? Там фильтр, среднее арифметическое. Который, при больших значениях счётчика, будет выполнять роль задержки. Двух зайцев короче.
А фильтр нужен потому, что я работал с этим датчиком, и без фильтра, либо конкретного опыта в разводке аналоговой части, он покажет погоду на Марсе.
Если время обновления ~1 сек то не критично. Скользящее среднее применять надо когда обновления нужны каждый отсчёт.
Да и алгоритм без буфера не помню, хотя он был у меня в заначках
Наконец то попал я за компьютер. Сделал я задержку в 2 сек, на моем устройстве этого достаточно, спасибо что подсказали. А если сделать усреднение я как понял у меня не будет цифры скакать от 0 до 5 (к примеру). а всегда будут на экране гореть среднее показание например 4. Я Вас правильно понял?
kk042fjv писал(а):А если сделать усреднение я как понял у меня не будет цифры скакать от 0 до 5 (к примеру). а всегда будут на экране гореть среднее показание например 4. Я Вас правильно понял?
Не совсем так.
С задержкой, как вы сейчас сделали, у вас на экран выводится мгновенное значение сигнала. Ну например, АЦП видит такие значение:
pyzhman писал(а):Некрасиво как-то - накапливать, а потом рассчитывать. Надо бы сразу. Так - плавнее.
Оно и получается сразу.
Вот тут я писал об этом.
При любой длине буфера усреднения результат выдается после каждого измерения. Не надо ничего накапливать, а потом выдавать.
Есть. Например, фильтрация Калмана. Глубина "усреднения" регулируется, причем скорость реакции на единичное возмущение выше, чем у алгоритма с обычным "скользящим" усреднением.
Но ещё раз говорю - автору он не нужен. Ему среднее арифметическое с усреднением до посинения. Количеством отсчётов подобрать задержку. Как раз будет среднее за интервал обновления, что ему и надо.
kk042fjv писал(а):А если сделать усреднение я как понял у меня не будет цифры скакать от 0 до 5 (к примеру). а всегда будут на экране гореть среднее показание например 4. Я Вас правильно понял?
Не совсем так.
С задержкой, как вы сейчас сделали, у вас на экран выводится мгновенное значение сигнала. Ну например, АЦП видит такие значение:
3333333333333353333333333333 - В реале
^ ^ ^ - Периоды обновления
3333333333333355555555555333 - На экране
То есть из-за любой помехи у вас 2 секунды будут неверные показания, в случае усреднения даже по 10 отсчётам у вас в нижнем ряду будут все тройки.
Для измерения атмосферного давления я вообще усреднял по 65536 отсчётам
Все правильно так оно и выходит, в протеусе так и показывает. Автор этого кода я, я не программист, но в codevisionavr получаются небольшие коды писать и хотел бы попробовать переделать с усреднением показаний, теоретически то понятно снимаем примерно 32 отсчета, складываем, делим и выводим на экран, но как это в коде написать???
Которую часть кода Вы в начали писали почему то программа ругается на строчку tmp_data = 0; видать в начале надо что-то добавить, может библиотеку.