Hallo, ich will die "Laufzeit" meiner Modelle mitprotokollieren. Bisher habe ich meiner Software einen Zähler für die Sekunden, Minuten und Stunden. Das klappt prima. Jetzt will ich das im EEPROM speichern, das ich einen Laufzeit Zähler habe. Jetzt kann ich ja nicht jede Minute die Zeit Prophylaktisch speichern, da wäre das EEPROM nach 70 Tagen hinüber. Den Fehler durch eventuell verlorene Sekunden Akzeptiere ich bewusst. Einen Pin mit Interrupt um die Spannungsversorgung zu Überwachen habe ich nicht mehr frei. Ich messe jedoch die Spannungsversorgung mit einem Analogeingang. Bisher jedoch nur alle 15 Sekunden um eine Unterspannung des Akku vorzubeugen. Jetzt meine Frage: Gilt die 100000 Zyklen pro Zelle oder pro "Page" des EEPROM ? Ich könnte einen kleinen Ringpuffer aufbauen und beim Start den Wert mit dem höchsten Eintrag verwenden. Also 10 direkt aufeinander liegende uint32_t Bereiche im EEPROM, die ich der reihe nach beschreibe und am Ende wieder von Vorne. Beim Start lese ich alle Werte ein und übernehme den höchsten Wert (Sonderfall überlauf lasse ich jetzt mal weg :) ). Aber bringt mir das mehr schreib Zyklen, also ca 700 Tage statt 70 Tage ? Danke Juergen
Jürgen Sachs schrieb: > Gilt die 100000 Zyklen pro Zelle oder pro "Page" des EEPROM ? Das gilt pro Zelle. Das hat keine Pages, sondern ist ein echtes und kein Möchtegern-EEPROM mit Flashspeicher. mfg.
> Prophylaktisch speichern, da wäre das EEPROM nach 70 Tagen hinüber Deine Modelle laufen tatsächlich 24 Stunden / 7 Tage die Woche durch? Ist das tatsächlich realistisch? > Ich messe jedoch die Spannungsversorgung mit einem Analogeingang. Bisher > jedoch nur alle 15 Sekunden um eine Unterspannung des Akku vorzubeugen. Was du brauchst ist eine kleine Spannungsreserve, so dass nach Ausfall der Versorungsspannung noch ein paar Milli-Sekunden Zeit bleibt um das EEPROM zu beschreiben. Wenn du Unterspannung feststellst hast du die paar Millisekunden zum Schreiben ins EEPROM immer noch. Deswegen ist der Akku nicht gleich kaputt. Alternativ kann man natürlich auch einfach nach einer gewissen Zeit einen anderen EEPROM Bereich zum Speichern benutzen. Die ursprünglichen Zellen als ungültig markieren und dann einfach die nächste benutzen. (Wobei die 100000 das sind was dir Atmel auf jeden Fall garantiert. Das EEPROM fällt ja nicht exakt nach dem 100000-ten Schreibzugriff aus.)
Ich wuerd pro Zeiteinheit nur ein einzelnes Bit schreiben. Besser waere etwas Vorwarnzeit, sodass man bei Spannungsunterbruch einen Wert schreiben kann. Die Vorwarnzeit erhaelt man, indem man die Spannung vor dem Regler uberwacht.
Jürgen Sachs schrieb: > Einen Pin mit Interrupt um die Spannungsversorgung zu Überwachen habe > ich nicht mehr frei. Ich messe jedoch die Spannungsversorgung mit einem > Analogeingang. Bisher jedoch nur alle 15 Sekunden um eine Unterspannung > des Akku vorzubeugen. Wie wird der Controller denn aus/abgeschaltet? Mit der Akkumessung funktioniert das ja nur, wenn der Akku Unterspannung hat. Wenn aber z.B. per Schalter einfach die Versorgungsspannung abgeschaltet wird, kannst du damit ja nicht das reguläre Laufzeitende erkennen. Sollte der Controller wirklich immer Laufen und nur durch Unterspannung ausgeschaltet werden, sollte es vollkommen ausreichen, nur bei zu niedrig gemessener Akkuspannung den Wert ins EEPROM zu schreiben. Ansonsten läuft der Zähler einfach im RAM. Und das sollte ja den Lebenszyklus des EEPROM nicht mal ansatzweise erreichen. Grundsätzlich stellt sich natürlich auch immer die Frage, wie genau das ganze sein soll. Wenn das Ding mehrere Jahre läuft, sollte es ja auf wenige Tage "verlorene" Zeit nicht ankommen. Also statt jeder Minute jede Stunde den Zähler inkrementieren. Was für Pins und wie viele wären überhaupt noch frei? Kurzum: Es gibt viele Lösungen, aber dazu sind mehr Infos erforderlich.
Also, das Modell läuft natürlich nicht 24/7, sonst müsste ich ja nicht ins EEPROM schreiben :-) Das es ein RC Modell ist (Truck), kann die "Arbeitszeit" Minuten und Stunden am Stück betragen. Wenn ich das richtig sehe muss, ist es das beste die Externe Spannung (Akku) mit dem Interrupt zu überwachen (INT0/1/2) des mega32. Die Akkus werden einfach abgesteckt oder per Schalter getrennt. Am Receiver könnte ich INT0/1 frei machen. Am Transmitter INT0. Die Akkuspannung beträgt 7,2V und geht unter last auch leicht auf 6,5V. Die CPU läuft im Receiver zwangsweise mit 5V (wegen den Servos). Also müsste ich eine Spannung unter 6V erkennen. Außerdem müsste der Spannungsregler am Ausgang höhere Spannung verkraften als am Eingang. Meines Wissens ist das zumindest am 7805 nicht empfohlen. Hat da jemand eine Schaltung zur Hand womit ich die Erkennung machen kann und eventuell die Schwelle einstellen kann ? Ein Smitt Trigger währe vermutlich auch nicht verkehrt ?
Jürgen Sachs schrieb: > Wenn ich das richtig sehe muss, ist es das beste die Externe Spannung > (Akku) mit dem Interrupt zu überwachen (INT0/1/2) des mega32. > Die Akkus werden einfach abgesteckt oder per Schalter getrennt. Wozu ein Interrupt? Die Spannung solltest entweder mit dem Analog Komparator oder einem ADC-Kanal überwachen.
Dann müsste ich die Versorgungs Spannung aber sehr schnell abtasten. Der Prozessor hat ja auch noch was anderes zu tun ;-) Bisher passiert das immer in der langen "Mainline" while. Ohne Zeitzwang.
Jürgen Sachs schrieb: > Dann müsste ich die Versorgungs Spannung aber sehr schnell abtasten. alle paar Millisekunden... Solange deine Pufferung groß genug gewählt wurde, sollte das kein Problem sein. Jürgen Sachs schrieb: > Außerdem müsste der Spannungsregler am Ausgang höhere Spannung > verkraften als am Eingang. Meines Wissens ist das zumindest am 7805 > nicht empfohlen. Dafür gibt es solche Dinge wie Dioden...
Jürgen Sachs schrieb: > Dann müsste ich die Versorgungs Spannung aber sehr schnell abtasten. > Der Prozessor hat ja auch noch was anderes zu tun ;-) Alle paar Millisekunden den Akku nachsehen kostet dich weniger als ein Zehntel Prozent Prozessorleistung.
Das beste dürfte doch der schon genannte Analogkomparator sein. Die Akkuspannung mit einem simplen Spannungsteiler so runterteilen, daß die gewünschte Schwellspannung genau der internen Spannungsreferenz des Atmegas entspricht. Die verschiedenen Atmega-Serien haben unterschiedliche Spannungsreferenzen, schau im Datasheet nach. Entweder 2,5V oder 1,1V sind gängig. Wenn die Akkuspannung dann unter den Wert fällt löst der Analogkomparator aus und Du bekommst nen Interrupt.
Jürgen Sachs schrieb: > Jetzt kann ich ja nicht jede Minute die Zeit Prophylaktisch speichern, > da wäre das EEPROM nach 70 Tagen hinüber. Fuer sowas gibt es FRAM. http://www.ramtron.com/products/nonvolatile-memory/
Fabian schrieb: > Ein ds1307 hast Du nicht zufällig dran? Leider Nein. Auch wenn ich schon I2C nutze, würde ich mehr Bauteile gerne vermeiden...
Gerd E. schrieb: > Das beste dürfte doch der schon genannte Analogkomparator sein. Die > Akkuspannung mit einem simplen Spannungsteiler so runterteilen, daß die > gewünschte Schwellspannung genau der internen Spannungsreferenz des > Atmegas entspricht. > > Die verschiedenen Atmega-Serien haben unterschiedliche > Spannungsreferenzen, schau im Datasheet nach. Entweder 2,5V oder 1,1V > sind gängig. > > Wenn die Akkuspannung dann unter den Wert fällt löst der > Analogkomparator aus und Du bekommst nen Interrupt. Eben geprüft, könnte ich im Receiver machen, aber am Transmitter hängt dort ein 8 Bit Datenbus am Port. Ich werde jetzt mal ein wenig testen, wie ich das hin bekomme. Ein Spannungsteiler an AIN1 bringe ich noch gut unter im Receiver. Im Transmitter kann man die Batterie nicht einfach entfernen, hier knoble ich im Moment an einem "Softpower" statt einem richtigen Schalter. Ein PNP, der von einem Schalter auf "0" angesteuert wird und danach vom Prozessor gehalten wird, sollte nicht das Problem sein. Dann weiß ich wann abgeschaltet wird und kann speichern. Das ich den Analog Comperator auch auf eine Interne Referenz legen kann, wusste ich noch gar nicht :-) Ich muss mir nur noch Gedanken machen, wegen der Spannungsüberbückung im RX. Da hängt ja noch ein Funkmodul dran an der gleichen Spannungsversorgung. Und die zieht richtig Strom. Danke mal soweit.
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.