hallo, hier mein erster beitrag und eine frage, die mich im moment extrem beschäftigt, bis hin zum wahnsinn. 1. ich möchte den watchdog im ATtiny13 im interrupt modus betreiben. ich setze in der initialisierung folgenden code ein wdr ; WDCE=1, WDE=1 ldi r16,0b00011000 out WDTCR,r16 ; WDCE=0, Interrupt=enabled, WDE=0, set prescaler ldi r16,0b01000001 out WDTCR,r16 wdr sei der watchdog denkt aber überhaupt nicht daran einen interrupt auszulösen. watchdog reset funktioniert tadellos (WDE=1), brauch ich aber nicht. was mache ich falsch? 2. wie teile ich dem avr-studio im debugging/simulatormodus mit, dass bei der cpu bestimmte fuse-bits programmiert sind, damit die simulation entsprechend funktioniert. 3. wie lasse ich im editorfenster die zeilennummer anzeigen? für tipps oder links zum nachlesen wäre ich sehr dankbar, die hilfe hinter dem help-button im avr-studio war nicht sehr erhellend. vielen dank
hallo, niemand hier einen tipp? hat das noch niemand ausprobiert? ich habe den eindruck, dass der watchdog überhaupt nicht startet. wde=0 steht aber ausdrücklich im datenblatt. wenn ich wde=1 setze funktioniert der watchdog, nur eben mit reset und das will ich nicht, da ich den watchdog als timer nutzen muss, denn timer0 ist für fast-pwm zuständig.
ist zwar ein uralter Fred, aber hier meine funktionierende Version in C: //watchdog erzeugt IRQ asm volatile ("wdr"::); WDTCR |= (1<<WDCE) | (1<<WDE); WDTCR = temp | (1<<WDTIE) | (1<<WDE); sei();
Frank Schlaefendorf wrote:
> niemand hier einen tipp? hat das noch niemand ausprobiert?
Naja, ich weiß nicht so recht, was der Sinn eines Watchdoginterrupts
sein soll.
Der Watchdog liefert ja alles andere als zuverlässige Zeiten.
Ich nehme daher lieber einen einfachen Timerinterrupt und gut is.
Peter
P.S.:
Ich weiß, daß manche die Chaos-Programmierung mögen, also Timer lieber
so programmieren, daß sie nicht mehrere Sachen zusammen machen können.
Und dann eben zu wenig Timer haben. Ich kann dieser
Programmierphilosophie aber nichts abgewinnen.
P.P.S.:
Och, da hat ja wieder jemand was Uraltes ausgegraben.
@Peda das hat nix mit Chaos Programmierung zu tun, Sinn des Watchdog Interrupts beim tiny13 ist das Stromsparen, der Tiny13 schläft nämlich so gut, dass er sich von einem Timer nicht wecken lässt ... wenn du eine Möglichkeit per Timer siehst dann her damit
Walter wrote: > ist zwar ein uralter Fred, aber hier meine funktionierende Version in C: > > //watchdog erzeugt IRQ > asm volatile ("wdr"::); > WDTCR |= (1<<WDCE) | (1<<WDE); > WDTCR = temp | (1<<WDTIE) | (1<<WDE); > sei(); hallo, vielen dank für die antwort. mit WDE=1 wird doch aber ein reset bei ablauf des watchdogs ausgeführt. hat das bei dir mit einem interrupt (ohne reset) funktioniert ????
@Frank
>mit WDE=1 wird doch aber ein reset bei ablauf des watchdogs ausgeführt.
wichtig ist da natürlich WDTIE, das enabled den Interrupt UND sperrt den
Reset
(siehe Bild 19 auf Seite 37 im Datenblatt)
hat bei mir einwandfrei funktioniert und ist wie gesagt zum Stromsparen
unerläßlich
>WDTCR = temp | (1<<WDTIE) | (1<<WDE); Ohne das (1<<WDE) wird's dann was. Es gibt 3 Arten den WDE zu benutzen 1.) nur WDE ist gesetzt, dann wird ein WDT-Reset nach Ablauf des Timeouts erzeugt. Der AVR wird zurückgesetzt. 2.) nur WDIE ist gesetzt, dann wird nach jedem Timeout die WDT-ISR aufgerufen. Ein erneutes Setzen des WDIE Flags ist in der ISR nicht notwendig. WDE Bit darf nicht gesetzt sein !! 3.) WDE und WDIE Flags sind gesetzt. Beim ersten Tmeout des WDT wird die WDT-ISR aufgerufen. Das WDIE Flag wird per Hardware gelöscht falls das WDE Bit ebenfalls gesetzt ist. Wird in der ISR das WDIE Flag nicht erneut gesetzt, zb. Programfehler in WDT-ISR, wird beim nächten Timeout des WDT ein Reset durchgeführt und nicht die WDT-ISR aufgerufen. Wird in der ISR das WDIE Flag erneut gesetzt so wird beim nächten Timeout erneut die WDT-ISR aufgerufen. So verhält es sich auf den neueren AVRs. Ergo: beide Flags, WDE und WDIE, aktivieren den WDT egal ob beide oder nur eines der Flags gesetzt wurden. Gruß hagen
@Hagen
>Ohne das (1<<WDE) wird's dann was.
oder auch mit, siehe in deinen Ausführungen Punkt 3
je nachdem ob man den Watchdog nur zum Aufwecken oder auch noch in
seiner ursprünglichen Funktion braucht
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.