ich habe ein Arduino Pro Mini mit einen Atmega168P und möchte den Schlafmodus nutzen.
Und zwar soll das Board alle 15 min. aufwachen und die loop einmal ausführen. Außerdem soll das Board aufwachen, wenn ein Digitaler Eingang (Pin D2) von seinem Normalzustand low durch einen Schalter auf high wechselt, und die loop einmal ausführen. Nach Ausführen der loop soll der Timer wieder bei 0 starten, egal ob der Schlafmodus nach den 15 min. oder durch den Digitalen Eingang beendet wurde.
Grund für den Schlafmodus ist ein Akkubetrieb, bei dem der Akku möglichst lange halten soll.
Ich konnte im Netz leider keine Variante finden, die beides ermöglicht und hoffe, das dies überhaupt möglich ist.
Das zeitgesteuerte Wecken, kannst du per WDT oder über einen der Timer erledigen.
Aber 15 min?
Eher in Etappen.
Wenn es "genau" 15 Minuten sein sollen, wäre ein Impuls von Extern erforderlich. Oder von Resonator auf Uhren Quarz umrüsten.
Und zum Wecken, über positive Flanke, eignet sich der PCINT
Ich konnte im Netz leider keine Variante finden, die beides ermöglicht und hoffe, das dies überhaupt möglich ist.
Danke erstmal.
Ich erwarte von euch natürlich keinen fertigen, funktionstüchtigen Code, sondern wollte lediglich einen möglichen Ablauf in Erfahrung bringen.
Ich hab mir jetzt folgendes überlegt:
Der WatchDog Timer löst einen Reset nach einer gewissen Zeitspanne (max. 8 sec) aus und der Sketch beginnt von vorne. Um 15 Minuten Schlafmodus umsetzen zu könne müsste ich also das Arduino mindestens 113 mal Schlafen lassen. Hierfür benötige ich einen Counter (=113), den ich vor jedem Schlafen um 1 erniedrige und im EEPROM abspeichere. Steht der Counter bei 0, führe ich meine loop ganz normal aus und setze den Counter auf 113.
Wäre das soweit eine gute Lösung?
Allerdings ist mir nicht ganz klar, wo der PCINT eingreifen müsste und was er genau bewirkt.
Da der EEPROM nur 100 000 Schreibzyklen garantiert, läuft Dein System 9,25 Tage mit Garantie.
8 Sekunden * 100 000 = 800 000 / 3600 = 222,22 Stunden / 24 = 9,25 Tage
Ich würde einen FRAM empfehlen.
Gruß Tommy
Edit: z.B. einen FM24C64B (ich gehe von 5V-Betrieb aus) den kannst Du über einen Pin versorgen (und abschalten, wenn Dich der Standbyverbrauch stört), der braucht nur 400µA im Betrieb und 10 µA in Standby