Attiny85 PWM Problem (LED Dimmen)

OP #1899025
Lesenswert?

Hallo, ich habe folgendes Problem ich möchte gerne eine Led mit fast PWM 
dimmen, dies gelingt mir leider schon seit TAGEN nicht, ich habe schon 
überall nach lösungen gesucht, aber keine gefunden die sich auf den 
attiny85 übertragen lässt. Wäre um hilfe sehr dankbar. Lg Snackez und 
vielen Dank im Vorraus.

Hier der Quelltext von meinen Versuchen:
1
#include <avr/io.h>
2

3
 
4
int main (void)
5
{
6

7
  DDRB  = 1<<DDB0;
8
  PORTB = (1<<PB0); 
9
  TCCR0A=(1<<COM0A1) | (1<<WGM00) | (1<<WGM01);
10
  TCCR0B=(1<<WGM02) | (1<<CS00) | (0<<CS01) | (1<<CS02);
11
  OCR0A=128;
12

13
  while(1)
14
{
15

16
}
17
  return 1;
18
}
#1899357
Lesenswert?

Ich habe an der Stelle zufällig letzte Woche auch gekämpft.
Mit TOP legt man den oberen Zählerwert fest, wenn dieser erreicht wird, 
wird der Zähler anschliessend zurückgesetzt.
Damit kann man eine höhere Frequenz für die PWM erreichen, mit der 
Einbusse an Auflösung.
Nur leider mit dem Ausgang PB0 (OC0A) funktioniert das ganze nicht, da 
OCRA0 sich hier nach dem setzen sich sofort wieder zurückstellt.
Wird stattdessen PB1 (OC0B) verwendet, kann man hier dem OCRA0 den 
oberen Wert festlegen und mit OCR0B die Pulsweite.

Gruß Gerd
Gast #1899367
Lesenswert?

Wenn OCRA Top ist, dann ist das die Obergrenze für den Zähler. Der zählt 
nicht mehr bis 255, sondern eben nur bis Top, in Deinem Beispiel 128. Da 
der Umschaltpunkt der PWM dann immer identisch mit der Obergrenze des 
Zählers ist, kann sie für PWM0A nicht mehr funktionieren. Man kann die 
Sache allerdings für PWM0B nutzen um schnellere PWMs mit kleinerer 
Auflösung zu erzeugen. Der Modus ist also nicht sinnfrei.

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