Forum: Mikrocontroller und Digitale Elektronik Mehrere Betriebsstundenzähler in C/C++ für µC


von Ersi (cell85)


Lesenswert?

Hi,

ich hab für meinen Coppter-Controller eine dynamische Regelung 
progammiert.
Also es lassen sich eine Anzahl von bis zu 8 Motoren ansteuern/regeln.
Ich würde jetzt gerne einen Betriebsstundenzähler für jeden Motor 
erstellen.

Hierzu hätte ich eine konzeptionelle Frage und würde gerne wissen wie 
ihr das so macht/machen würdet.

Ich hatte jetzt vor, 8 Variablen (uint32) zu erstellen welche mit Hilfe 
des System Timers (msec) im Minutentakt erhöht werden, falls motor x 
aktiv.
so in etwa (PSEUDOCODE):
1
//globales array im eeprom 
2
uint32 Betriebsstunden[8];
3
...
4
Laufzeitmotor(i){
5
//Motor aktiv? Minute vergangen?
6
if(motor[i]==aktiv && minutevergangen()==true) 
7
8
Betriebsstunden[i]++; //+1 Minute
9
else{;}
10
}
11
12
//Eine Funktion, welche checkt ob eine Minute seit dem letzten Aufruf //vergangen ist ohne zu blockieren... wie würde man das realisieren?
13
14
bool minutevergangen(){
15
int i=0;
16
i=aktueller_timerwertMSEC-letzter_timerwertMSEC; //macht mir auch bissl kopfzerbrechen, wie und wo die Timerwerte herkommen
17
if(i>60000) // oder 60 wenn der zähler sekunden zählt
18
{ return true; }
19
else
20
{return false; }
21
}

oder

wäre es besser einen minütigen Interrupt zu erstellen, der die 
jeweiligen Motoren-Variablen um eins erhöt falls Motor aktiv?

Ob der Betriebsstundenzähler am Ende um paar Stunden abweicht ist 
eigentlich egal.

Ich hoffe ihr versteht was ich meine und könnt mir ein paar hilfreiche 
Tipps geben.

Viele Grüße
Sven


Ich verwende einen STM32F103 und einen picmicro. Diese 
Betriebsstundenzählung könnte ich auch in den Pic reinbauen, muss also 
nicht in den STM32.

Das EEPROM hat aussreichend Schreibzyklen.

von ollibass_gast (Gast)


Lesenswert?

Hallo!

Ich denke das ist eher eine Frage des Gesamtkonzepts. Wenn du sowieso 
irgendwo eine Schleife hast die zyklisch durchläuft, dann baue doch dort 
die Abfrage rein ob die Minute rum ist und wenn ja, dann schaue ob die 
Motoren an sind und erhöhe entsprechende Counter.

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
Noch kein Account? Hier anmelden.