www.mikrocontroller.net

Forum: Compiler & IDEs PWM macht Probleme


Autor: Taub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mein Atmega32 läuft auf 8 MHz intern und habe folgenden Code bisher in 
der Main:
  TCCR1A = (1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10)|(1<<WGM12); //Fast-PWM: 8Bit, IST invertiert A/B,
  TCCR1B = (1<<CS12); // 256 PreScaler
  TCCR2  = (1<<CS22)|(1<<CS21)|(0<<CS20)|(1<<WGM20)|(1<<WGM21)|(1<<COM20)|(1<<COM21); //Fast-PWM: 8 Bit, IST invertiert, 256 PreScaler
  TCCR0  = (1<<WGM01)|(1<<WGM00)|(1<<COM01)|(1<<COM00)|(0<<CS00)|(1<<CS02); //Fast-PWM: 8 Bit, IST invertiert, 256 PreScaler 
Problem (Habe RGB LEDs angeschloßen):
1. Prescaler geht nur 1024 und 256, bei niedriger ist die PWM dauerhaft 
"1".
2. bei den unteren 30% flackerts
3. TCCR0 bzw TCCR2 hat ein gewissen Grundleuchten/Signal, während 
TCCR1A/TCCR1B  bei 0% auch wirklich 0% sind.
Woran liegt das? Wie lassen sich diese Probleme beheben?

Danke!

Autor: Mathias O. (m-obi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einzigste was mir auffällt ist das
(0<<CS20)
und
(0<<CS00)
Meiner Meinung nach geht das nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mathias O. schrieb:
> Das einzigste was mir auffällt ist das
>
(0<<CS20)
> und
>
(0<<CS00)
> Meiner Meinung nach geht das nicht.

Es geht schon, es macht nur nix.
Wenn die Absicht war, dieses Bit nicht zu setzen, dann geht das so in 
Ordnung. Viele sind der Ansicht, dass man in diesem Fall den Term 
entfernen sollte. Andere lassen ihn drinnen um anzuzeigen, dass dieses 
Bit bewusst nicht gesetzt wird. Von daher geht das in Ordnung.

Aber das erklärt nicht das Problem des OT.
Persönlich tippe ich auf ein Hardwareproblem. Aus Softwaresicht gibt es 
keinen Grund, warum kleinere Vorteiler nicht funktionieren sollten. Da 
gibt es auch keine Ausnahmen oder sonstige Fallen. Wenn man die 
richtigen CS Bits im richtigen Register setzt, wird auch der Vorteiler 
entsprechend ausgewählt.

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Bit "WGM12" ist im Register TCCR1B nicht -A, dein Timer1 läuft im 10 
Bit Phase-correct-PWM-Mode
> 1. Prescaler geht nur 1024 und 256, bei niedriger ist die PWM
> dauerhaft "1".
> 2. bei den unteren 30% flackerts
Zeige mehr Code und deinen Schaltplan
> 3. TCCR0 bzw TCCR2 hat ein gewissen Grundleuchten/Signal, während
> TCCR1A/TCCR1B  bei 0% auch wirklich 0% sind.
Liegt am Fast-PWM mode (und am anders/falsch konfigurierten Timer1)
Aus dem Datenblatt ("Timer0" -> "Modes of operation" -> FastPWM)
The extreme values for the OCR0 Register represents special cases when
 generating a PWM waveform output in the fast PWM mode. If the OCR0 is set 
equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer
 clock cycle. Setting the OCR0 equal to MAX will result in a constantly
 high or low output (depending on the polarity of the output set by the
 COM01:0 bits.)
 (gleiches für die anderen Timer)

rtfm, Jörg

Autor: Mathias O. (m-obi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Karl:
OK dann wurde ich jetzt eines besseren belehrt. Ich dachte nur er hatte 
sich vertippt.

Autor: Taub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure schnellen Antworten!

@ Mathias / Karl
Habe die (0<<abc) Syntax nur zum testen drin, ob mit oder ohne führt zum 
selben Ergebnis.

@ Jörg
Danke, hat ich übersehen und jetzt korrigiert.

Und nochmal an alle:
Zu Punkt 1, glaube es liegt an einem Denkfehler von mir. Hab bisher mit 
9Bit Auflösung getestet, durch die feinen Stufen ging die LED richtig 
schön dunkel zu dimmen, allerdings erst im letzten 1/5 des 9Bit 
Bereiches.
Jetzt mit der 8Bit Auflösung scheint der Bereich in einer Zahl zu 
liegen. Also auf den invertierten Modus bezogen, 255 ist aus, 254 schon 
recht (zu) hell. Alle anderen Werte machen einen kaum sichtbaren 
Unterschied.
D.h. ich brauche 3 Timer (RGB-LED) die mind. 9 Bit können um die LED 
dunkler zu bekommen (ohne das es flackert)?
Mein Atmega32 hat nur 2x 16 Bit und 2x 8Bit Timer, also benötige ich 
einen Atmega64 um es Hardwareseitig zu lösen.

Bitte gebt eure Meinung ab bzw. korrigiert mich!

Die hohe Helligkeit bei dem fast 0 Helligkeitswert bekomme ich nur durch 
senken der Taktfrequenz oder erhöhen des Prescalers weg?

PS:
Demnach war es kein Prescalerproblem, sondern ein menschliches 
Augenproblem ;)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die hohe Helligkeit bei dem fast 0 Helligkeitswert bekomme ich nur
> durch senken der Taktfrequenz oder erhöhen des Prescalers weg?

Nein, wieso? Der LED ist der Takt ziemlich wurscht. Viel weiter wirst du 
nicht senken können. Bei 8 Mhz und einem Prescaler von 1024 hast du ja 
eh nur noch 30 Hz PWM-Frequenz.
Wie hast du die LEDs eigentlich angeschlossen? Du hast hoffentlich nicht 
noch einen Kondensator parallel geschaltet oder so? Das würde nämlich 
das Verhalten ganz gut erklären.

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Taub,

schau dir doch mal die Tiny261/461/861 an.

Haben "nur" 2 Timer, aber der Timer 1 ist 16 Bit und kann
3 x PWM mit 10 Bit machen.

gruß hans

Autor: Taub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rolf
den Kondensator hab ich mir verkniffen, es hängt nur ein MOSFET davor 
und an seinem Gate noch ein Transistor als Vorverstärker, damit es auch 
sicher in die Sättigung kommt.

@ hans
Danke für den Tip, ich schau gleich mal, hört sich gut an!
... glaube mein Problem ist gelöst...

Danke an alle nochmal!

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.