Ok ich hab des kleine fehler gefunden es waren sogar 2 / 3 der dritte war ein schönheits fehler.
Zu den fehlern ich hab nicht daran gedacht das die bei 0 beginne und so nie 10 ereichen können wenn die nur 10 mal zählen.
Fehler eins: if(Messung == Anzahl) -> if((Messung + 1) == Anzahl)
Fehler zwei: if(Zaehlen == Anzahl) -> if((Zaehlen + 1) == Anzahl)
Schönheits fehler: if(AkkuC0 >= 500) -> if(AkkuC0 == 500)
Und hir der ganze Code, OK den kann man noch verbessern. Was ich auch machen werde.
Code:
Code:
uint16_t SpannungsMessungen[10], Anzahl = 10;
uint16_t Spannung = 0, Temp = 0;
int AkkuC0 = 0, I =0;
void AkkuCheck(void) // Angabe wie oft gemessen wird ( Pro Funktion aufruf ).
{
AkkuC0++;
if(AkkuC0 == 500) // Alle 500 Aufrufe wird die Funktion ausgeführt.
{
AkkuC0 = 0;
Spannung = 0;
Temp = 0;
for(int Messung = 0; Messung < Anzahl; Messung++)
{
task_RP6System(); // Nur zur sicherheit
SpannungsMessungen[Messung] = adcBat; // 10 mal wird die AkkuSpannung gemessen.
if((Messung + 1) == Anzahl)
{
for(int Zaehlen = 0; Zaehlen < Anzahl; Zaehlen++)
{
Temp = Temp + SpannungsMessungen[Zaehlen]; // Die 10 Messwerte werden Addiert.
if((Zaehlen + 1) == Anzahl) Spannung = Temp / Anzahl; // Die 10 Messwerte werden und 10 geteilt.
}
}
}
}
// Test ausgabe
writeString_P(" || Akku Spannung: ");
writeIntegerLength(Spannung , DEC, 3);
writeChar('\n');
}
Es dauert aber bein ersten abfrage ein wenig bis die daten kommen der zähler muss ja erste 500 erreichen. ( Das mit den zähler han ich gemacht dammit der CPU nicht soviel rechnen muss.
MFG OLiver G
Lesezeichen