Forum: Mikrocontroller und Digitale Elektronik ATTiny25 Watchdog-Wakeup


von Georg (Gast)


Lesenswert?

Hallo

Möchte gern eure Meinung zu meiner Idee hören ob das überhaupt möglich 
ist:

Ich mach ne Schaltung die später mit Batterie betrieben werden soll, 
insofern muss ich ja besonders auf den Stromverbrauch achten.

Der Programmablauf schaut folgendermaßen aus.

Programmstart - ADC-Messung - do something - 3 Stunden warten(Timer1) - 
ADC-Messung usw

Um nun die 3 Stunden nicht sinnlos in der while(1) Schleife zu 
verbringen möcht ich nun nach - do something - den µC in den Power-Down 
Modus schicken.

Das Problem besteht eben nun darin die 3 Stunden zu ermitteln (der 
Idle-Modus wär ja auch ne alternative, jedoch würde ichs echt gern mit 
dem Power-Down Modus schaffen), was bis jetzt eben durch den Timer 
geschah...ein weiteres Problem besteht darin das die Wartezeit variable 
ist (wird aus den Werten der ADC-Messung berechnet).

Da der Watchdog auch quasi als Timer verwendet werden kann, möcht ich 
nun versuchen das Problem so zu lösen:

Die maximale Timout-Zeit beim Tiny25 beträgt 8sec, der µC wird jetzt 
alle 8sec aufgeweckt und springt zur WD-ISR(dort muss ich im Grunde nur 
WDIE setzen damit beim nächsten Mal wieder der WD zur ISR springt) 
danach befindet sich der µC ja wieder im Active Mode und der Timer1 ist 
wieder aktiv.

(falls ich das jetzt alles richtig verstanden hab was ich bis jetzt 
gelesen hab)

Die ISR vom Timer1 schaut dann folgendermaßen aus

ISR-Timer1 (overflow)
{
   zaehler++;
   if(zaehler >= wartezeit)
   {
      do something;
   }
   else <Power-down-Modi>

}

danach falls die zeit noch nicht um ist eben wieder in den power-down 
und nach 8sec wieder das gleiche bis die zeit um ist..

die richtige berechnung mit der zeit macht mir noch kopfzerbrechen...und 
obs überhaupt möglich ist das ganze so zu realisieren oder obs ne 
bessere möglichkeit geben würde...

bin für jeden ratschlag dankbar :)

lg

von Hagen R. (hagen)


Lesenswert?

Schau mal hier rein Beitrag "Glühwürmchen in Rotkohlglas gefangen"
Dort habe ich auch mit variablen WDT Zeiten gearbeitet. Die theoretische 
Auflösung beträgt +-16ms die praktische Gesamtgenauigkeit hängt aber vom 
WDT Oszillator ab und ist damit nicht sonderlich genau.
Es wird ebenfalls die WDT ISR benutzt. Du musst in WDTCR nur das WDIE 
Flag und nicht das WDE Flag setzen. Damit ist der WDT immer mit der 
WDT-ISR aktiv und innerhalb der ISR musst du das WDIE Flag nicht erneut 
setzen.

Wozu du noch den Timer1 benötigst ist mir nicht ganz klar, mit dem WDT 
alleine geht das.

Gruß Hagen

von Georg (Gast)


Lesenswert?

hey

ja stimmt im grunde brauch ich den timer1 dann gar nicht mehr..

wegen dem WDIE...kann ichs trotzdem in der ISR nach meiner zeitabfrage 
setzen oder wirds dann trotzdem hardewarenäßig gelöscht nachdem die isr 
ausgeführt worden ist und ich muss es im hauptprogramm immer setzen nach 
der isr?

lg

von Hagen R. (hagen)


Lesenswert?

Der WDT in neueren AVRs kann auf drei verschiedene Arten aktiviert 
werden.
1.) WDE
2.) WDIE
3.) WDE und WDIE

1.) AVR geht in RESET beim Auslösen des WDT
2.) AVR ruft permanent WDT-ISR auf, ISR muß WDIE nicht explizit neu 
setzen
3.) AVR ruft einmalig WDT-ISR auf. Dabei wird per Hardware das WDIE Flag 
in WDTCR gelöscht ! Setzt man das WDIE Flag in der ISR nicht von Hand 
neu so wird der nächste WDT einen RESET auslösen statt die WDT-ISR 
aufzurufen

Gruß hagen

von Georg (Gast)


Lesenswert?

kk alles klar, nagut auf der einen Seite ist sicher die 2 Möglichkeit 
die bequemste auf der anderen Seite habe ich bei der 3ten noch 
zusätzlich eine Absicherung.

Nagut mal schauen aber du hast mir echt weitergeholfen danke

lg

von Georg (Gast)


Lesenswert?

k ich brauch also nur WDIE setzen um den WD einzuschalten? richtig oder?

wie schauts jetzt aus wenn ich den WD wieder ausschalten möchte für die 
Dauer der Messung?
Einfach das Bit wieder löschen oder muss die Prozedur lt Datenblatt 
Safety Level 1 durchführen?

lg

von Georg (Gast)


Lesenswert?

k da is doch noch mehr..hab mir jetzt dein programm angeschaut nur kann 
ich dort die ISR vom WD nicht finden..bin ich blind? ich brauch nähmlich 
den Vektor für die ISR ;(

lg

von Hagen R. (hagen)


Lesenswert?

Datei isrs.S

Gruß Hagen

von Georg (Gast)


Lesenswert?

hm k das isn pwm-beispiel und sofern ich nix überlesen hab kommt da kein 
wd vor...habs nun in der iotnx5.h gefunden..

lg

von Georg (Gast)


Lesenswert?

k und du hast natürlich die datei gemeint die in firefly dabei ist und 
nicht die, die im winavr drinnen ist...es is eindeutig zu heiß...

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
Noch kein Account? Hier anmelden.