mikrocontroller.net

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


Autor: Martin G. (zombo)
Datum:

Bewertung
0 lesenswert
nicht 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:
.include <m16def.inc>


.org 0x0000
  rjmp main

main:
  ldi r16, low(ramend)
  out spl, r16
  ldi r16, high(ramend)
  out sph, r16
  

  ;timer settings
    
  ldi r16, (1<<com1a0) | (1<<com1b0)| (1<<wgm11) 
  out tccr1a, r16

  ldi r16, (1<<wgm13)| (1<<wgm12) | (1<<cs12) 
  ;wgm 11,12 und 13 für mode 14 ctc cs10 für no prescaling
  out tccr1b, r16
    
  

  ldi r16, 0x18
  out icr1h, r16
  ldi r16, 0x6a
  out icr1l, r16  ;zähler für 20 ms bei 8mhz

  ldi r16, 0x01
  out ocr1ah, r16
  ldi r16, 0xd4
  out ocr1al, r16  ;zähler für 1,5ms

  
  ldi r16, 0xff
  out ddrd, r16  ;ausgänge definieren


loop:
  nop
  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>

Autor: Martin G. (zombo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schieb...

Autor: Kluchscheißernder Nixwisser (kluchscheisser)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf2008 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mal kurz drüber geschaut und in das
Datenblatt gesehen. Für die richtige
Initialisierung von Timer1 müsste die Zeile
ldi r16, (1<<com1a0) | (1<<com1b0)| (1<<wgm11)
durch
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.