Forum: Compiler & IDEs Piezo an PWM Pausenproblem


von Bene J. (terfagter)


Lesenswert?

Hallo zusammen,

ich habe einen Piezo-Summer an einem PWM Ausgang eines ATEMGA1280. 
Dieser soll als eine Art Alarm dienen. Es sollen zwei Frequenzen jede 
halbe Sekunden abwechselnd ertönen. Leider kommen aber immer kleine 
Pausen zwischen den Tönen, dann stimmt alles für 2 sec und dann kommen 
wieder Pausen... Woran liegt das?
Mit Timer 2 erzeugt ich jede 1ms einen Interrupt.

main.c
1
  TIMSK2 |= (1<<OCIE2A);                
2
  OCR2A = 124;                      //Jede 1ms ein Interrupt
3
  TCNT2 = 0;                        
4
  TCCR2B |= (1 << WGM22);
5
  TCCR2B |= (1<<CS21) | (1<<CS20);  
6
7
  TCCR3A |= (1 << COM3A0);
8
  TCCR3B |= (1 << WGM12) | (1 << CS11) | (1 << CS10);
9
  DDRE |= (1 << PE3);
10
11
ISR(TIMER2_COMPA_vect)
12
{
13
  alarmmssec++;          
14
  if(alarmmssec == 500){
15
    OCR3A = 82;
16
  }
17
  
18
  if(alarmmssec == 1000){
19
    OCR3A = 33;
20
    alarmmssec=0;
21
  }

von berndbrot (Gast)


Lesenswert?

Ich habe jetzt nicht nachgesehen, in welchem Modus Du Timer3 betreibst, 
aber aus dem Bauch heraus:
Wenn der count von Timer 3 schon jenseits der 33 ist wenn du OCR3A auf 
33 setzt, dauert es bis der timer ueberlaeuft bevor wieder etwas am 
Ausgangspin passiert. Probier mal
1
TCNT3 = 0;
2
OCR3A = 33;

von Bene J. (terfagter)


Lesenswert?

Hmm, eigentlich logisch. Da hab ich nicht zu Ende gedacht.
Danke. Problem gelöst!

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.