-
          
	
		
		
	
	
	
	
	
		
			
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Fleißiges Mitglied
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
				
					Timerfunktion
				
				
						
							
							
						
						
				
					
						
							Hallo,
in meinem Programmcode (https://www.roboternetz.de/phpBB2/vi...ada52d3f411c1f)  schalte ich per Tasterdruck Relais. Mittels Zähler fällt das Relai dann wieder ab.
Ist es möglich den internen Timer des AVR zu nutzen um echte Zeiten zu hinterlegen und nicht mehr mit dem Zähler zu arbeiten.
Erschwerent kommt hinzu, dass ich quasi 5 Timer benötige die zu unterschiedlichen Zeitpunkten gestartet weren und unterschiedlich lange laufen.
Kann man das programmieren?
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter Genie
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
							
						
				
					
						
							Du kannst mit einem  16Bit-Timer Zeiten von bis zu Taktfrequenz*1024*(2^16) realisieren.  Ausserdem kannst du zu jeder Zeit das Timerregister auslesen, in dem steht, wie weit der Timer schon gezählt hat. Dein Problem sind dann also nur noch deine verschiedenen Startzeiten. Ich würde folgendes machen: (Ich weiss jetzt nicht wie groß deine Zeiten sein sollen und wie genau) Wir sagen mal du willst folgendes machen:
Deine Relais werden zu einem Zeitpunkt x eingeschaltet und sollen dann je 5 Sekunden an sein.
Du machst einen Timer mit 1 Sekunde. Also dein Timer löst ein Interrupt aus wenn er überläuft. Wenn das innerhalb einer Sekunde passiert passt es. Ausserdem hast du für jedes Relais eine ganzzahlige Variable. Die werden mit -1 initialisiert. Wenn nun ein Relais angeschaltet wird, dann wird die Variable des Relais auf die Zeit gesetzt, die es brauchen soll bis es sich wieder abschaltet. In diesem Fall 5. Deine Interruptroutine schaut nun immer (jede Sekunde), wie die Relaisvariablen aussehen. Wenn sie -1 sind, werden sie ignoriert. Wenn sie > 0 sind, also die Zeit des Relais läuft, dann wird diese Variable 1 runtergezählt. Wenn eine Variable = 0 ist, dann wird das Relais ausgeschaltet und die Variable  auf -1 gesetzt. Und dann musst zu jetzt nur noch den Fall behandeln, der eintritt, wenn die Zeit noch läuft und das Relais erneut eingeschaltet wird.
edit: achso, und wenn du das nicht sofort verstehst, wunder dich nicht, mich wundert es dann auch nicht! 
						
					 
					
				 
			 
			
			
			
			
		 
	 
		
	
 
		
		
		
	
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
 
		- Themen beantworten: Nein
 
		- Anhänge hochladen: Nein
 
		- Beiträge bearbeiten: Nein
 
		-  
 
	
	
	Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen