Genau, Timer-Interrupt.
a) (Irgendeinen) Timer auf Interrupt im CTC-modus initialisieren. So nach dem Muster (hier für den mega168, in C, weil ich kein Basic mache):
Code:
TCCR0A |= (1<<WGM01); // Timer im CTC-Mode, Top=OCRA (doc S104)
TCCR0B |= (1<<CS01); // Prescaler 1/8 / Clock <- CPU (doc S106)
OCR0A = 125; // Preset 125 für 50µs bei 20Mhz
TIMSK0 |= (1<<OCIE0A); // Tmr/Cntr0 CompareA interrupt enabled
und dann - z.B. auf Tastendruck, den Vorteiler auf einen entsprechenden Wert setzten und den Preset OCRnx:
Code:
OCR0A = 125; // Preset 125 für 50µs bei 20Mhz
TIMSK0 |= (1<<OCIE0A); // Tmr/Cntr0 CompareA interrupt enabled
Dann kommt am entsprechenden Pin Deine gewünschte Frequenz (wenns richtig initialisiert ist). Und Du kannst das mit OCIEnx auch bei Bedarf aus- und wieder einschalten.
Viel Erfolg,
Lesezeichen