Hi pinsel,

also ich seh in Deinem Code keine Timerinitialisierung für die LED. Vorbehaltlich der Tatsache, dass ich mit dem mega168 arbeite - OC1A steuert bei mir den PB1 - sende ich Dir als Anhalt für Deine Programmierung meine Codeschnippsel. ACHTUNG - bei Dir/beim mega32 geht OC1A auf Pin19/PD5 - und es ist natürlich/vermutlich die Initialisierung mit anderen Registerwerten durchzuführen.

Die Anschlüsse an MEINEM mega168:
Code:
--------------------==========-----------------------
Vorgesehene/belegte Anschlüsse am (ATMega168)-R2D03:
            ==================                        (für ´168 d = Drive/Director)
                   /RESET   1   28   PC5,(SCL)
                RxD,(PD0)   2   27   PC4,(SDA)   
                TxD,(PD1)___3   26___PC3, ADC0 / Sharp GP2D120
  (SigMot1) ExtINT0,(PD2)   4   25   PC2, SFH 5110, IN irDME 4   } vorgesehen
  (SigMot2) ExtINT1,(PD3)   5   24   PC1, SFH 5110, IN irDME 3   } evtl. auch in
  (E7)  _|-- 3,4 Guz, PD4___6   23___PC0, SFH 5110, IN irDME 1-2 } ´168 n
                      VCC   7   22   GND
                      GND   8   21   AREF
               XTAL1  PB6___9   20___VCC
               XTAL2  PB7  10   19   PB5, Startblink (LED0), 3sec v Tmr0, Mehrzweck
  (E6) PWM 1,2 uz+Guz,PD5  11   18   PB4  _|-- 3,4  uz  (E4) (hier oder PB3)
  (E5) PWM 3,4 uz+Guz,PD6___2   17___PB3, Reserve 2
  (E8)   _|-- 1,2  uz,PD7  13   16   PB2, Reserve 1
  (E9)   _|-- 1,2 Guz,PB0  14   15   PB1  SFH 415, OUT (irDME)                    */
/* ============================================================================== */
Die Timerinitialisierung zusammen mit der Subroutine, mit der OC1A gestellt wird, Basis ist ein Prozessortakt von 20 MHz:
Code:
/* ============================================================================== */
/* ==  PWM-Routinen zur IRLED-ansteuerung auf OC1A/PB1    ======================= */
void TC1SRV_init(void)	//Init Timer/Counter 1, PWM-Signal 
{                                 //       normale PWM aktivieren (nicht invertiert)
   TCCR1A |= (1<<COM1A1);         //Clear/set OC1A on Compare Match, doc S132.
				  //   Edit: hier war ein falscher Kommentar
//   TCCR1A |= (1<<WGM11);        //WGM10=0 => PWM, Phase Correct,         doc S 133
   TCCR1B |= (1<<CS10);           // cs10 <=> clk/1 => no prescaling       doc S 134
   TCCR1B |= (1<<WGM13);            // PWM, Phase+Frequency correct     doc S 134
   ICR1    = 270;                 // =>PWM-Frequenz 20MHz/(2*nn) => 37,0kHz/
/* Interrupts für Timer2 deaktivieren. Siehe Registerbelegung :
mega168   Bit7       6        5         4         3         2        1        0
TIMSK1      –        –      ICIE1        –         –       OCIE1B   OCIE1A   TOIE1
im m168     ?        ?        ?         ?         ?         ?        ?        ?   */
//
   TIMSK1 &= ~(1<<OCIE1A)|(1<<OCIE1B);	// Tmr/Cntr1 Oput CompA/B Mtch intrrpt disab
   TIMSK1 &= ~(1<<TOIE1);		// Tmr/Cntr1 Overflow interrupt disabled
}
/* ============================================================================== */
void setSRV1(uint16_t speed1)           //Relative Pulslänge auf OC1A/PB1
{OCR1A = speed1;}                       //  z.B. für SFH5110 oder Servo
/* ============================================================================== */
Übrigens fahre ich aus bestimmten Gründen mit 37 kHz, das müsstest Du entsprechend anpassen. Die setSRV1 wird mit dem gewünschten Parameter aufgerufen.

Aufruf Timerinitialisierung aus main:
Code:
    TC1SRV_init();	//Init Timer/Counter1 37,xkHz am 21feb08, 17:28
Der Rest sollte Dir ja geläufig sein. Nochmal - wenn Du Teile dieses Codes verwendest, musst Du die Register an Deinen mega32 anpassen!!!