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!