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







Zitieren

Lesezeichen