Próbuje "tanim" kosztem uzyskać sensowny pomiar temperatury, w dodatku nie znam się dobrze na C
1. Powiedzmy że błąd +/-3° w oknie 0-100° było by wartością do przyjęcia.
2. Potrzebował bym możliwie dużą rozdzielczość, idealnie było by mieć 0,1° rozumiem że w przypadku megi32 i zwykłego dzielnika napięcia R=10k/NTC10k 0,2° jest realną sprawą.
3. Całość ma być odporna na wymianę czujników- chodzi mi o ich łatwą kalibrację. (Czyli co, zakładając że parametry termistora są takie same to wystarczy że ewentualnie dodam offset do odczytu z ADC?)
Czy pomiary lepiej tablicować czy liczyć?.
Jeśli miał bym tablice to do umieszczenia było by 2kB (żeby nie komplikować zakładam że tablica będzie od 0 do 100st a wartość 98,2 to 982), pobranie wyniku było by proste i szybkie...
Jeśli chodzi o liczenie to wysznupałem taki wzór Link
Zdaje się że poniżej jest wg tego taki kod:
Czego można się po takich wzorach spodziewać?
U mnie na razie kod urusł o 5k, w temperaturze pokojowej mam 8° błędu no i liczka jest bez przecinku, choć to pewnie moja wina to float (fTemp) dzielę przez 10 i reszte z dzielenia wyświetlam...
1. Powiedzmy że błąd +/-3° w oknie 0-100° było by wartością do przyjęcia.
2. Potrzebował bym możliwie dużą rozdzielczość, idealnie było by mieć 0,1° rozumiem że w przypadku megi32 i zwykłego dzielnika napięcia R=10k/NTC10k 0,2° jest realną sprawą.
3. Całość ma być odporna na wymianę czujników- chodzi mi o ich łatwą kalibrację. (Czyli co, zakładając że parametry termistora są takie same to wystarczy że ewentualnie dodam offset do odczytu z ADC?)
Czy pomiary lepiej tablicować czy liczyć?.
Jeśli miał bym tablice to do umieszczenia było by 2kB (żeby nie komplikować zakładam że tablica będzie od 0 do 100st a wartość 98,2 to 982), pobranie wyniku było by proste i szybkie...
Jeśli chodzi o liczenie to wysznupałem taki wzór Link
Zdaje się że poniżej jest wg tego taki kod:
// calculate NTC resistance , 1023 = 10 bits ADC 10000 = pullup value
float fCalcNtc( float wADCVal ){
float fRntc;
fRntc = 10000 * (float) wADCVal / ( 1023.0 - (float) wADCVal);
return(fRntc);
}
// calc temperature from NTC value
float fCalcTemp( float fRntc){
float fTemp;
fTemp = (1.0 / ( (log(fRntc/RREF))/BVALUE + 1.0/298.0)) - 273.0; //log = ln
return( fTemp);
} Czego można się po takich wzorach spodziewać?
U mnie na razie kod urusł o 5k, w temperaturze pokojowej mam 8° błędu no i liczka jest bez przecinku, choć to pewnie moja wina to float (fTemp) dzielę przez 10 i reszte z dzielenia wyświetlam...
