..
// Init Timer
TCCR1B |= (1<<CS12) | (1<<CS10); // Prescaler CPU Takt/1024
..
Hier wurde die Waveform noch nicht definiert. Auf die Schnelle mal (m)eine Initialisierung für nen mega328, die wird (na ja, nicht getestet, aber ich bin sicher) so auch auf nem mega8 funktionieren. Ergibt ein 36 kHz-Signal bei nem 20MHz-Quarz auf dem Pinn PB1/OC1A, das ich für ne IR-Signalübertragung benutze. Die Parameter müsstest Du eben selbst anpassen bzw ne andere Waveform wählen.
Code:
// ============================================================================= =
// == PWM-Routinen zur IRLED-ansteuerung auf OC1A/PB1 ====================== =
// Target MCU : ATmega328p (als arduino-nano, Clone)
void TC1PWM_init(void) // Tmr/Ctr1 = PWM-Signal 36 kHz - EIN?schalten
{ //
TCCR1A |= (1<<COM1A1); // enable Clear/set OC1A on Compare Match
// also Port PB3, vgl. auch PWM-routine unten
TCCR1B |= (1<<CS10); // cs10 <=> clk/1 => no prescaling
TCCR1B |= (1<<WGM13); // PWM, Phase+Frequency correct
ICR1 = 278; // =>PWM-Frequenz 20MHz/(2*278) => 36,0kHz/27,8µs
}
// ================================================================================
Lesezeichen