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.
Also ich experimentiere mit BASCOM Wie groß könnte den der Wert im Eeprom eigentlich werden? wird der nich irgendwann mal voll? Dankeschön
ein im sekundentakt erhoehter unsigned 32-bit-wert wuerde nach 8171.55 jahren ueberlaufen...
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.....
Hi ich ging davon aus die Rohspannung zu überwachen, nicht die 5Volt-Seite. mfg Phil
Und dann nimmt man den L-Typen, der werkelt bis auf 2.7V runter, oder einen P, der schreibt noch mit 1.8V
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.