Hi Simba,
willkommen im Forum.
... Ich versuch hier verzweifelt auf dem ATmega16 den Timer1 im CTC aufzusetzen ...
Hast Du schon die Dokumentation dazu gelesen? Sind zwar ETLICHE Seiten, aber recht nützlich.
Zitat von
Simba81
... einen Beispielcode in C, der mir zeigt, wie man das macht? ...
Der Code ist für nen mega1284 - der mega16 dürfte nicht viel anders sein. Natürlich wirst Du die Parameter selber einstellen müssen. Im Code wird dann die
ISR (TIMER1_COMPA_vect) // Servo[Svpt] wählen + dessen Rampe starten
aufgerufen, es läuft keine Hardware-PWM . . . (wenn das Deine nächste Frage sein sollte).
Code:
// ============================================================================== =
// == Timer1 Aufgabe: Servo mit Soft-PWM ansteuern auf wählbarem Port
// Beispiel: ....
// - - - - - - - - - - - - - - - -
void TC1TMR_init(void) // Init Timer/Counter 1 für 2 ms Servoperiode
{ //
TCCR1B |= (1<<WGM12); // WGM12 => CTC, TOP = OCR1A S133
TCCR1B |= (1<<CS11); // CS11+10 <=> clk/8 => 2,500 MHz S134
OCR1A = 6400; // => alle 2,56 ms ein Interrupt
TIMSK1 |= (1<<OCIE1A); // Tmr/Cntr1 Oput CompA Mtch intrrpt enabled
// - - - - - - - - - - - - - - - -
}
// ============================================================================== =
// ============================================================================== =
// == Timer1
// - - - - - - - - - - - - - - - -
void TC1TMR_on(void) // Init Timer/Counter enable
{ //
TIMSK1 |= (1<<OCIE1A); // Tmr/Cntr1 Oput CompA Mtch intrrpt enabled
}
// ============================================================================== =
// ============================================================================== =
// == Timer1
// - - - - - - - - - - - - - - - -
void TC1TMR_off(void) // Init Timer/Counter disable
{ //
TIMSK1 &= ~(1<<OCIE1A); // Tmr/Cntr1 Oput CompA Mtch intrrpt disabled
}
// ============================================================================== =
Lesezeichen