[an error occurred while processing this directive]
|
Вот ведь вопрос в чем: сигнал-то с АЦП не всегда 0...1023. Для одного датчика может быть к примеру 12...985, для другого 23...956, а растягивать в обоих случаях надо к 0...799. Сответственно в одном случае будет 799/973=0.82117163412 во втором 0.85637727759914. Продолжая Ваш ращет надо эти коефициенты умножить на 65536, соответственно числители будут 53816
и 56123. Чтобы в целых числах получить эти числители надо закинуть 799 в старшее слово long'а (эквивалентно умножению на 2^16)и выполнить деление на 973 и 933 сотвстственно? Вот я и пришел к операции деления long'ов...
Если продолжить расчет этого примера, приведенного к знаменателю 64, числитери получатся 52 и 54 соответственно. Конечный результат 790 и 787 - очень большая ошибка.
В итоге или я использую 32-х разрядное деление для расчета калибровочых коефициентров или потеряю точность.
Далее еще хуже в устройстве которое я сейча разрабатываю 12-разрядный биполярний АЦП (AD7898-3). На вход через усилитель и фильтр подключен рН-электрод. входной сигнал может битыть в диапазоне от -2000... -1500 до 1500 2000, а пересчитать надо от 4.01 до 9.18 с точночью до 3 знака, причем рН -метр такой прибор, калибровку которого надо не менее одного раза в месяц проводить. Ситуация еще немного осложняется тем что вместо 4.01 и 9.18 могут быть и другие значения из диапазона 0....15.
Почему я зацепился за плавачку - чтоб особо не парится и не задумыватся, хотя я и понимаю что это на самый оптимальный в плане размера и быстродействия вариант. Но стремится к оптимуму надо!!!!
E-mail: info@telesys.ru