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:
Die Timerinitialisierung zusammen mit der Subroutine, mit der OC1A gestellt wird, Basis ist ein Prozessortakt von 20 MHz: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) */
/* ============================================================================== */
Ü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.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
/* ============================================================================== */
Aufruf Timerinitialisierung aus main:
Der Rest sollte Dir ja geläufig sein. Nochmal - wenn Du Teile dieses Codes verwendest, musst Du die Register an Deinen mega32 anpassen!!!Code:TC1SRV_init(); //Init Timer/Counter1 37,xkHz am 21feb08, 17:28