Обсуждаем контроллеры компании Atmel.
Сб май 08, 2021 10:48:27
400 + (120 - 400) / 2 = (400 + 120) / 2 = 260
что не так?
Добавлено after 1 hour 41 minute 12 seconds:slav0n, ваше выражение справедливо пока ADC > Out_To_Display.
Как только ADC станет < Out_To_Display, представляете какой результат получится?
фикс специально для вас:
- Код:
Out_To_Display += ((int)ADC - Out_To_Display) / 2;
Добавлено after 23 minutes 12 seconds:кстати, кому сильно хочется может применять дробные коэффициенты сглаживания:
- Код:
Out_To_Display += ((int)ADC - Out_To_Display) * 2 / 3;
Сб май 08, 2021 11:28:56
Спасибо,
Карбофос вот с таким кондом заработала платка без мигалова этого раздражающего. второй канал тоже работает, но проверить его полноценно смогу только в мастерской. надо запустить в шунт 75мВ сотку амперов с источника лбп. пока только от омметра подавал на второй вход ацп - канал работает. и второй вариант собрать на линейном дадчеге Холла ss-495a.
Сб май 08, 2021 11:31:01
charchyard писал(а):вот с таким кондом заработала платка
кондом древний, спору нет.
прощай будущее с таким кондомом
Сб май 08, 2021 14:03:01
slav0n писал(а):фикс специально для вас:
что? (int)ADC ? Это жестко.
slav0n писал(а):что не так?
может как нибудь так
- Код:
(int16_t)(ADC - Out_To_Display)
да и деление на 2 заменить сдвигом
- Код:
((int16_t)(ADC - Out_To_Display))>>1
slav0n писал(а):прощай будущее с таким кондомом
особенно деление на 17
Сб май 08, 2021 15:11:14
Dimon456 писал(а):да и деление на 2 заменить сдвигом
сдвигать знаковое целое - лютая ересь
Сб май 08, 2021 16:01:00
slav0n, недостаток Вашего метода в том, что остаток при делении теряется, т.е. если ADC стабилен и прирос на число меньшее делителя, то показания дисплея не изменятся...
Сб май 08, 2021 16:04:43
Ivanoff-iv писал(а):если ADC стабилен и прирос на число меньшее делителя, то показания дисплея не изменятся...
хде я?!!
если ADC стабилен ... то показания дисплея не изменятся
Сб май 08, 2021 16:13:10
ладно, "достаточно стабилен" в смысле не дёргается...
поставишь такой сглаживатель на дисплей вольтметра и будешь всё время напряжение завышать.
Сб май 08, 2021 16:16:39
все зависит от коэффа
1 - повторитель
0 - сам розум маєш шо таке
Сб май 08, 2021 16:17:06
или вдруг надо сильно сглаживать (делитель = 100) так вообще показаний не дождёшься..
Сб май 08, 2021 16:38:14
тыж вумный, должен понять шо тут на самом деле не дялитель, а множитель 0→1
Добавлено after 11 minutes 17 seconds:
дети, зарубайте себе на носи
в системе без ОС, зглаживание происхотит в моске
Добавлено after 3 minutes 33 seconds:
вчера било 400, сегодня 120, тебе показали 260
шо ти хочиш ще?
Сб май 08, 2021 16:47:43
вчера было 400, сегодня 401, и завтра 401, и послезавтра... а ты об этом и не узнаешь...
Сб май 08, 2021 17:47:27
эсли информер = 0, то да, объебалово
якщо информер = 1, то все шаги записаны
информер = 1/2, хуйло...
Добавлено after 13 minutes 54 seconds:
цифры не мелькают, но живешь вчерашним днем
Добавлено after 16 minutes 6 seconds:
дети, внимайте, я ушел
Сб май 08, 2021 18:12:47
Dimon456 писал(а):да и деление на 2 заменить сдвигом
сдвигать знаковое целое - лютая ересь
В машинных кодах для сдвига вправо есть специальная команда с сохранением знака - ASR Reg. Может С компилер это учитывает? (это предположение, а не утверждение)
Сб май 08, 2021 19:26:16
lizard66 писал(а):В машинных кодах для сдвига вправо есть специальная команда с сохранением знака - ASR Reg. Может С компилер это учитывает?
Вот asm код
Проблема в том что при входных данных
- Код:
Out_To_Display = 400;
ADC = 120;
на выходе Out_To_Display при делении на 2 получает завышенное показание на 1, то есть 121, а при сдвиге, ровно 120.
Сб май 08, 2021 20:38:37
Наверное, эта пара строк вас смутила:
- Код:
34: 97 fd sbrc r25, 7
36: 01 96 adiw r24, 0x01 ; 1
Это стандартная коррекция при инвертировании знака числа.
Как видно, при использовании операции сдвига, эта коррекция не выполняется.
Т.о. в данном случае правильно делить, а не сдвигать.
на выходе Out_To_Display при делении на 2 получает завышенное показание на 1, то есть 121, а при сдвиге, ровно 120.
Это неверно.
Сб май 08, 2021 21:03:01
Карбофос писал(а):Это стандартная коррекция при инвертировании знака числа.
Да, только эту коррекцию надо будет потом отнимать.
Карбофос писал(а):Т.о. в данном случае правильно делить, а не сдвигать.
Правильно будет без приведения типов.
Карбофос писал(а):Это неверно.
По чему неверно, прокрутите в цикле раз так нцать.
Сб май 08, 2021 21:09:32
Карбофос писал(а):Это стандартная коррекция при инвертировании знака числа.
какая еще коррекция?
возьмем простой пример:
03 - 05 = FE. а FE - это и есть -2, то есть правильный результат.
а после прибавления 1 получим -1, то есть неправильный результат.
Сб май 08, 2021 21:10:14
алгоритм slav0n'а, ещё плох тем, что дисплей 0 показывать будет только при включении, а потом как не опускай напряжение - нуля на дисплее уже не добиться...
я помню гдето тоже пытался применить такой код - не понравилось... с накопителем лучше.
Вс май 09, 2021 00:20:43
ага, нуля нима, но есть минуса
Добавлено after 17 minutes 38 seconds:
вчира било 0, седня 0, показали 0
вчира било 10, седня -10, показали раздватри
вчира било 10, седня -5, показали раздватри
вчира било -10, седня 5, показали раздватри
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.