Servus,
ich arbeite mich in das Thema uC Programmierung in C ein und sieht
soweit nicht schlecht aus. Ich komme nur bei dem Thema Rechnen mit
Kommazahlen nicht zu recht.
Ziel: Batteriespannung messen und mit 12.3V vergleichen. Die
Eingangsschaltung sieht aus wie im Anhang.
Status: Ich lese erfolgreiche den ADC Wert raus. Jedoch stimmt was nicht
an meiner Formel.
float Voltage;
uint16_t Voltage16;
Voltage16 = ADC_Read_Avg(0,10) //Kanal 0, 10x auslesen und durch 10
Voltage = (float)((Voltage16*(5/1024))*6.6);
if (Voltage < 12.3){
SET_OUT1;
}
Egal welche Spannung ich anlege auch 20V der Output wird immer gesetzt,
d.h. Voltage ist immer grösser 12.3V.
Kann mir einer sagen was ich falsch mache?
Gruss Thomas
as schrieb: > wofür ist dieses *6,6 gut? Schau Dir mal das Verhältnis am Spannungsteiler genau an...
Verhältnis ist 0,1515 und 1/0,15 ist das gleiche wie 1*6,6. Teiler: R2/R1+R2 Ergibt 10/10+56 = 10/66 = 0,1515. Da kann jetzt natürlich auch ein Denkfehler drin sein, wie das immer so ist.
Warum rechnest du den Kram überhaupt in Float? Festkomma wäre sicherlich besser...
1 | Voltage = ((uint32_t)Voltage16 * 3300)/1024; |
Ingo L. schrieb: > Warum rechnest du den Kram überhaupt in Float? Festkomma wäre > sicherlich > besser...Voltage = ((uint32_t)Voltage16 * 3300)/1024; Naja, jetzt weiss er wie es geht, falls er es wirklich mal braucht ;)
Naja, das Ganze geht natuerlich auch viel einfacher :
MyInt = ReadADC(); // Integer Wert zwischen 0 .. 1023
if (Myint < Irgendwas){ SET_OUT1; } else {Clear_Out1; }
Und das Irgendwas (integer) kann ich ja mit dem Taschenrechner schnell
ausrechnen
.. Tsss .. :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
