PWM mit var. Frequenz (Prog. Absturz?)

Gast #1735677
Lesenswert?

Hallo.

Ich versuche mit einem ATMEGA32 eine PWM mit variabler Frequenz zu 
erzeugen.
Die PWM soll immer ein konstantes Tastverhältnis von 50% haben.

Dazu habe ich den 16-Bit Timer für den FAST PWM Mode konfiguriert (Mode 
14, Table 47. Datenblatt Seite 112)

Nun verwende ich dieses Programm:
Hier wird ständig das ICR1 register (Frequenz der PWM) mit einem neuen
Wert beschrieben und darauf hin das OCR1A Register (Tastverhältnis) mit 
der Hälfte dieses Wertes.

Das Problem welches auftaucht ist folgendes:
Wenn ich den Mikrocontroller laufenlasse, so sehe ich die 
Frequenzänderung über eine LED am OCR1A Ausgang und höre sie Über einen 
Lautsprecher, der ebenfalls über den OCR1A Ausgang (zusätzlich 
komplementärer Emitterfolger) angeschlossen ist. Es tauchen jedoch 
Aussätzer auf von teilweise einigen Sekunden.
Sprich die LED geht aus, der Ton verstummt. Ich habe das Gefühlt, als ob 
der Controller plötzlich stoppen würde um dann an der selben Stelle 
wieder anfängt das Programm abzuarbeiten. Diese Unterberchungen sind 
nicht regelmäßig.

Kann der Grund dafür derjenige sein, dass ich die Timer Register nicht 
korrekt oder in falscher Reihenfolge beschreibe?

Variablenüberläufe?

Bin erstmal Ratlos.

1
int a, e, f;
2
int b = 1;
3

4
while(1)
5
{
6
  for( b = 0; b <= 10; b++)
7
  {
8
    
9
    for( a=30+b; a<=36+b; a++)
10
    {
11
      e = a;
12
      f = a+6;
13
      ICR1 = e;
14
      e=e/2;
15
      OCR1A = e;
16

17
      _delay_ms(100);
18
  
19
      ICR1 = f;
20
      f=f/2;
21
      OCR1A = f;
22

23
      _delay_ms(100);
24
    }
25
  }
26
}
#1735691
Lesenswert?

@  polfort (Gast)

>Ich versuche mit einem ATMEGA32 eine PWM mit variabler Frequenz zu
>erzeugen. Die PWM soll immer ein konstantes Tastverhältnis von 50% haben.

Dann ist es aber keine PWM, sondern ein Rechtecksignal mit variabler 
Frequenz.

>wieder anfängt das Programm abzuarbeiten. Diese Unterberchungen sind
>nicht regelmäßig.

Stromversorgung mies? 100nF nah am Controller?

>Kann der Grund dafür derjenige sein, dass ich die Timer Register nicht
>korrekt oder in falscher Reihenfolge beschreibe?

Nein.

>Variablenüberläufe?

Sehe ich nicht.

MFG
Falk
Gast #1735709
Lesenswert?

Stimmt die Pulsweite wird ja nicht moduliert..

Die Spannungsversorgung ist IO, soweit ich das beurteilen kann. Außer 
sie bricht so schnell ein, dass ich es nicht bemerke. Ein Multimeter ist 
da wohl zu träge für.. Hmm..

Andererseits versorge ich den Lautsprecher bzw. die Endstufe aus einer 
anderen Quelle.
Darf also keinen Einfluss haben auf die Versorgung des Controllers.
Gast #1736216
Lesenswert?

Wenn du "nur" ein Rechteck am PIN OC1A willst ist der Timer-Mode 4
besser.
CTC mit Top in OCR1A und Toggle.
1
 
2
TCCR1A=(1<<COM1A0);
3
TCCR1B=(1<<WGM12)|(1<<CS10);
4

5
      e = a;
6
      f = a+6;
7
      e=e/2;
8
      OCR1A = e;
9

10
      _delay_ms(100);
11
 
12
     f=f/2;
13
      OCR1A = f;

Ich habe den Prescaler auf 1, muß evtl. angepasst werden ;)

avr

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