Skip to content

Latest commit

 

History

History
45 lines (39 loc) · 1.21 KB

File metadata and controls

45 lines (39 loc) · 1.21 KB

Fade LED 2

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
uint8_t Helligkeit = 0;
int Modus = 0; //die Variable "Modus" gibt an ob die Helligkeit gerade zu- oder abnimmt

void inittimer(){
	TCCR0A |= (1<<WGM01) | (1<<WGM00) | (1<<COM0A1); //fast PWM + non inverting
	TCCR0B |= (1<<CS01) | (1<<CS00); //64 Prescaler
	TIMSK0 |=(1<<TOIE0); //Interrupt enable
	OCR0A = Helligkeit; //default Wert wird zugewiesen
}

ISR(TIMER0_OVF_vect){
	OCR0A = Helligkeit; //Helligkeit wird aktualisiert
}

int main(void) {
	sei(); //Global Interrupt enable
	DDRB |= (1<<DDB3); //PWM Pin zum Ansteuern der LED als Ausgang definieren
	inittimer(); //Timer initialisieren
	while(1)
	{
		_delay_us(20); //Delay um Blinkgeschwindigkeit zu regulieren
		if(Modus==0){ //LED wird langsam immer heller
			Helligkeit++; //Helligkeit wird erhöht
			if(Helligkeit==0xFF){ // Helligkeit ist am Maximum
				Modus = 1; //Helligkeit wird nun mit jedem Zyklus reduziert
			}
		}
		else if(Modus == 1){ //LED wird langsam immer dunkler
			Helligkeit--; //Helligkeit wird reduziert
			if(Helligkeit==0x00){ //Helligkeit ist am Minimum
				Modus = 0; //Helligkeit wird nun mit jedem Zyklus erhöht
			}
		}
	}
}