PWM gibt auch bei OCRnX = 0; noch ein Signal.

OP #4613589
Lesenswert?

Guten Tag,
Bei mir sind heute die 100 RGB LED's angekommen. Die LED's haben einen 
gemeinsamen Masse Pol. Ich habe drei Poti angebracht für die RGB Farben, 
und lese diese mit dem ATMega644(16 Mhz) ADC aus. Und gebe das Ergebnis 
an denn Entsprechen PWM Output weiter. Ich habe denn Timer1(16 Bit) auf 
8 Bit Fast PWM mit ein Prescaler von 64 eingestellt. Beim Timer2(8 Bit) 
auch Fast PWM und Prescaler von 64. Dieses Signale gebe ich dann an die 
einzeln Pins der LED weiter. Jedoch bleiben die Farben der LED auch bei 
0 % PWM(OCRnX im USART ausgeben. Dort kommt "0" an.) noch schwach an. 
Auf dem Oszi Bild kann man sehen wie ab und zu "störbalken" nenne, ich 
sie mal auf treten. Wenn ich mehr PWM gebe, kommt das typische PWM Bild 
mit denn Balken.
Ist das normal?

Aufbau der Schaltung sowie das Oszi Bild und meine main Klasse habe ich 
angehängt.

Mfg J. Niehes
Angehängte Dateien:
#4613600
Lesenswert?

@Jan Niehes (jan_n497)

>an denn Entsprechen PWM Output weiter. Ich habe denn Timer1(16 Bit) auf
>8 Bit Fast PWM mit ein Prescaler von 64 eingestellt. Beim Timer2(8 Bit)

>Ist das normal?

Ja, das ist eine Eigenschaft der PWM des AVRs. Wenn das weg soll, gibt 
es 2 Wege.

1. Nutze Phase correct PWM, dann geht sowohl ganz aus bei 0 und ganz ein 
bei dem entsprechenden Maximalwert.
2. Behandle den Fall 0 gesondert und schalte die PWM.Funktion ab, das 
macht man mit den COMxy Bits im Timerregister A
#4613606
Lesenswert?

@Jan Niehes (jan_n497)

>> Behandle den Fall 0 gesondert und schalte die PWM.Funktion ab, das
>> macht man mit den COMxy Bits im Timerregister A

>Sorry, das verstehe ich nicht. Fall 0?

Wenn dein Programm eine 0 in OCRxy schreiben will, muss man das abfangen 
und getrennt behandlen
Natürlich muss man auch den Fall berücksichtigen, wenn nach 0 mal 
wierder nicht 0 geschrieben wird.
1
pwm=wasauchimmer;
2

3
if (pwm == 0) {
4
  // SOnderbehandlung, OCRxy abschalten und manuell auf LOW schalten
5
  TCCRxA = ...  // PWM ausschalten
6

7
} else {
8
  TCCRxA = ...  // PWM einschalten
9
  OCRxA = pwm;
10
}
#4613614
Lesenswert?

Im Datenblatt heißt es dazu:

The extreme values for the OCR0A Register represents special cases when 
generating a PWM waveform output in the fast PWM mode. If the OCR0A is 
set equal to BOTTOM, the output will be a narrow spike for each MAX+1 
timer clock cycle. Setting the OCR0A equal to MAX will result in a 
constantly high or low output.

Man kann also bei Invertierung der PWM ein konstantes "low" erreichen.
#4613619
Lesenswert?

@ Felix Pflaum (fixxl)

>Man kann also bei Invertierung der PWM ein konstantes "low" erreichen.

Kann man, aber dann hat man kein konstantes HIGH mehr. Was ist aber 
wahrscheinlich das kleinere Übel, denn ein leichte Glimmen der LEDs ist 
störender als nur 99,5% Maximalleistung.
OP #4613728
Lesenswert?

Falk B. schrieb:
> pwm=wasauchimmer;
>
> if (pwm == 0) {
>   // SOnderbehandlung, OCRxy abschalten und manuell auf LOW schalten
>   TCCRxA = ...  // PWM ausschalten
>
> } else {
>   TCCRxA = ...  // PWM einschalten
>   OCRxA = pwm;
> }

Hi Falk.
Sorry für die späte Antwort. Wahr beim Sport.
Hhmm, ich glaube das ich das nicht anwenden kann. Denn mit dem 16 Bit 
Timer kontrolliere ich die Rote und die Grüne LED in der RGB Led. Also 
ausschalten. Dann wäre ja auch der Rote weg wenn Grün 0 ist und 
umgekehrt. Ich werde es mal mit PWM Phase Correct versuchen
Gast #4613775
Lesenswert?

>Kann man, aber dann hat man kein konstantes HIGH mehr. Was ist aber
>wahrscheinlich das kleinere Übel, denn ein leichte Glimmen der LEDs ist
>störender als nur 99,5% Maximalleistung.

Genau umgekehrt. Das menschliche Auge wird den Unterschied zwischen 
99,5% und 100% überhaupt nicht sehen - ein leichtes Glimmen, wenn 
eigentlich Dunkelheit sein soll sehr wohl.
#4613988
Lesenswert?

Durchstarter schrieb:
>>Kann man, aber dann hat man kein konstantes HIGH mehr. Was ist aber
>>wahrscheinlich das kleinere Übel, denn ein leichte Glimmen der LEDs ist
>>störender als nur 99,5% Maximalleistung.
>
> Genau umgekehrt. Das menschliche Auge wird den Unterschied zwischen
> 99,5% und 100% überhaupt nicht sehen - ein leichtes Glimmen, wenn
> eigentlich Dunkelheit sein soll sehr wohl.

Darüber willst du nochmal nachdenken. Glaube ich.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren