www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM flackert stark


Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich beschäftige mich gerade das erste mal mit PWM und möchte via PWM 
eine LED dimmen, habe aber keine Timer mehr frei! Also dachte ich, ich 
versuch es über einen Umweg: ein Timer erzeugt einen 10ms Takt und zählt 
mit einer Periode von ca 73us immer von 136 auf 255. Diesen Timer 
verwende ich auch für die PWM. Ich habe zum Test in der main ein paar 
Zeilen geschrieben die die LED dimmen sollen
  if((TCNT0 >= 119) && (TCNT0 < 139))
        {
          PORT1  |= (1<<OUT8);  //aktiviere Ausgang vorübergehend
        }
        else
        {
          PORT1  &= ~(1<<OUT8);  //lösche Ausgang
        }

(139-119)*73us ergibt hier eine High Phase von ca 1,5ms (PWM Periode 
10ms).

Die LED dimmt zwar schon aber flackert stark und lässt sich nicht weit 
runter dimmen, sie ist irgendwann ganz aus. Je höher man dimmt (je 
heller...) desto weniger flackert es auch.

Woran könnte das liegen? Wo ist der Denkfehler?

Autor: ftf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie dimmst du denn?

also du hast 100Hz Frequenz, das kann man durchaus noch flackern sehen. 
Die Frequenz müsste höher sein.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>
>   if((TCNT0 >= 119) && (TCNT0 < 139))
>         {
>           PORT1  |= (1<<OUT8);  //aktiviere Ausgang vorübergehend
>         }
>         else
>         {
>           PORT1  &= ~(1<<OUT8);  //lösche Ausgang
>         }
> 

Wie oft pro Sekunde wird denn dieses IF-Konstrukt abgearbeitet?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> also du hast 100Hz Frequenz, das kann man durchaus noch flackern sehen.
Es geht offenbar um STARKES Flackern...
100Hz kannst du z.B. als Interferenz zu einer Leuchtstofflampe sehen. 
Aber STARK ist anders  :-o

> ein Timer erzeugt einen 10ms Takt und zählt
> mit einer Periode von ca 73us immer von 136 auf 255.
und
if((TCNT0 >= 119) && (TCNT0 < 139))
Hmmm...
Wie stellst du denn den PWM-Wert ein?
Zeig doch mal das ganze Programm...

> Wo ist der Denkfehler?
Der haupsächliche Denkfehler ist, dass dein Problem in den geposteten 
Zeilen liegt.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ein Timer erzeugt einen 10ms Takt und zählt
> mit einer Periode von ca 73us immer von 136 auf 255.
Er zählt auf 0, na egal, das macht den Kohl nicht fett.
256 - 136 = 120
120 * 73 us = 8,7ms
Wo sind denn da deine 10ms versteckt?

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist schon alles vom Programm was die PWM angeht, ich wollte es 
testen ob es so geht und habe einfach den anderen Timer benutzt und 
dieses If Konstrukt geschrieben. Dieses ist in der Main. Alle 10ms 
werden größere Funktionen abgearbeitet, kann es sein dass dann einfach 
der uC zu ausgelastet ist?

Autor: Daniel B. (scheinleistung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lothar: Sorry, Er zählt von 119 (!) auf 255

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig das komplette Programm. Alternativ halt die Main mit 
Initialisierung.

Autor: ftf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie konfigurierst du den Timer?
Welcher Prescaler? Welcher µC Takt
welcher Timermodus (CTC etc.)?

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.