Forum: Mikrocontroller und Digitale Elektronik servo pwm asm > überblick verloren


von Martin G. (zombo)


Lesenswert?

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>

von Martin G. (zombo)


Lesenswert?

schieb...

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Martin G. schrieb:

> 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.

Dann hast Du den Timer vermutlich im falschen Modus (Phase correct PWM 
anstatt fast PWM).

> <rechtschreibfehler dürfen behalten werden>

Das wird der Grund sein, warum Dir bisher keiner geantwortet hat, siehe 
Netiquette und "Wichtige Regeln" (z.B. Groß-Kleinschreibung).

MfG

von Ralf2008 (Gast)


Lesenswert?

Habe mal kurz drüber geschaut und in das
Datenblatt gesehen. Für die richtige
Initialisierung von Timer1 müsste die Zeile
1
ldi r16, (1<<com1a0) | (1<<com1b0)| (1<<wgm11)
durch
1
ldi r16, (1<<com1a1) | (1<<com1a0)| (1<<wgm11)
ersetzt werden.

Das würde für Timer1 dann FAST PWM, Mode 14,
Set OCnA/OCnB on Compare Match, clear OCnA/OcnB
at TOP etc. bedeuten ...

Außerdem siehe auch hier:
Beitrag "PWM mit ATtiny2313 an OCnx-Ausgang"


Ralf2008

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.