#ifndef MCU #define MCU atmega48P #endif #ifndef F_CPU #define F_CPU 800000UL #endif #define true 1 #define false 0 #define STK500 false #include // Namen der IO Register #include // Funktionen zum warten #include #include #include #include #include #include // globale Variable uint16_t pwmtable_8B[8] PROGMEM = {0, 4, 8, 16, 32, 64, 128, 255}; // ADC initialisieren /-------------------------------------------------------------------------------> ADC void ADC_Init(void) { uint16_t result; // interne Referenzspannung als Refernz für den ADC wählen: ADMUX = (1<PWM void my_delay(uint16_t milliseconds) { for(; milliseconds>0; milliseconds--) _delay_ms(1); } // 8-Bit PWM mit 8 verschiedenen Stufen void pwm_8_8(uint16_t delay){ int16_t tmp; #if STK500 TCCR1A = 0xC1; // inverted PWM on OC1A, 8 Bit Fast PWM-->1100 0001 #else TCCR1A = 0x81; // non-inverted PWM on OC1A, 8 Bit Fast PWM -->1000 0001 #endif TCCR1B = 0x08; // -->0000 10000 TCCR1B &= ~0x7; // clear clk setting TCCR1B = (0<=0; tmp--){ //255 Stufen bei 8-bit, runter zählen OCR1A = pgm_read_word(pwmtable_8B+tmp); my_delay(delay); } } //------------------------------------------------------------------------------->Hauptprogramm int main(void) { ADC_Init(); uint16_t adcval; int16_t i; int16_t step_time=200; while( 1 ) { adcval = ADC_Read(0); // Kanal 0 // Ereignissschleife if (adcval>500) { DDRB |= (1<