Clear Timer on Compare Match (CTC) funktioniert nicht - Atmega88PA

Gast #2983094
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren