So hier ist nun mein Programm:

Code:
#include <avr/io.h>
#include <util/delay.h> //Warteschleife für die Demo-Ausgabe. Für die eigentliche PWM nicht benötigt!  

int main()
{

//  PWM-Beispiel für Mega168 mit dem Timer2	

// 1. Den Prescaler einstellen, der die Frequenz festlegt
	TCCR2B |= (1<<CS22); //Prescaler 256
	
// 2. Den Timer in den Fast PWM Mode, 8 Bit schalten
	TCCR2A |= (1<<WGM20);
	TCCR2A |= (1<<WGM21);
	
// 3. Compare Output mode einstellen: Pin geht auf high bei Compare match, auf low bei Überlauf. Ergibt nichtinvertierte PWM.	
	TCCR2A |= (1<<COM2B1);	
	
// In diesen Registern wird der gwünschte PWM-Wert abgelegt. Erlaubter Bereich: 0 bis 255.
	OCR2B =	255;	

// 4. Zuletzt den Pin als Ausgang konfigurieren. Erst jetzt liegt das PWM-Signal an dem Pin an!	
	DDRD |= (1<<PD3);

/*Nun ist der PWM-Modus aktiv! Der Ausgangswert kann nun über das Register OCR2B vorgegeben werden. 
Man könnte ihnen per define noch einen Zweitnamen verpassen, zb */
#define LED OCR2B

LED = 0;



/*PWM-Demo: Die PWM-Werte werden erst bis zum Maximalwert erhöht und dann wieder verringert. 
Eine angeschlossene LED wird langsam heller und wird dann wieder verdunkelt*/
	uint8_t wert;
	while(1)
	{
		for (wert=0; wert<255; wert++)
			{
				OCR2B = wert;
				_delay_ms(20);
			}
	
		for (wert=255; wert>0; wert--)
			{
				OCR2B = wert;
				_delay_ms(20);
			}	
	}
}
Das Programm läuft erstmal so wie ich es möchte.

EDIT: Kommentare aus dem Code überarbeitet