-
          
	
		
		
	
	
	
	
		
	
	
		
			
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Robotik Einstein
			
			
			
			
			
				
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Ich würde eine Zeitmessung eigentlich immer über einen Timer(Interrupt) machen.
Der Watchdog wäre für mich immer nur eine Notbremse, falls sich das Prog irgendwo aufhängt ( Stack Overflow, Warten auf ein Ereignis ).
Die Timer der AVR sind äusserst flexibel.
Wenn der Prescaler für die Anwendung passt kann so ein Timer auch durchaus bis zu 3 Aufgaben auf einmal bewältigen ( Zeit messen ( Input Capture ), PWM generieren, Timer Interrupts generieren ).
Zudem kann man einen Timer mit relativ hoher Taktfrequenz laufen lassen und im Overflow Interrupt Variablen runterzählen lassen ( frisst zwar viel Rechenzeit geht aber ).
Somit sind dann auch Messungen für unterschiedliche Zeitintervalle möglich.
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
		
			
				
				
						
						
				
					
						
							Als sehr einfach zu realisierende "Pi-mal-Daumen"-Zeitbasis, an die keine hohe Präzisionsforderung gestellt wird, 
ist der WD-Timer sehr gut geeignet. Die anderen Timer bleiben dann anderweitig nutzbar.
Für die Attinys u.A. geht das auch ganz simpel:
Config watchdog = 8000    'nach meiner Erfahrung läuft der wd-Timer damit schon los, auch ohne "start"-Befehl
Set Wdtcr.wdie                'wd in Interrupt-Modus versetzen, statt reset-Modus
 If Wdtcr.wdif = 1 Then     'zeitintervall abgelaufen
   set Wdtcr.wdif              ' das wdif-flag sofort wieder löschen, indem man es setzt             
   Incr wd_tick
 end if
Damit wird die Zählvariable "wd_tick" jedesmal wenn das wdif-flag gesetzt wird incrementiert, 
und das wdif_flag bis nach Ablauf des nächsten Zeit-Intervalls zurückgesetzt, 
ohne dass man eine WD-Interruptroutine aufrufen bzw. ausführen muss. (= Polling)
Zu beachten ist, dass das vom Timer gesetzte wdif-flag dadurch gelöscht wird, dass man es setzt(!), 
also mit einer 1 beschreibt, obwohl es schon gesetzt ist. 
Man braucht hierbei auch keine 4-Takte-Sequenz einhalten, wie oft irrtümlich geschrieben wird.
Dieses einfache Polling des Interrupt-Flags geht auch bei anderen Timern oder anderen Interruptquellen, wenn man die zeitraubenden Pushs und Pops der Interruptroutinen vermeiden will.
						
					 
					
				 
			 
			
			
				
				
				
					
						Geändert von stemmy (20.02.2022 um 14:39 Uhr)
					
					
				
				
				
				
				
				
				
			 
			
			
		 
	 
		
	
 
		
		
		
	
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
 
		- Themen beantworten: Nein
 
		- Anhänge hochladen: Nein
 
		- Beiträge bearbeiten: Nein
 
		-  
 
	
	
	Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen