Wobei Du natürlich 0..255 bekommst, die in ein Byte passen.
Zur Umrechnung brauchst idealerweise einen mindestens 2-Byte-Wert. Das
ist kein Problem, wenn der Compiler "integral Promotion" nicht
abschaltet
Lineare Skalierungen (aus einem x wird ein y) laufen immer in folgender
Form ab: y = mx+b; mit m=Steigung (Multiplikator) und b=Basis.
Rein technisch kann man auch y=m(x+b) rechnen, dann haben m und b andere
Zahlenwerte.
Wenn Du mit Integer-Zahlen rechnen willst, dann wird noch ein Divisor
gebraucht, meist eine Potenz von 2, z.B. 256, da der µC dann ggf. nicht
rechnen braucht, also: y = (mx+b)/256
Die Koeffizienten bestimmt man durch Lösung linearer Gleichungen, was in
diesem Fall (ein Wert ist 0) auch einfacher geht. Zuerst Umstellen, dann
die Wertepaare (x=0->y=10, x=255->y=80) einsetzen
1 | 256*y = mx+b
|
2 | 256*10= m*0+b --> 2560=b
|
3 | 256*80= m*255+b --> 20480=m*255+2560 --> 17920 = 255*m --> 70 = m
|
Die Rechnung im Controller ist also: Temperatur=(70*ADWert()+2560)/256;