mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik OCR2 -> Wert von Timer2 wird nicht geschrieben in Simulation


Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin gerade dabei eine PWM mit dem Timer2 des Mega8 zu  erstellen. Das 
Problem ist, dass in der Simulation ( Avr-Studo 4.14) das Register OCR2 
nicht mit dem gewünschten Wert geladen wird. Nachfolgend der 
dazugehörige Quelltext meiner Initialisierungsroutine des Timers:
pwm_init:

  push akku

  ldi  akku,   0b01001000  ; fast PWM-Mode
  out  TCCR2,   akku
  ldi  reload_t2, 7        ; Reload-Wert für Timer
  out  TCNT2,   reload_t2
  ldi  akku,   0b11000000  ; Interruptfreigabe 
  out  TIMSK,   akku       ; ...für Overflow und Compare
  ldi  akku,   12          ; Comparewert laden
  out  OCR2,   akku
  
  pop akku
  reti

Hab ich da einen Programmierfehler drin? Oder ist das ein Bug des 
Simulators?

Gruß
Robert

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein "reti" gehört sicher nicht ans Ende von pwm_init:

Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, das pwm_init: ist doch eine Routine und diese wird mit rcall 
irgendwo im Programm aufgerufen. Hat das was mit dem Problem zu tun?

Mittlerweile hab ich rausgefunden, das OCR2 so zu setzen geht
pwm_init:

  push akku

  ldi  akku,   12          ; Comparewert laden
  out  OCR2,   akku
  ldi  akku,   0b01001000  ; fast PWM-Mode
  out  TCCR2,   akku
  ldi  reload_t2, 7        ; Reload-Wert für Timer
  out  TCNT2,   reload_t2
  ldi  akku,   0b11000000  ; Interruptfreigabe 
  out  TIMSK,   akku       ; ...für Overflow und Compare
  
  
  pop akku
  reti

aber warum muss ich es vor der Initialsierung der fast-PWM, also setzen 
der Bits in TCRR2, machen???
Jetzt habe ich ja zum späteren Zeitpunkt gar nicht die Möglichkeit das 
OCR2 zu ändern, da ich ja diese Initialsierung nur einmal aufrufe und 
TCRR2 schon gesetzt ist...
Oder wie ist es möglich dann OCR2 zu ändern?

Gruß
Robert

Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, jetzt hab ich es kapiert.

OCR2 wird immer nach dem ersten Zählerdurchlauf aktualisiert. Das heisst 
sobald ich den Zähler auf fast-PWM eingestellt habe muss der Zähler erst 
einmal komplett durchlaufen. Es sei denn ich setze OCR2 auf den Wert vor 
dem Setzen von TCCR2  ( hab ich übrigens erst falsch geschrieben).

@holger: ich hoffe du hast das mit "Hat das was mit dem Problem zu tun?" 
nicht böse aufgefasst ;-)

Gruß
Robert

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>@holger: ich hoffe du hast das mit "Hat das was mit dem Problem zu tun?"
>nicht böse aufgefasst ;-)

Nein, das war mir schon klar das das mit dem Problem
nichts zu tun hat. Fakt ist aber immer noch das "reti"
nur als return von einem Interrupt benutzt werden darf.

Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, aber wie komme ich dann von rcall an die Aufrufstelle zurück?

Gruß
Robert

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ok, aber wie komme ich dann von rcall an die Aufrufstelle zurück?

Lass das "i" für Interrupt weg.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit "ret"?

Autor: Robert P. (Firma: ---) (ausmilkel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, halt nur ret ;-) habs gefunden...
danke für die Info

Gruß
Robert

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.