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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.