mikrocontroller.net

Forum: Compiler & IDEs wie schreib ich ein betriebsstundenzähler?


Autor: Christian Schmidt (Firma: DSK) (schmiddy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi, ich hab ein problem ich möchte in mein programm ein 
betriebsstundenzähler einbauen aber ich weiß nicht wie ich ein schreibe. 
er soll min & std anzeigen. über 25 volt soll er anfangen zu zählen und 
unter 25 volt wieder aufhören.
kann mir da jemand bei helfen???
wäre echt nett von euch!!!!!!!

das programm ohne zhler hab ich beigehängt

Autor: Christian Schmidt (Firma: DSK) (schmiddy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so und hier nochmal als txt datei

Autor: M. H. (doktorgnadenlos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich kann Dir keinen kompletten Source-Code liefern, aber prinzipielle 
Hinweise geben.

Zunächst brauchst Du einen nichtflüchtigen Speicher mit ausreichend 
vielen Schreibzyklen (z.B. ein serielles EEPROM).

Typischerweise wird im Minutenrythmus inkrementiert. Du brauchst also 
einen Timer, der im Minutenrythmus die Funktion zum Inkrementieren des 
Zählersaufruft. In dieser Funktion werden die entsprechenden Bytes (es 
werden wohl 2 oder 3 sein)im EEPROM gelesen, um 1 erhöht und wieder im 
EEPROM gespeichert (für Deine Applikation abhängig ob die Spannung >25V 
ist).
Damit steht im EEPROM immer die Betriebsdauer in Minuten.

Das EEPROM sollte zu Beginn mit "0x00" beschrieben sein. Im 
Lieferzustand steht dort zumeist "0xFF" drin, Du bekommst also zu Beginn 
gleich mal einen Überlauf, was aber nicht tragisch ist, Du verlierst nur 
die erste Betriebsminute.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Cristian
so etwas in dieser Art habe ich vor kurzem programmiert. Aber es fehlen 
einfach noch Infos für dein Projekt.
Wie sieht es aus wenn µC resetet werden muss? Was passiert mit den 
bisherigen Betriebsstunden wenn µC neu gebootet wird?
So wie ich das nun sehe willst du die Daten einfach in einem LCD 
anzeigen lassen. Ist das korrekt???
Gruß Daniel

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
10000(Schreibzyklen in EEprom)/60 (minuten) = 1666h Betriebstunden, d.h. 
dein Betriebstundenzähler zählt max 1666h.

Autor: Christian Auerswald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evtl. könnte man das Programm ja so anpassen dass es nach 1000 Stunden 
die Minuten an eine andere Stelle im EEPROM schreibt.

Autor: Christian Schmidt (Firma: DSK) (schmiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ganz genau das siehst du richt, ich will es auf dem display anzeigen

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher EEPROM hat denn nur 10000 Zyklen?  Der ATmega2561 ist mit
(minimal) 100000 angegeben, in der Praxis werden es wohl eher eine
Million Zyklen sein.  (Brian Dean hat mal den Flash-ROM eines
AT90S1200 getestet.  Der war mit 1000 Zyklen spezifiziert, gehalten
hat er um die 167000.)

Die Idee, nach jeweils 10000 Stunden auf eine neues Stück EEPROM
zu gehen, hat natürlich auch was für sich.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Schmidt wrote:
> so und hier nochmal als txt datei

Und warum nicht als Source-Datei (*.c), wie es sich gehört?

Du programmierst wohl erst seit wenigen Tagen.

Programme als *.doc ist natürlich völlig daneben.


Peter

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es so gelöst:
__no_init __eeprom struct
{
  unsigned int einschaltzaehler;
  unsigned int betriebsminuten[100];
  unsigned char adresse;
}  eeprom_daten;

In der Initialisierung frage ich das EEPROM ab auf > 60000 (1000 Stunden 
Betrieb). Wenn größer, dann ist es das 1. Einschalten und alle Daten 
werden auf 0 gesetzt. Im laufenden Betrieb wird in Adresse der 
Arrayplatz gespeichert. Immer beim Erreichen der 60000 wird Adresse 
erhöht und somit auf den neuen Speicherplatz gezeigt.

Also 100000 Stunden können mitprotokolliert werden. Bei knapp 9000 
Betriebsstunden im Jahr läuft ads Ding nach ca. 11 Jahren über. Aber 
auch das könnte abgefangen werden (ist bei mir nicht nötig).

Syntax vom IAR.

MW

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich sollte es 100000 Zyklen heißen. aber am Ergebnis von 1666h 
ändert sich nichts.

Ich hatte das so gemacht: ich nehme 100 Bytes diese inkremeniere ich 
nacheinander z.B jede Minute(Byte1++,Byte2++...Byte100++,Byte1...)
Bekomme ich nun den Überlauf in Byte100 d.h. 255-> 0 so erhöhe ich nun 
Byte101. Bei Überlauf von Byte101->Byte102 inkrementieren usw. Somit 
kannst du nun 100*100000 Schreibzyklen für das EEprom nutzen. Man kan 
die Anzahl der Bytes auch erhöhen.
Man benötigt nur einen entsrpechenden Algoryhtmus für das Beschreiben 
und das Auslesen des EEprom.
Wenn du nämlich nach 100000 Schreibzyklen einen anderen Speicheradresse 
verwenden willst, musst du diese auch entsprechend abspeichern , damit 
du beim reboot weisst wo die Daten stehen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär's denn damit, den internen Komparator zu nutzen, um einen Abfall 
der Betriebsspannung zu erkennen, den Controller selbst jedoch, über 
eine Diode entkoppelt, aus einen Elko so lange weiter zu speisen, bis 
der Zählerstand aus dem RAM in den EEPROM geschrieben ist? Sicherlich 
löst dies nicht das Problem, daß ein Reset den zuletzt aufgelaufenen 
Zählerstand löscht, aber man spart EEPROM-Schreibzugriffe. Der 
Komparator (vergleicht Betriebsspannung am Eingang und am 
Überbrückungs-Elko), muß dann einen Interrupt auslösen. In der ISR 
schreibt man dann den Zählerstand ins EEPROM. Bis der Elko leer ist, ist 
das längst getan.

Autor: StinkyWinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Michael Wilhelm
> In der Initialisierung frage ich das EEPROM ab auf > 60000 (1000 Stunden
> Betrieb). Wenn größer, dann ist es das 1. Einschalten und alle Daten
> werden auf 0 gesetzt.

Das würde ich nicht machen. Nach 2.7 Jahren Betrieb würde die Anlage 
wieder neu geboren. Besser in Anschlag gehen und bleiben, dann weiss 
man, dass die Anlage alt ist.

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das würde ich nicht machen. Nach 2.7 Jahren Betrieb würde die Anlage
>wieder neu geboren. Besser in Anschlag gehen und bleiben, dann weiss
>man, dass die Anlage alt ist.

Verstehe nicht was du meinst.

MW

Autor: StinkyWinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Anlage 60000 + 1 Min gelaufen ist und dann aus- und wieder 
eingeschaltet wird, so würde mit diesem Ansatz der Zähler auf 0 gesetzt.

Autor: zolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry für den anhang in editor mein kollege bekommt das programm immer 
von mir und ich speichere ihm das in edietor weil er sagte das viel von 
euch das linux system drauf haben.

Autor: zolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann man denn keinen betriebsstunden zähler in das bisherige programm 
einbauen???

Autor: zolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
falls das nicht einfach auf die schnelle geht kann der 
betriebsstundenzähler auch notfalls weggelassen werden.
möchte mich an der stelle auch nochmal bedanken für die hilfe die ihr 
uns bisher gegeben habt. großes danke!!!
hab aber noch ne kleine frage: wir möchten gern zu unseren programm noch 
ein kleine wartezeit für ein ausgang einbinden. undzwar soll bei 
überschreitung der 25V eine wartezeit von ca. 60sek eingebunden werden. 
in den 60 sek soll der mikrocontroller aber die eingangsspannung ständig 
abfragen, vielleicht reicht es auch wenn er sie 5-10mal abfragt in der 
kurzen zeit. denn er soll nur schalten wenn er nach den 60sek noch über 
25V ist. geht das auch noch anders als mit ner schleife?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zolle wrote:
> sorry für den anhang in editor mein kollege bekommt das programm immer
> von mir und ich speichere ihm das in edietor weil er sagte das viel von
> euch das linux system drauf haben.


Ich behaupte mal ganz frech, alle Programmierer benutzen nen Editor, 
ohne Ausnahme.

Sie wenden allerdings nen kleinen Trick an, bei "save as" tragen sie 
z.B. "blabla.c" ein und oh Wunder, es wird als "blabla.c" abgespeichert.


Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zolle wrote:
> kann man denn keinen betriebsstunden zähler in das bisherige programm
> einbauen???

Oh. Man kann schon.
Das ist aber nicht die Frage. Die Frage ist: Kannst du das?
Immerhin ist es ja dein Projekt.
Anregungen wie man das machen könnte, hat es ja bisher zur
Genüge gegeben.

> geht das auch noch anders als mit ner schleife?
Ich würde mal sagen, jeder halbwegs vernünftige Programmierer
würde eine derartige Wartezeit auf jeden Fall anders als
mit einer Schleife lösen. Er würde dafür einen Timer
nehmen, der ihm die 60 Sekunden herunterzählt und wenn
sie um sind den gewünschten Schaltvorgang ausführen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Druckfrisch zum Thema. Es muss nicht immer im EEPROM gespeichert werden, 
der Prozessor kann auch Schlafen gehen.

Sleep Mode.

MfG
Falk

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.