Wahnsinn, da hat jemand genau das gleiche Problem wie ich!
Also ich habe auch einen Mega16 und möchte den FAST-PWM nutzen. Zunächst aber eine Verständniss Frage: Der FAST-PWM sollte doch eigentlich doppelt so schnenn wie der normale PWM sein, oder?

Hier folgt mein Code:
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h> 
#include <avr/signal.h>

SIGNAL (SIG_OUTPUT_COMPARE1A) {}	//Noch nicht genutzte Interrupts
SIGNAL (SIG_OUTPUT_COMPARE1B) {}

void timerinit(void) {
TCCR1A = (1<<WGM11) | (1<<WGM10) | (1<<COM1A1) | (1<<COM1B1) | (1<<WGM12); 	
// 10 Bit Fast PWM, OC1A/B ist output nicht invertiert;

TCCR1B = (1<<CS11);													//Prescaler = 16

//---------------------REGISTER FÜR TIMER_COMPARE_INTERRUPT--//
TIMSK = (1<<OCIE1A) | (1<<OCIE1B);		//INTERUPT
TIFR = (1<<OCF1A) | (1<<OCF1B);
//-----------------------------------------------------------//

OCR1A = 512;
OCR1B = 512;
}

int main(void) {
timerinit();
DDRD = 0xff;
PORTD = 0xff;
for(;;){};
}
Das Ergebniss hab ich mir dann auf dem Oszi angesehen und es ist wunderbar:
Der Cycle beträgt 50%
Die Periodendauer ist ungefähr 2,2 ms

Nur Leider passiert das ganze unabhängig davon, ob ich "WGM12" im Register TCCR1A setze oder nicht. Meiner Meinung nach, sollte genau dieses Bit den PWM auf Fast-PWM umschalten. An der Periodendauer ändert sich allerdings garnix.
Ich muss zugeben, dass ich mich noch nicht durch das ganze Datenblatt gequält habe, aber ich dachte die wichtigsten Register glesen/gesetzt zu haben.

Falls ihr sonst noch verbesserungsvorschläge zu meinem Code habt, nur zu, ich bin erst seit 2 Tagen an C dran.

Schonmal ein Dankeschön im Voraus.