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