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