mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATTiny25 Watchdog-Wakeup


Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datei isrs.S

Gruß Hagen

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.