Moinsen,
ich bin mal wieder am verzweifeln. hab mir in den letzten tagen ein
kleines programm erarbeitet, in dem ich mit dem timer0 ein servo
ansteuere.
klappt soweit auch ganz gut nur reicht mir die auflösung nicht. deshalb
habe ich versucht mit dem tut und dem datenblatt des mega16 eine pwm für
meine servos zu schreiben. nur leider macht der nicht was er soll:
1 | .include <m16def.inc>
|
2 |
|
3 |
|
4 | .org 0x0000
|
5 | rjmp main
|
6 |
|
7 | main:
|
8 | ldi r16, low(ramend)
|
9 | out spl, r16
|
10 | ldi r16, high(ramend)
|
11 | out sph, r16
|
12 |
|
13 |
|
14 | ;timer settings
|
15 |
|
16 | ldi r16, (1<<com1a0) | (1<<com1b0)| (1<<wgm11)
|
17 | out tccr1a, r16
|
18 |
|
19 | ldi r16, (1<<wgm13)| (1<<wgm12) | (1<<cs12)
|
20 | ;wgm 11,12 und 13 für mode 14 ctc cs10 für no prescaling
|
21 | out tccr1b, r16
|
22 |
|
23 |
|
24 |
|
25 | ldi r16, 0x18
|
26 | out icr1h, r16
|
27 | ldi r16, 0x6a
|
28 | out icr1l, r16 ;zähler für 20 ms bei 8mhz
|
29 |
|
30 | ldi r16, 0x01
|
31 | out ocr1ah, r16
|
32 | ldi r16, 0xd4
|
33 | out ocr1al, r16 ;zähler für 1,5ms
|
34 |
|
35 |
|
36 | ldi r16, 0xff
|
37 | out ddrd, r16 ;ausgänge definieren
|
38 |
|
39 |
|
40 | loop:
|
41 | nop
|
42 | rjmp loop
|
die bits werden im simulator richtig gesetzt, nur zählt er nicht bis icr
und setzt den zähler zurück, sondern zählt nur bis ocr1a und dann wieder
rückwärts.
hab mir die ganze nacht um die ohren geschlagen , komme aber nicht auf
den fehler....
lg martin
<rechtschreibfehler dürfen behalten werden>