Forum: Mikrocontroller und Digitale Elektronik PWM ATtiny841 läuft falsch


von Heribert (Gast)


Lesenswert?

Hab ein Problem, dass meine PWM nicht richtig dimmt. Die LED ist fast 
dauerhaft an. NUr nach wenigen Sekunden sieht man irgendwann einmal dass 
sie runterdimmt.

Würde gernen einen 20kHz PWM Timer aufbauen mit einer Auflösung von 9 
oder 10Bit. F_CPU = 8E6. Habe noch nicht nicht den richtigen Tipp im 
Datenblatt umsetzen können.
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4
5
#define RED_DDR    DDRB
6
#define RED_PORT  PORTB
7
#define RED_PIN    PORTB2
8
9
int main(void)
10
{
11
12
  // Set DDR
13
  RED_DDR |= (1<<RED_PIN);
14
  
15
  // FastPWM non-inverted |  9-Bit
16
  TCCR1A |= (1<<COM1A1) | (1<<WGM11);
17
  TCCR1B |= (1<<WGM12);
18
  
19
  // Prescaler /256
20
  TCCR1B |= (1<<CS12);
21
  
22
  // Pin Mux Selection Register
23
  // TOCC7 (PORTB2) -> 01
24
  TOCPMSA1 |= (1<<TOCC7S0);
25
  
26
  // Output Enable
27
  TOCPMCOE |= (1<<TOCC7OE);
28
  
29
  // Reset Timer-Value
30
  OCR1A = 0;
31
32
  sei();
33
  
34
  while(1)
35
  {
36
    while(OCR1A < 511) { OCR1A++; _delay_ms(50); }
37
    while (OCR1A > 0) { OCR1A--; _delay_ms(50); }
38
  }
39
}

von Uwe (de0508)


Lesenswert?

Hallo,

nun die Formel sind aber abgedruckt:
12.9.3 Fast PWM Mode S.101f
fpwm = flck /(N(1+TOP))

Es gilt
TOP = 511
N E { 1,8,64,256,1024 }

Und mit deinen Vorgaben ?

fpwm = 8*10^6 /256 /512 = 61Hz

Nutz man die Formel nach Umstellung anders, erhält man:

N = flck /fpwm /512 = 0,7813

Und diesen Vorteiler gibt es nicht.

Also mit N = 1 ==>
fpwm = flck /(N(1+TOP))
fpwm = 8*10^6 /1 /512 = 15,0625 kHz

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Heribert schrieb:

> F_CPU = 8E6.

Sicher?
Hast du das getestet?

Wenn du nur in das Programm 8Mhz reinschreibst, dann ändert das am µC 
nichts. Damit der auf 8Mhz läuft, musst du an die Fusebits ran. Hast du 
das gemacht? Im Auslieferungszustand läuft der AVR mit 1Mhz, was deine 
Zeitverzögerung erklären könnte. Denn dann geht alles 8 mal so langsam.

von Linksammler (Gast)


Lesenswert?

Heribert schrieb:
> Die LED ist fast
> dauerhaft an. NUr nach wenigen Sekunden sieht man irgendwann einmal dass
> sie runterdimmt.

Du dimmst linear, die beteiligten Kennlinien sind alles andere als das.

LED-Fading

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.