Hallo,
ich versuche mit einem Atmega88PA einen Ton variabler Frequenz zu
erzeugen und lasse ihn daszu einen Pin toggeln, an dem ein Lautsprecher
hängt.
Atmega wird mit dem RC-Oszi bei 8MHz betrieben.
Problem: Die Frequenz ändert sich sich trotz Änderung des
CompareMatch-Wertes nicht! :-(
Ich erhalte konstant etwa 242Hz an PORTB.1, was einem CTC-Wert von ca.
255 entspricht (bzw. einem Overflow).
Eine Änderung des Prescalers führt zu einer Änderung der
"Toggle"-Frequenz.
Benutzt wird Timer2, der das eigentlich können sollte.
Beim Timer1 funktioniert es.
bin um jede Hilfe dankbar.
1 | program Timer2test;
|
2 |
|
3 | procedure EnableTimer2();
|
4 | begin
|
5 | WGM11_bit :=1; //CTC-Mode
|
6 | OCR2A := 10; //counting value
|
7 | CS22_bit :=1;//8MHz /64 = 125KHz
|
8 | CS21_bit :=0;
|
9 | CS20_bit :=0;
|
10 | OCIE2A_bit :=1; //Enable compare match interrupt
|
11 | end;
|
12 |
|
13 | procedure Timer2CompareMatch_ISR(); org IVT_ADDR_TIMER2_COMPA;
|
14 | begin
|
15 | PORTB.1 := not PORTB.1;
|
16 | end;
|
17 |
|
18 | begin
|
19 | DDRB :=0xFF; //Outputs
|
20 | SREG_I_bit :=1; //global INT enabled
|
21 | EnableTimer2();
|
22 | end.
|
TNX
aXum