Moin,
Ich initialisiere und teste den Timer0 für Phase Correct PWM so:
1 | $regfile = "ATtiny841.DAT"
|
2 |
|
3 | $crystal = 8000000 'Internal RC
|
4 |
|
5 | $hwstack = 100
|
6 | $swstack = 16
|
7 | $framesize = 16
|
8 |
|
9 | 'WDT off:
|
10 | Reset Watchdog
|
11 | Mcusr.wdrf = 0 'WD Reset flag
|
12 | Ccp = &HD8 'Enable protected registers
|
13 | Wdtcsr.wde = 0 'WD Enable Off
|
14 |
|
15 | Ddra.7 = 1
|
16 | Led Alias Porta.7 'Pin 6
|
17 |
|
18 | Tccr0a.com0a1 = 1 'clear up
|
19 | Tccr0a.wgm00 = 1 'Phase correct PWM
|
20 | Tccr0b.cs01 = 1 'Prescaler 8 / 256 / 2 = 2kHz
|
21 |
|
22 | Ddra.2 = 1 'TOCC1, OC0A, Pin 11
|
23 | Motor Alias Ocr0a
|
24 |
|
25 | Enable Interrupts
|
26 |
|
27 | Ocr0a = 125
|
28 | Do
|
29 | Waitms 1
|
30 | 'Toggle Porta.2
|
31 | Toggle Led
|
32 | Loop
|
Das ist das komplette Programm wie ich es getestet habe.
Folgendes habe ich geprüft:
Controller läuft, "LED" taktet mit 500Hz wie erwartet.
PortA.2 funktioniert wenn ich den manuell (also in Software) schalte.
OCR0A sollte auf TOCC1 und somit A.2 liegen, wenn das Multiplexing
default ist.
Nur tut sich an PortA.2 nix per PWM.
Wo habe ich da jetzt Tomaten auf den Augen?
Gruß,
Norbert