Gast
#325670
nabend Leute.. Ich hätte da gerne ein Problem: Es sind die Laufzeiten zweier Motoren zu loggen. Man will also wissen wann und wie lange jeder Motor lief, wenn man später die geloggten Daten abruft. Ich hatte mir das so gedacht: Der AVR hängt an einem PC per USART. Man könnte natürlich den PC alles aufzeichnen lassen, dieser wird jedoch abends ausgeschalten. Daher will ich alles auf einem DataFlash ablegen. Da die Uhrzeiten relevant sind, muss auf dem PC die aktuelle Zeit abgespeichert werden, sobald man das Commando "Logge ab jetzt" zum AVR sendet und dieser autonom weitermacht. Da es 2 Motoren sind gibt es für jeden Motor den Zustand Ein(1) und Aus(0). ALso 2 Bit die man jeweils mit einer Zeit zusammen speichert. Meines Wissens ist es wohl nur möglich die vom "Logge ab jetzt"-Zeitpunkt abgelaufenen Sekunden (per Interupt Overflow) in ein Register hochzuzählen und immer wenn einer der beiden Pumpen den Status wechselt, sich die Sekunden im Register zusammen mit den Stati der beiden Pumpen in sagen wie 2 oder 3 Bytes des DataFlash zu legen. D.h. bei 3 Byte: 2 Bit Pumpen + 22 Bit Zeitinformation (abgelaufene Sekunden). Mit 22 Bit kommt man also auf 4194303 Sekunden = 48 Tage maximaler Zeit. Das reicht. Bis dahin soll man mal die Daten abgerufen haben. Die weitere Begrenzung ist dann nur vom DataFlash abhängig, aber schon bei 1MBit kommt man auf: 131072 Byte, also 43690 Byte-Trippel. Wenn ca. 20 mal pro Tag ein Pumpenstatuswechsel auftritt sind das: 43690/20 = 2184 Tage die man auskommt. Wenn man die Daten dann abruft, muss sich mein VB-Programm "nur" darum kümmern, aus den Sekunden auf die Uhrzeiten zurückzurechnen, da man den Anfangszeitpunkt (mit Datum) ja vorher gespeichert hat. Das ist so meim Plan sowas zu machen. Ich poste das hier, falls ich irgendwo groben Mist gemacht habe und mich vielleicht jemand drauf hinweist. Evtl. kann man das ja auch bisschen anders lösen? Bin gespannt! Danke schonmal!