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);
}
}
}
Lesezeichen