Tag, ich hab mir ne Fernbedienung programmiert. Nun möchte ich den Controller(AVR) bzw. die Fernbedienung ausschalten, wenn sie eingeschaltet ist und ne Zeitlang nichts gemacht wurde. Was gibt es da für Möglichkeiten? Gruß Björn
Sleep-Modes sind klar, hab ich auch schon programmiert. Die Frage war wohl etwas falsch gestellt. An welche Bedingungen könnten sich die Sleep-Modes denn dann orientieren?
An die Zeit seit dem letzten Tastendruck. Ist doch simpel: Timer aufsetzen und eine Uhr realisieren. Wenn eine bestimmte Zeit vergangen ist -> Sleep. Wo liegt das Problem?
Man könnte auch bei jedem Tastendruck den Watchdow-Timer zurücksetzen, dann zu Beginn des Programms nachgucken, wer den Reset ausgelöst hat und dann den Controller schlafen schicken. (Das Nachgucken kann man sich vermutlich auch sparen...)
Das mit dem Tastendruck wäre nicht so das Problem. doch die Tasten haben eher ne Nebenfunktion. Hauptaugenmerk wollte ich auf die Potis legen, also die AD-Wandler des µC. Doch wie frag ich nen AD-Wandler in solch einem Fall ab?
Das geht genauso, man hält sich im Speicher die "alten" Werte der A/D-Wandler vor und vergleicht sie mit den neuen. Sind Unterschiede da, wird noch an den Potis rumgerührt, sind keine Unterschiede da, ist irgendwann die Abschaltbedingung erfüllt. Ich würde einen Zähler einführen, der z.B. im Sekunden-Takt aufwärts gezählt wird. In der A/D-Abfrage wird dieser Zähler immer dann auf 0 gesetzt, wenn ein A/D-Wert sich ändert. Ändert sich eine Zeit lang nichts, läuft der Zähler irgendwann über einen festzulegenden Schwellenwert. Etwas tricky ist das Rauschen der A/D-Wandler, man müsste sich mal anschauen, wie groß das tatsächlich ist und evtl. eine Schwelle einbauen oder einen Filter realisieren.
Die Frage ist doch, wie weckst Du den Controller wieder? Die verschiedenen Sleep-Modes lassen auch nur einige Weck-Quellen zu. Je tiefer der Controller schläft, also je mehr abgeschaltet ist, desto weniger Möglichkeiten bleiben. Bei den wirklich stromsparenden Modi bleibt nur noch das schalten an einer externen Interruptleitung übrig. Den Controller schlafen zu schicken, ist kein Problem. Wie oben erwähnt, einen Timer programmieren und eine Variable hochzählen. Wenn diese einen bestimmten Wert erreicht hat, den Controller pennen lassen. Jede Aktion von außen durch sich ändernde Werte oder Tastendrücke löschen die Variable.
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.