#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>				              //Datei interrupt.h einbinden
#include <util/delay.h>
ISR(TIMER1_COMPA_vect)					//Interrupt service routine wenn Vergleichswert erreicht ist
{	
	static uint16_t swTeiler = 0;				//Deklarieren von swTeiler
	swTeiler++;					//Zählschritt einstellen
	if (swTeiler == 30)					//Wert bis Interrupt ausgelöst wird
	{
		swTeiler = 0;				//Teiler wieder auf 0 setzen
		PORTD |= (1<<PD6);			//PortD Strom an
		TCCR1B |= (1<<WGM12) | (1<<CS12);
		TIMSK |= (1<< OCIE1B);
		OCR1B = 3094;
		sei();
		
			
	}
}
ISR (TIMER1_COMPB_vect)
{
	static uint8_t vTeiler = 0;
	vTeiler++;
	if (vTeiler == 4)
	{
		vTeiler = 0;
		PORTD &= ~(1<<PD6);
		
	}
}
	
	int main (void)
	{
		
		
		DDRD |= (1<<PD6);			//PD6 als  Ausgang deklarieren
		
		
		
		
							//Timer konfigurieren
		TCCR1B |= (1<<WGM12) | (1<<CS12);	//CTC-Mode und Vorteiler auswählen
						              //Tabelle
		
		TIMSK |= (1<<OCIE1A);		//Timer1 auswählen (Output Compare A Match Interrupt Enable
						//Interrupt aufrufen, wenn der Vergleichswert erreicht ist
						//Tabelle
		
		OCR1A = 3906;			//Vergleichswert zur bestimmung einer Sekunde
						//Interrupts aktivieren
		
		sei();
		
		
		int i = 0;				//Schleifenvariable deklariert
		while(i<2)			//Zwei mal wird die Schleife durchlaufen
		{										
						//Zu beginn des Programmstarts, sollen 2 Schmierungen druchgeführt werden
			i++;
			PORTD |= (1<<PD6);					
			_delay_ms(3000);					//Schmierzeit
			PORTD &= ~(1<<PD6);				
			_delay_ms(3000);					//Untebrechung der Schmierung
			
		}
		
		
		while(1)
		{
			
		}
	}
			
		
 
	
Lesezeichen