Forum: Mikrocontroller und Digitale Elektronik Clear Timer on Compare Match (CTC) funktioniert nicht - Atmega88PA


von aXum (Gast)


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

von Thomas E. (thomase)


Lesenswert?

aXum schrieb:
> WGM11_bit :=1; //CTC-Mode
> OCR2A := 10;  //counting value

Um den CTC-Mode des Timer2 einzuschalten, solltest du besser das 
WGM21-bit setzen.

mfg.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Hast Dir daneben auch mal OC2A/OC2B angeschaut ?

von aXum (Gast)


Lesenswert?

Danke!

Wie üblich hatte ich Tomaten auf den Augen und nicht gesehen, dass die 
führende Zahl die Timernummer angibt :-O

Jetzt läufts =)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.