Attiny 84 Sleep-WatchDog

OP #5662289
Lesenswert?

Hi,
ich möchte einen ATtiny84 energiesparend beutzen. Dafür benötige ich 
sowas wie ein Watchdog. Der soll den µC aber nicht nach einer bestimmten 
Zeit neustarten, sondern nur in den Sleep-Modus versetzen und den ADC 
abschalten.
Danach soll er über einen Taster wieder aufgeweckt werden und die ADCs 
sollen wieder eingeschaltet werden.
Gibt es irgendeine funktion für die Arduino IDE, die sowas kann?

Viele Grüße und schöne Vorweihnachtstage
Flo S
Gast #5662305
Lesenswert?

Also meine Kristallkugel sagt mir das du den Tiny nach einer gewissen 
Zeit ohne Interaktion schlafenlegen willst und dann irgendwann über nen 
Pin Interrupt aufwecken willst. Richtig?

Zu blöd das ich von der Arduino IDE keinen Schimmer hab, normal würde 
ich das über nen Zähler machen der im Timerirgendwas Überlauf Interrupt 
hochgezählt und abgefragt wird und bei jeder entsprechenden Aktion 
wieder auf 0 zurück gesetzt wird. Dann nur noch eine kurze 
Schlaffunktion die aus dem Timer aufgerufen wenn die Abfrage ergeben hat 
das eine entsprechender Wert erreicht wurde.
Gast #5662311
Lesenswert?

So macht man das:
1
timer_t start=milliseconds();
2

3
for (;;) //for ever
4
{
5
    if (taste gedrückt) 
6
    {
7
        start=milliseconds();
8
        // auf den Tastendruck reagieren
9
    }
10

11
    timer_t now=milliseconds();
12
    if (now-start>10000) // 10 Sekunden nichts los
13
    {
14
        // Sleep Modus aktivieren
15

16
        // nach dem Aufwachen:
17
        start=milliseconds();
18
    }
19
}

Timer auf 0 setzen ist keine gute Idee, wenn man noch andere Dinge daran 
messen will.
OP #5662445
Lesenswert?

Stefanus F. schrieb:
> So macht man das:timer_t start=milliseconds();
>
> for (;;) //for ever
> {
>     if (taste gedrückt)
>     {
>         start=milliseconds();
>         // auf den Tastendruck reagieren
>     }
>
>     timer_t now=milliseconds();
>     if (now-start>10000) // 10 Sekunden nichts los
>     {
>         // Sleep Modus aktivieren
>
>         // nach dem Aufwachen:
>         start=milliseconds();
>     }
> }
>

Super!
Ich werden das morgen mal ausprobiren.
Gast #5662455
Lesenswert?

@Flo S.
Dazu brauchst du doch den WD nicht.
Dein Prozessor soll einfach seine Aufgabe ausführen und wenn er fertig 
ist, schicke ihn in den Tiefschlaf.
Den Taster lässt du den INT0-Interrupt bedienen, um den μC wieder 
aufzuwecken. Du musst dazu eine IRQ-Routine, ggf. leer, installieren.
Er setzt dann die Bearbeitung nach dem Sleep-Befehl wieder fort.
#5662636
Lesenswert?

Flo S. schrieb:
> ich möchte einen ATtiny84 energiesparend beutzen. Dafür benötige ich
> sowas wie ein Watchdog. Der soll den µC aber nicht nach einer bestimmten
> Zeit neustarten, sondern nur in den Sleep-Modus versetzen und den ADC
> abschalten.

Man kann den Watchdog auch im Interrupt-Mode benutzen wie jeden anderen 
Timer auch.

Flo S. schrieb:
> Danach soll er über einen Taster wieder aufgeweckt werden und die ADCs
> sollen wieder eingeschaltet werden.

Die ADCs? Ein Attiny84 hat nur einen ADC mit mehreren gemultiplexten 
Eingängen. Willst du analoge Spannungen messen?

Flo S. schrieb:
> Gibt es irgendeine funktion für die Arduino IDE, die sowas kann?

Mit Sicherheit, leider kenne ich mich damit zu wenig aus.

Aber wie schon gesagt wurde: Warum den Attiny mit dem Watchdog schlafen 
legen? Einfach den Attiny seine Arbeit machen lassen und wenn er fertig 
ist legst du ihn schlafen. Der Taster bekommt einen Interrupt und weckt 
den Attiny wieder auf.
Was man natürlich machen kann ist, den Watchdogtimer als Taktquelle des 
Attinys benutzen. Das drückt den Energiebedarf insbesondere im Sleep 
enorm.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren