Forum: Mikrocontroller und Digitale Elektronik Betriebsstundenzähler mit Atmega


von kollimann (Gast)


Lesenswert?

Hallo
Ich hatte ja mal angefangen eine Temperaturanzeige mit dem Atmega8 und 
den DS1820 zu bauen, das funktioniert auch schon recht gut.

Nun hab ich mir noch überlegt, könnte man nun nicht gleich in dieses 
Projekt einen Betriebstundfenzähler mit einbauen?

Also ich dachte irgendwie das der Atmega jede Sekunde einen Zahlenwert 
erhöt, diesen Zahlenwert könnte man dann ja aus Sek in Stunden 
umrechenen?

Geht sowas? wie merkt sich der Atmega aber den Zahlenwert wenn ich das 
gerät ausschalte?

Bin Anfänger und hab mit der Suche nix gefunden.

Danke für die Hilfe
kollimann

von M.A.N (Gast)


Lesenswert?

wäre nett wenn du die prog. sprache angeben würdest.

von Nealpotter (Gast)


Lesenswert?

Tja, irgendwo wird ein nicht-flichtiger Speicher sein muessen.... zB das 
EEPROM. Dort solte man allerding nicht immer dieselbe Speicherstelle 
incrementieren.

von kollimann (Gast)


Lesenswert?

Also ich experimentiere mit BASCOM

Wie groß könnte den der Wert im Eeprom eigentlich werden? wird der nich 
irgendwann mal voll?

Dankeschön

von déjà vu (Gast)


Lesenswert?

ein im sekundentakt erhoehter unsigned 32-bit-wert wuerde nach 8171.55 
jahren ueberlaufen...

von déjà vu (Gast)


Lesenswert?

oh, faktor 60 zuviel... also schon nach 136.19 jahren.

von Εrnst B. (ernst)


Lesenswert?

Wenn du nen 32Bit Wert im EEPROM Speicherst und Minuten darin 
hochzählst, reicht der ne ganze Weile

Also über 8000 Jahre. Sollte reichen.
Wenn du aber immer dieselbe Speicherstelle nimmst, geht die irgendwann 
kaputt (->Datenblatt).

Also mehr Speicherstellen im EEPROM reservieren, und die Schreibzugriffe 
darüber verteilen.

/Ernst

von Phil (Gast)


Lesenswert?

Hallo

es gibt verschiedene Möglichkeiten.

Eeprom wäre 1 Weg.

Aber: Muss es sekundengenau sein?

Selbst wenn man jede Eepromzelle (512Byte Eemprom angenommen) alle 
Sekunde beschreibt und das 100.000 mal ist nach gut 1,5 Jahren 
Betriebsdauer Schluss.

Je nachdem wie oft/lange das Gerät läuft ist das nicht sonderlich viel.


mfg Phil

von kollimann (Gast)


Lesenswert?

Nö also eigentlich muss es nicht Sekundengenau sein, ich dachte nur das 
dies der einfachste weg sei?

Ich weiß ja nicht wie ich sonst dem Atmega einen Zeit/Takt ablocken 
soll?

Naja evtl. könnte man ja erstmal einfach nur die Sekunden zählen lassen 
und erst nach 1min also 60sek ins Eeeprom schreiben? das spart schonmal 
60mal schreiben pro min.

Oder hab ich das jetzt Total falsch verstanden?

von Chris (Gast)


Lesenswert?

genau so kannst du es machen, wenn du das gerät ausschaltest verlierst 
du max. 1min, und wenn es sich um einen BetriebsSTUNDENzähler handelt, 
gehe ich davon aus das eine Minute nicht sonderlich ins Gewicht 
fallen...

Dann kannst du einfach ne schleife machen und lässt jedes mal eine 
andere Speicherzelle beschreiben, beim ersten auslesen gehst du alle 
durch und suchst nach dem höchsten wert. Den benutzt du dann als 
referenz zum weiterzählen.

gruß,

von Björn W. (bwieck)


Lesenswert?

Du kannst ja auch den ATMega mit einem kleinen Akku oder GoldCap 
puffern.
Wenn das Gerät dan ausgeschaltet wird kann das der AVR erkennen und den 
aktuellen Wert ins EEPROM schreiben und sich danach schlafen legen.

Grüße
Björn

von Der M. (steinadler)


Lesenswert?

Mach nen dicken Elko vor deine Schaltung, und lege den 
Versorgungsspannungseingang auf nen AD-Wandler.
Sobald die Spannung abfällt, sicherst du den Wert. (Der Strom hierfür 
muss vom Elko geliefert werden).
Die 100.000 Schreibzyklen errechnen sich dadurch nicht durch das 
Hochzählen, sondern durch die Ein/Aus-Quote.
Du könntest auch vorm Schreiben prüfen, ob nicht etwa schon dieselbe 
Zahl im EEprom steht... das spart auch wieder...

von kollimann (Gast)


Lesenswert?

Naja wobei mir ja dann eigentlich immer 1min fehlt wenn ich das Gerät 
nach 10,30min Laufzeit ausschalte.
Wenn man das 60mal macht fehlt schon 1 ganze Stunde auf dem 
Betriebsstundenzähler.

evtl. könnte man das mit einem Elko und einer Spannungsreferenz am 
Atmega "abfedern" ? so nach dem Motto fällt die Spannung unter ?V (würde 
ja bedeuten Gerät aus) dann schreibe den Wert ins Eeprom?

Würde sowas Sinn machen? Dann bräuchte ich ja dann auch nicht jede 
Minute ins Eeprom schreiben?

von kollimann (Gast)


Lesenswert?

Oh da waren einige schneller mit der Idee

von Phil (Gast)


Lesenswert?

Hi

ja Akku/Goldcap/Kondensator das ist dann die elegante Variante die aber 
etwas Hardwareaufwand/änderung erfordern würde.
Du brauchst dann einen ADC-Kanal oder n Comparator um die 
Versorgungsspannung zu überwachen. Vielleicht reicht auch ein 
Eingangspin. Aber das kommt auf deine Spannungsversorgungsschaltung an.
Unterschreitet die Spg einen bestimmten Wert speicherst du deinen 
Zählwert ins Eeprom.



mfg Phil

von Andreas K. (a-k)


Lesenswert?

> Du brauchst dann einen ADC-Kanal oder n Comparator um die
> Versorgungsspannung zu überwachen. Vielleicht reicht auch ein
> Eingangspin.

Sowas geht rein intern, ohne Eingang. AREF=Vcc, ADMux=Referenz. Liefert 
halt das inverse Ergebnis.

von kollimann (Gast)


Lesenswert?

Ja im Moment hab ich die Spannungsversorgung mit einem 7605 gemacht.
Eigentlich "so wie es oft beschrieben ist"

Als Überwachung sollte doch der AREF oder der AVcc Pin am Atmega8 gehen?

Ja nun müsste man das mal berechnen was wie groß der Elko sein müsste,
das LCD usw. brauch ich ja nicht mit rechnen ODER? Eigentlich gehts doch 
nur um die Spannung am Referenseingang?

Puh, naja obwohl, ich brauch ja den Strom auch noch zum schreiben und 
wenn am Referenseingang die Spannung sinkt brauch ja der Atmege trotzdem 
noch genug Saft um zu schreiben.

Oh oh, da hab ich mir wieder was ausgedacht.....

von Phil (Gast)


Lesenswert?

Hi

ich ging davon aus die Rohspannung zu überwachen, nicht die 5Volt-Seite.


mfg Phil

von Nealpotter (Gast)


Lesenswert?

Und dann nimmt man den L-Typen, der werkelt bis auf 2.7V runter, oder 
einen P, der schreibt noch mit 1.8V

von Björn W. (bwieck)


Lesenswert?

kollimann wrote:
> Ja im Moment hab ich die Spannungsversorgung mit einem 7605 gemacht.
> Eigentlich "so wie es oft beschrieben ist"
>
> Als Überwachung sollte doch der AREF oder der AVcc Pin am Atmega8 gehen?
>

Das ist schlecht, damit würdest du den Puffer überwachen.
Wenn der Puffer leer ist ist es zu spät.

Grüße
Björn

von kollimann (Gast)


Lesenswert?

Ich nutze einen Atmega8 L.......

naja werd mal was zusammen bauen, mal bissel testen, mal sehen ob ich 
was brauchbares hinbekommen.


Danke für die Hilfe

weiter Ideen und Vorschläge natürlich immer erwünscht

von MAX (Gast)


Lesenswert?

@kollimann

schau dir mal die DS1307 bzw. DS1337 RTCs von Dallas Semiconductor an, 
die haben einen ca 32Byte großen NV-RAM (battery backuped), dann must du 
dir keine gedanken machen, ob du immer an die gleiche stelle im speicher 
schreibst wie beim eeprom.

alternativ könntest du das auch mit einer Binary Counter RTC (z.B. 
DS1672) machen. da wird im sekundentakt ein 32Bit wert hochgezählt.

http://datasheets.maxim-ic.com/en/ds/DS1672.pdf

die ganzen bausteine sind über I²C angeschlossen, gibts aber bestimmt 
mit SPI oder 1-Wire auch.

gruß
MAX

von kollimann (Gast)


Lesenswert?

Versteh ich das richtig?

Diese DS zählen allein Sekunden, Minuten usw, und wenn der Strom weg ist 
hören die auf zu zählen und merken sich den letzten Wert?
Wenn dann der Strom wiederkommt zählen die vom letzten Wert weiter?

Das wäre ja dann am einfachsten?

von kollimann (Gast)


Lesenswert?

Als 1Wire wäre dann der DS 2417 geeignet?

von MAX (Gast)


Lesenswert?

@kollimann

stimmt, das hab ich gar nicht bedacht. wenn der strom weg ist, dann 
zählt er weiter. ich weiß nur, dass man den oszillator per software 
stoppen kann. man müsste schauen, obs so ein counter mit einem externen 
enable pin geben würde. den es wird nicht die beste lösung sein, den 
oszillator zu stoppen, wenn der uC keine spannung mehr hat. könnte man 
eventuell mit einem low voltage detector machen. manche PICs haben 
soviel ich weiß einen Interrupt für eine Low voltage protection.

vielleicht war das ja hilfreich für dich ;-)
MAX

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.