hallo
versuchs mal so, du hast einen zugriff auf das 16bit OCR1A Register gemacht, hast jedoch nur ein 8bit pwm auch deine variable lässt auf 8 bit schließen (uint8_t vergleichswert)
mit OCR1L, kannst du nur auf die ersten 8Bit zugreiffen, sollte so funktionieren![]()
zu den 1ms delay, die könnte man auch in einer ISR mit einem 1ms timer verbauen
mfg
low
Code:#include <avr/io.h> #ifndef F_CPU /* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert (z.B. durch Übergabe als Parameter zum Compiler innerhalb des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die "nachträgliche" Definition hinweist */ #warning "F_CPU war noch nicht definiert, wird nun mit 1 MHz definiert" #define F_CPU 1000000UL /* Quarz mit 1.0000 Mhz */ #endif #include <util/delay.h> int main (void) { uint8_t vergleichswert = 0; DDRB |= (1<<PB1); //PB1 auf Ausgang TCCR1A = 0; TCCR1A |= (1<<WGM10) | (1<<COM1A1); //Nichtinvertierende PWM TCCR1B = 0; TCCR1B = (1<<CS12) | (1<<CS10); //Takt CK/1024 while(1) { while (vergleichswert < 255) //LED heller (Vergleichswert größer) { OCR1L = vergleichswert; vergleichswert++; _delay_ms(1); // warten, damit es nicht rasend geht } while(vergleichswert > 0) //LED dunkler (Vergleichswert kleiner) { OCR1L = vergleichswert; vergleichswert--; _delay_ms(1); } } }






Zitieren

Lesezeichen