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
Tja, irgendwo wird ein nicht-flichtiger Speicher sein muessen.... zB das
EEPROM. Dort solte man allerding nicht immer dieselbe Speicherstelle
incrementieren.
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
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
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?
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ß,
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
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...
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?
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
> 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.
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.....
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
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
@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
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?
@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