avrmastak писал(а):
Вариант P=f(ADC) мне кажется самый достоверный.
Да не сказал бы... Если судить по коэффициенту детерминированности (R^2), они очень близки по точности относительно друг друга. Аппроксимация тем точнее, чем R^2 ближе к 1. А если смотреть чисто формально, то самый большой R^2 у P=f(R). Но это различие уже в тысячных долях, так что не особо существенно...
avrmastak писал(а):
Только как быть с точками 0 и 1? Или написать if(adc>857){buf[1]=buf[2]=0;}. Если меньше 2 атм выводить нули?
Строго говоря, обоснованной считается только искусственная "подмена" крайних точек, поэтому я бы так не делал...
Пусть при значении adc=932 выводится 0, а все что выше считается по формуле.
Тут можно задуматься о повышении точности аппроксимации. Навскидку, есть 3 варианта:
1) Увеличить количество калибровочных точек до 30-35 (условие малой выборки), причем на проблемном интервале 0-2 точек должно быть больше, чем на любом из остальных.
2) Заменить линейную аппроксимирующую функцию на полином 3-ей степени, например, Тогда R^2 станет где-то 0,992-0,997 (см. вложение).
3) Отказаться от аппроксимации и попробовать интерполяцию между двумя точками, но ресурсов это отъест немерено и не факт, что даст хороший результат...
Можно также, в порядке эксперимента, объединить варианты 1 и 2, т.е. 30 точек и кубическая аппроксимация.
avrmastak писал(а):
Контроллер - tiny26.
Как говорится, маловато будет... ) Тем более, если начинать борьбу за точность показаний и в последующем делать автокалибровку.
А автокалибровку, мне кажется, со временем все-таки придется добавлять, т.к. сезонные перепады температур все равно будут влиять на точность показаний... Ну и термоконтроль, скорее всего, понадобится...
Лучше бы запилить все это дело на Меге какой-нибудь... 8 или 16.
Кстати, я так понял у Вас датчик от "Жигулёнка", с виду напоминающий кондовый выпрямительный диод? А нет ли к нему чего-нибудь наподобие даташита, может в нем уже указана какая-нибудь методика калибровки?