Hm, wenn ichs nun richtig kapiert habe, sollte ich die externe Referenz (also die Methode der Bibliothek) verwenden, weil die Referenzspannung nicht niedriger als der Messwert sein soll.
Das klappt bei der internen zwar, wird aber knapp.
Also die Bibiotheken-Methode.
Bisher hab ich noch nichts umgebaut, noch versuche ich, das Ergebnis _sinnvoll_ zu visualisieren.
Die 512 hat ja _noch_ nichts mit der tatsächlichen Spannung zu tun, sondern ist lediglich der Wert, der vom ADC (ich hasse das, früher sagte man Wandler, nach AD-Wandler hab ich nämlich gesucht ;) ) geliefert wird.
Das heisst, ich muss nun 5(V,Referenz)/1024*Messwert rechnen.
Das Ganze mal zwei (@Spannungsteiler) und habe die richtige Spannung?
Wenn dem so ist, liegt nun das nächste Problem vor mir: das Display ist am I2C und weigert sich ganz offenbar, eine Fliesskommazahl auszugeben.
Ich habe (sonst wird das berechnen nicht klappen, oder?) "Messwert" als double deklariert (bei float gibts eine Compilerwarnung), wenn ich schreibe
printf("%f",volt);
)
Das ergibt, als Ausgabe 0.
Schreibe ich es so:
volt_mess=analog_getValue(4);
volt= (5/1023*volt_mess)*2;
lcd_setCursor(1,1);
printf("%f",volt);
(volt_mess ist hier der Wert vom ADC als int16_t und volt ist ein double, damit ich mit Kommastellen rechnen kann) kommt offenbar irgendwas überhaupt nicht mit, es wird ein Fragezeichen ausgegeben.
Toll, _das_ hab ich auch im Gesicht.
Per Taschenrechner funktioniert es, aber die Biene scheint genauso verwirrt wie ich zu sein.
Ich weiss, für spätere Programme, in denen einfach nur Alarm geschlagen werden soll, wenn die Spannung einen bestimmten Wert unterschreitet, ist das relativ unerheblich, aber so lerne ich gleich noch was.