Hallo
int Ref = 5 / 1023; //5V / 8 Bit
int Volt = 0;
sind doch alles ganzzahlige Variablen. Versuch doch mal float.
MFG
die vairable Volt hat immer den wert 0
in fuktion get bat power
result ist aber 427
board ist ein RN-Control
ich möchte die battire spannung messen
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Hallo
int Ref = 5 / 1023; //5V / 8 Bit
int Volt = 0;
sind doch alles ganzzahlige Variablen. Versuch doch mal float.
MFG
Hallo Numberfive,
Habe in C schon ähnliche Probleme gehabt.
Ich steige nicht vollständig durch Deinen Quelltext durch, weil Zeit und teils auch Wissen fehlt.
Allerdings vermute ich einen Fehler in den folgenden Zeilen:
Volt = Result * (5/ 1023); *kommt hier eine Ganzzahl heraus?*
itoa(Volt,buffer2,10);
SendString(buffer2);
Volt = Volt * 5,2941; *kommt hier eine Ganzzahl heraus?*
Du solltest mit dem Modulo-Operator arbeiten:
Das funktioniert so:
Eine Division liefert einen Ganzzahligen Rest, so wie wir das ganz zu Anfang in der Schule mal gemacht haben.
Syntax:
Rest = Wert % Divisor
Beispiel:
1 = 13 % 4 * 13 : 4 ergibt 3 Rest 1*
Andere Möglichkeit:
Die Division durch eine Schleife voll Subtraktionen ersetzen
Viel Erfolg
Patrick
Hallo,
Volt ist ein Integer-Wert. Result danke ich auch mal, oder macht der AD-Wandler 10 bit?Volt = Result * (5/ 1023);
Aber es passiert folgendes: du hast (5/1023) geklammert. Bei dieser Operation kommt für Int-Zahlen immer 0 raus. Mit dieser 0 wird dann dein Result Multpliziert. Ergebnis ist wieder 0.
Grüsse, Martin
"C" kommt von cast:
du mußt schreiben ((float)5 / (float) 1023) )
Hallo Leute,
sory das ich jetzt erst schreibe aber konnte nicht schneller.
Damit stimmt es schon fast also die die Gemessen 2,x Volt scheine wohl zu passen aber es kommen immer 10 volt raus mein multi meter zeig aberCode:WORD Result = 0; float Volt = 0; float Teiler = 5.2941; CLEARBIT(ADCSRA,ADEN); // aus schlaten damit ich den port wechseln kann // Messen an port 6 CLEARBIT(ADMUX,MUX4); CLEARBIT(ADMUX,MUX3); SETBIT(ADMUX,MUX2); SETBIT(ADMUX,MUX1); CLEARBIT(ADMUX,MUX0); SETBIT(ADCSRA,ADEN); // Bit invertieren messung starten ADCSRA |=_BV(ADSC); waitforad = 1; // warten bis messung abgesclossen ist und wert gültig while(waitforad != 0) { //warten auf den adwandler; }; // den wert aus dem register holen char buffer2[20]; SendString("Messe :"); Result = ADCH*256 + ADCL; itoa(Result,buffer2,10); SendString(buffer2); Volt = ((Result * 5)/ 1023)*Teiler; // Berechnung Volt gemessen bei Ref von 5V SendString("Volt :"); itoa(Volt,buffer2,10); SendString(buffer2); if(Volt > 11) { if(Volt >=12) { if(Volt >= 13) { SendMCData(2,100); // frisch geladen } else { SendMCData(2,50); // Bat OK aber bald } } else { SendMCData(2,20); //fast leer } } else { SendMCData(2,0); // Batt ist leer }
11.8 Volt an und jetzt ?
Gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
So jetzt tut es wohl
nicht ganz genaue aber ich denk besser wird es nicht die ganz zahl stimm jetzt wenigstens.Code:WORD Result = 0; double Volt = 0; CLEARBIT(ADCSRA,ADEN); // aus schlaten damit ich den port wechseln kann // Messen an port 6 CLEARBIT(ADMUX,MUX4); CLEARBIT(ADMUX,MUX3); SETBIT(ADMUX,MUX2); SETBIT(ADMUX,MUX1); CLEARBIT(ADMUX,MUX0); SETBIT(ADCSRA,ADEN); // Bit invertieren messung starten ADCSRA |=_BV(ADSC); waitforad = 1; // warten bis messung abgesclossen ist und wert gültig while(waitforad != 0) { //warten auf den adwandler; }; // den wert aus dem register holen Result = ADCH*256 + ADCL; Volt = (((Result * 5)/ 1.024)*((float)22000+5100))/5100; // Berechnung Volt gemessen bei Ref von 5V // * 1000 für die komma stellen // Mit Spannungsteiler 22k 5,1 k // Das If grab an passen wenn mal die Akkus wirklich daran hängen if(Volt > 11) { if(Volt >=12) { if(Volt >= 13) { SendMCData(2,100); // frisch geladen } else { SendMCData(2,50); // Bat OK aber bald } } else { SendMCData(2,20); //fast leer } } else { SendMCData(2,0); // Batt ist leer }
es kommen 11,08 raus und mit dem muti meter messe ich 11,66
Gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Lesezeichen