Archiv verlassen und diese Seite im Standarddesign anzeigen : wie kann ich 1 messung täglich durchführen?
ich möchte einen messzyklus pro tag durchführen (dauert nur wenige sekunden) und die daten dann im eeprom abspeichern.
1. wie kann ich ein genaues zeitintervall bestimmen für die messung , so dass ich während eines jahres keine verschiebungen habe (der wait-befehl soll ja nicht sehr genau sein)?
2. kann ich den microcontroller für den rest des tages in einen schlafzustand versetzten, ohne dass daten des programms veroren gehen ( z. b. fortlaufende speicheradressierung für das eeprom..)?
gruß
holger
1. z.B. in dem man eine RTC extern laufen lässt
2. Das ist der Sinn des EEPROMS
danke, aber wie sieht das ganze in der praxis aus (möglichst simpel)?
ich biie um etwas mehr ausführlichkeit, da ich damit nichts anfangen kann!
Wie wird die Schaltung denn betrieben? Trafo oder Schaltnetzteil? Wenn Trafo, würde der ja auch nur unnötig Leistung verbrauchen. Selbst bei nehm SNT.
Wie wäre es dann mit einer Zeitschaltuhr, die einmal täglich für eine kurze Zeit an geht? Dann muss das Programm nur der Wert erfassen und speichern. Danach wird die Spannung ja unterbrochen, was noch besser als Sleep ist.
Beim Starten kannst du dann den EEPROM auslesen und siehst irgendwann, ab welcher Adresse er noch frei ist und kannst da den Wert reinschreiben.
Wenn das ganze mit Akkus oder so betrieben wird, wäre es besser eine externe RTC (Real Time Clock) zu verwenden. Der Timer des AVR wäre auf ein Jahre gerechnet zu ungenau.
Soviel erstmal dazu. Mehr Hilfe gibt's nach mehr Infos von dir zur Anwendung.
die stromversorgung ist noch ungewiss bzw. muss ich mir noch überlegen.
ich dachte schon an netzteil. akku ist ja auch ungewiss über den zeitraum eines jahres...
einen geringen verlust nehme ich in kauf.
zeitschaltuhr ist sicher eine prima idee, doch ich dachte ich muss den chip versorgungstechnisch aufrechterhalten, damit er eben keine daten verliert.
auch die möglichkeit, den eeprom auszulesen, um die freie stelle zu ermittelt ist sicher eine gute idee, doch ich kann das ins programm nicht smehr reinschreiben, da ich an der kapazitätsgrenze des demoprogrammes bin.
außerdem ist das wohl schwierig.
gibt es nicht eine möglichkeit, so dass das programm einfach angehalten wird und auf strom-minimalverbrauch geht?
mir wäre es zudem lieber, programmiertechnisch eine lösung für den timer zu finden. wenige stunden differenz/jahr würde ich in kauf nehmen.
holger
Den EEPROM auslesen um die freie Stelle zu ermitteln ist nicht viel Code. Evtl lässt sich dein Programm ja auch noch etwas optimieren.
Der EEPROM behält die Daten auch ohne Strom. Auch über viele Jahre hinweg.
Du hast ja 4kB zur Verfügung. Damit lässt sich einiges machen. Eine Messung durchführen braucht ja auch nicht viel Code.
Benutzt du denn schon einen Timer? wenn Nein, braucht der auch wieder Code. Und der AVR wird dann jede Sekunde (oder je nachdem wie der Intervall ist) wieder geweckt.
Du kannst einen Quarzoszilator nehmen, der ist genauer als ein Quarz. Dann der Overflow des Timer genau berechenen (sichern der Register mit einbeziehen) und die Schaltung über eine Woche laufen lassen und Zeitdifferenzen im Programm nochmal anpassen. Aber eine RTC ist genauer. Braucht aber auch Code.
danke für die hilfe, ich denke ich weiß nun wie ichs mache:
das programm habe ich schon zusammengekürzt.
als timer nehme ich eine zeitschaltuhr, an die ich ein netzteil hänge.
das programm findet nach stromzufuhr nun die anfangsstelle im eeprom jund misst dann. vorher lade ich ins eeprom lauter nullen. die messwerte können den wert 0 nicht annehmen, somit erkennt das programm die erste noch nicht beschriebene stelle (ist eben die erste 0).
Das war auch so mein Gedanke. In einer Schleife den EEPROM auslesen. Wenn der Inhalt ein Wert hat, ist er da schon belegt. Wenn nicht, den Zähler merken und dort den Messwert ablegen.
Allerdings hätte ich die 255, die in den Zellen stehen gelassen, sofern ein Messwert nicht 255 werden kann. Aber das macht ja keinen großen Unterschied außer das es so kompatibler zu neuen AVRs ist wo man evtl nicht dran denke den EEPROM mit 0 zu beschreiben.
Aber du solltest im EEPROM die Zelle 0 nicht beschreiben. Diese kann nach einem Reset gelöscht werden. Dazu gibt es von Atmel auch eine AppNote.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.