www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM mit var. Frequenz (Prog. Absturz?)


Autor: polfort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.


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

while(1)
{
  for( b = 0; b <= 10; b++)
  {
    
    for( a=30+b; a<=36+b; a++)
    {
      e = a;
      f = a+6;
      ICR1 = e;
      e=e/2;
      OCR1A = e;

      _delay_ms(100);
  
      ICR1 = f;
      f=f/2;
      OCR1A = f;

      _delay_ms(100);
    }
  }
}


Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: polfort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  polfort (Gast)

>Andererseits versorge ich den Lautsprecher bzw. die Endstufe aus einer
>anderen Quelle.

Aber du hast hoffentlich die Massen verbunden . . .

Autor: polfort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja selbstverständlich.
Trotzdem Danke für die Hinweise.

Ich versuche es mit einem ATMEGA16, habe hier einen.
Sonst fällt mir nichts ein im Mom.

Autor: polfort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, mit dem anderen Controller tut sich da nicht viel mehr.
Hat jemand vielleicht noch eine Idee?

Die Hardware ist ok.
Habe das Ganze mit einem M16C ausprobiert und da klappt es wunderbar.

Autor: avr (Gast)
Datum:

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

      e = a;
      f = a+6;
      e=e/2;
      OCR1A = e;

      _delay_ms(100);
 
     f=f/2;
      OCR1A = f;

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

avr

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.