Hallo,
mein Atmega32 läuft auf 8 MHz intern und habe folgenden Code bisher in
der Main:
1
TCCR1A=(1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10)|(1<<WGM12);//Fast-PWM: 8Bit, IST invertiert A/B,
2
TCCR1B=(1<<CS12);// 256 PreScaler
3
TCCR2=(1<<CS22)|(1<<CS21)|(0<<CS20)|(1<<WGM20)|(1<<WGM21)|(1<<COM20)|(1<<COM21);//Fast-PWM: 8 Bit, IST invertiert, 256 PreScaler
4
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!
Mathias O. schrieb:
> Das einzigste was mir auffällt ist das>
1
(0<<CS20)
> und>
1
(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.
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)
1
The extreme values for the OCR0 Register represents special cases when
2
generating a PWM waveform output in the fast PWM mode. If the OCR0 is set
3
equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer
4
clock cycle. Setting the OCR0 equal to MAX will result in a constantly
5
high or low output (depending on the polarity of the output set by the
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 ;)
> 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.
@ 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!
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.