Hallo Leute,
ich habe einen Quellcode zum Ermitteln einer angelegten Spannung bekommen, jedoch fällt mir ein Punkt darin schwer nachzuvollziehen. Der Quellcode dazu sieht folgendermaßen aus:
const int analogpin=A1; //analog pin
int val=0; //result from analogread
int compval=0; //value for approximation
int voltval=0; //volt value
int i=10; //loop variable
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Die Wandlung beginnt");
val=analogRead(analogpin);
Serial.println(val);
delay(777);
while (val!=compval)
{
if (compval<val)
{
compval=compval+pow(2,i);
i=i-1;
}
else
{
compval=compval-pow(2,i);
i=i-1;
}
Serial.println(compval);
delay(1000);
}
if (val==compval)
{
voltval = compval * (3.3/1024) ;
Serial.println("Wandlung beendet");
Serial.println("Der Messwert ist: ");
Serial.println(compval);
Serial.println("Es liegen somit ");
Serial.print(voltval);
Serial.println("V am Pin A1 an!");
while (Serial.available()==0) //Warteschleife
{
;
}
}
}
Kann mir jemand (kurz) erklären, welchen Sinn die Approximation des Wertes hat?
Die angelegte Spannung wird zu Beginn einmal ausgelesen, anschließend in der While-Schleife eine neue Variable so lange angenähert, bis der Wert mit dem ausgelesenen übereinstimmt und schlussendlich der angenäherte Wert in Volt umgerechnet und seriell ausgegeben - nur wieso der Aufwand mit bzw. in der Schleife? Eine direkte Umrechnung des zu Beginn ausgelesenen Analog-Wertes liefert schließlich den gleichen Wert...
Gruß