Forum: Mikrocontroller und Digitale Elektronik AtTiny13 PWM LED flackert


von Wisler E. (wisler) Benutzerseite


Lesenswert?

Hallo,

ich habe das Pollin Board und darauf befindet sich ein AtTiny13 20PU. 
Ich betreibe ihn mit internem 9,6MHz Takt.
Ich bin gerade dabei mir eine Software PWM zu schreiben. Ich habe mich 
an dem Tutorial hier auf der Seite angelehnt.

Hier ist der Code in Assembler:
1
.include "tn13def.inc"
2
3
.def  work    = r16
4
.def  pwm_count  = r17
5
.def  pwm_sw    = r18
6
.def  temp    = r19
7
8
.equ  MAX_PWM    = 127
9
10
.equ  TIM0_COMPA  = 0x006
11
.equ  TIM0_OVF  = 0x003
12
13
.org 0x00
14
rjmp    INIT
15
.org TIM0_OVF      ;0x003
16
rjmp    TIME0_OVF
17
18
;---RESET--- //0x00A
19
INIT:
20
;Init Stack
21
ldi      work, RAMEND
22
out      SPL, work
23
24
;---IO Port einstellen---
25
ldi      work, 1<<PB0
26
out      DDRB, work
27
28
sbi      PORTB, PB0
29
30
;---PWM Zähler einstellen---
31
ldi      pwm_count, 0x00
32
ldi      pwm_sw, 127      ;pwm_count > pwm_sw --> LED aus
33
34
;Init Timer0
35
36
ldi      work, 1<<TOIE0
37
out      TIMSK0, work
38
39
;Timer0 Normaler Modus
40
ldi      work, 0x00
41
out      TCCR0A, work
42
43
;Timer0 start kein Vorteiler
44
ldi      work, 1<<CS00  
45
out      TCCR0B, work
46
47
sei      ;Alle Interrupts ein
48
49
50
;---Hauptprogramm---
51
MAIN:
52
rjmp    MAIN
53
54
55
;-------------Interrupts--------------
56
TIME0_OVF:
57
push  temp
58
ldi    temp, SREG
59
60
cpi    pwm_count, MAX_PWM +1    ;pwm_count = MAX_PWM +1 dann LED an
61
brne  go_on
62
sbi    PORTB, PB0
63
clr    pwm_count
64
65
66
go_on:
67
cp    pwm_count, pwm_sw    ;pwm_count = pwm_sw  dann LED aus
68
brne  tim0_ovf_end
69
cbi    PORTB, PB0
70
71
72
tim0_ovf_end:
73
inc    pwm_count        ;pwm_count +=1
74
75
out    SREG, temp
76
pop    temp
77
reti

Ich weiß leider nicht genau warum meine LED am ADDON Board flackert. Ist 
die Frequenz zu niedrig? Welche Frequenz nehmt ihr den für eine PWM mit 
einer LED? Normal müssten doch 150Hz ausreichen, damit das Flackern mit 
dem Auge nicht mehr zu sehen ist oder?
Meine PWM müsste dann diese Frequenz haben, wenn ich mich nicht 
verechnet habe:

Was könnte ich den noch versuche?


Vielen Dank schon mal für eure Hilfe im vorraus!

von Karl H. (kbuchegg)


Lesenswert?

Wisler Wisler schrieb:

> Meine PWM müsste dann diese Frequenz haben, wenn ich mich nicht
> verechnet habe:
>
>

Das sieht richtig aus.

> Was könnte ich den noch versuche?

Die naheliegenste Erklärung wäre es, wenn dein Tiny gar nicht mit 9.6Mhz 
getaktet wird, sondern immer noch auf seiner Werkseinstellung von 
~1.2Mhz läuft (plus minus ein paar Zerquetschte), weil CKDIV8 noch 
eingeschaltet ist

1200000 / (256 * 127) = ~30Hz

und das würde man als Flackern sehen.

von Wisler E. (wisler) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier sind die Einstellungen vom AVR Studio
ich habe den Prozessor mit 9,6MHz laufen.
Wenn ich noch weiter nach unten gehen also 4,8MHz dann flackern die LED 
noch mehr.

Danke schon mal für den Tipp. Könnte noch einen ATMega8 mit dem gleichen 
Code bei 8MHz testen. Könnte ich so einen Fehler ausschließen? Oder habe 
ich vielleicht einen Fehler in dem Programm?

Grüße Wisler

von Karl H. (kbuchegg)


Lesenswert?

Wisler Wisler schrieb:
> Hier sind die Einstellungen vom AVR Studio
> ich habe den Prozessor mit 9,6MHz laufen.

Aber da die CKDIV8 noch eingeschaltet ist, werden aus den 9.6 dann ganz 
schnell 1.2 Mhz

von Wisler E. (wisler) Benutzerseite


Lesenswert?

Vielen Dank,

nun funktioniert alles wie es soll. Manchmal kann halt ein kleiner Haken 
bei den Einstellungen sehr viel bewirken. Ich hatte den komplett 
übersehen.

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.