Re: Für alle die den eingebauten Watchdog nutzen möchten. Kategorie: Programmierung Assembler (von Ernst H. - 1.01.2011 2:45) | ||
Als Antwort auf Für alle die den eingebauten Watchdog nutzen möchten. von Jo - 31.12.2010 14:56 | ||
| ||
' Fertiges Program - einfach kopieren und Starten: ' interner Watchdog von Jo nun in Basic verwenden: ' die $Asm.... am Anfang definieren ' dann im Programm ....WatchDog_Reset( )... einfügen ' im unteren Programm wird nur bis 800ms angezeigt, dann erfolgt Reset ' (USB Kabel abstecken sonst kein Neustart) '// Valid values for WatchDog_On $Asm("tag_WDT_on") WatchDog_On(prescalar As Byte) '// Needs to be called before time which is defined 'by WatchDog_On( prescalar) has run off. 'void WatchDog_Reset $Asm("tag_WDT_reset")WatchDog_Reset() '// Turn Watch Dog off 'void WatchDog_Off $Asm("tag_WDT_off")WatchDog_Off() Dim Laufvari As Integer Dim Text(20) As Char Sub main() LCD_Init() LCD_Locate(1,1 ) LCD_WriteText("Reset Start ") AbsDelay(2000) WatchDog_On(6) 'Aktivieren ... 'Prescalar Typical Timeout Value ' 0 15 ms ' 1 30 ms ' 2 60 ms ' 3 120 ms ' 4 240 ms ' 5 0.5 sec ' 6 1.0 sec ' 7 2.0 sec WatchDog_Reset( ) Do While (1) 'EndlosSchleife Start WatchDog_Reset( ) AbsDelay(400) LCD_Locate(1,1 ) LCD_WriteText("Vz 400ms ") WatchDog_Reset( ) AbsDelay(800) LCD_Locate(1,1 ) LCD_WriteText("Vz 800ms ") WatchDog_Reset( ) AbsDelay(1800) LCD_Locate(1,1 ) LCD_WriteText("Vz 1,8s " ) WatchDog_Reset( ) AbsDelay(2200) LCD_Locate(1,1 ) LCD_WriteText("Vz 2,2s " ) End While 'Rücksprung zur Hauptprogrammschleife End Sub /* unteres File als Watchdog.asm speichern und im Projekt hinzufügen ; Achtung das Hochkomma bei "<<" entfernen (8x) ;******************************************************************************* ;* File: Watchdog.asm ;* Author : M. Benninger ;* Ident : Rev 1 30-DEC-2008 ;* Function: Watchdog Timer Functions ;* This module implements three functions: ;* WDT_on (prescalar), WDT_off () and WDT_reset () ;* The parameter prescalar determine the Watchdog Timer prescaling ;* when the Watchdog Timer is enabled. The different prescaling values ;* and their corresponding Timeout Periods are shown below: ;* Prescalar Typical Timeout Value ;* 0 15 ms ;* 1 30 ms ;* 2 60 ms ;* 3 120 ms ;* 4 240 ms ;* 5 0.5 sec ;* 6 1.0 sec ;* 7 2.0 sec ;* ;* Library: none ;* ;* History : Rev 1 30-DEC-2008 M. Benninger ;* - first implementation ;* Rev.1.1 29.12.2010 Joachim Kühnapfel (Jo) ;* - WTD_off: rettrn und wiederherstellen von R16 und R17 wie im ;* wie im Forum diskutiert / beschrieben ;* - .ifdef tag_xxx / .endif hinzugefügt gemä� Vorgaben aus ;* Beispiel der C-Control Hilfe ;* - rename ;* WDT_on -> WatchDog_On ;* WDT_off -> WatchDog_Off ;* WDT_reset -> WatchDog_Reset ;* Rev.1.2 1-1-2011 Ernst H. bei ldi ... "<<" sonst falsche Darstellung.." entfernen! ;* ;************************************************************************ ;**** Watchdog Timer Definitions **** .equ WDTCR = $21 ; Watchdog Timer Control Register .equ WDCE = 4 ; WDT Change Enable bit .equ WDE = 3 ; WDT Enable bit .equ WDPM = 7 ; WDT Prescalar mask .ifdef tag_WDT_reset WatchDog_Reset: ; Reset Watchdog Timer wdr ret .endif .ifdef tag_WDT_on WatchDog_On: ; Enable Watchdog Timer movw r26, r6 ; r7:r6 points to ret_addr adiw r26, 4 ; X now points to prescalar parameter ld r16, x ; get prescalar parameter andi r16, WDPM ; and mask lower 3 bits ori r16, (1"<<"WDE) ; turn on WDE bit ... das Hochkomma entfernen! ldi r17, (1"<<"WDCE)|(1"<<"WDE) ; Write logical one to WDCE and WDE out WDTCR, r17 ; enable write to WDT control register out WDTCR, r16 ; write WDT control register ret .endif .ifdef tag_WDT_off WatchDog_Off: push R16 push R17 ; Disable Watchdog Timer in r16, WDTCR ; get WDT control register ori r16, (1"<<"WDCE)|(1"<<"WDE) ; enable write to WDT control register out WDTCR, r16 ; write WDT control register ldi r16, (0"<<"WDE) ; turn off WDE bit out WDTCR, r16 ; write WDT control register pop R17 pop R16 ret .endif ;* End of Watchdog.asm -- Watchdog Timer Functions für ATmega128 ;************************************************************************** */ 'Ende Basic | ||
Antwort schreiben Antworten: Re: Für alle die den eingebauten Watchdog nutzen möchten. (von Christian - 1.01.2011 17:08) Re: Für alle die den eingebauten Watchdog nutzen möchten. (von Joerg - 1.01.2011 19:38) Re: Für alle die den eingebauten Watchdog nutzen möchten. (von Ernst H. - 2.01.2011 16:59) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum