PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fast PWM



sahra
13.04.2010, 08:50
schön guten Morgen,
kann mir bitte jemand sagen warum hier in OCR1A wird nur 0x1FFF geschrieben egal was ich in diesem Reg schreibe. Hier ist der Code:
danke


.include "m88def.inc"

.def temp1 = r17
.equ XTAL = 3686400


rjmp init


init:

ldi temp1, LOW(RAMEND) ; Stackpointer initialisieren
out SPL, temp1
ldi temp1, HIGH(RAMEND)
out SPH, temp1
;
; Timer 1 einstellen
;
; Modus 14:
; Fast PWM, Top von ICR1
;
; WGM13 WGM12 WGM11 WGM10
; 1 1 1 0
;
; Timer Vorteiler: 256
; CS12 CS11 CS10
; 1 0 0
;
; Steuerung des Ausgangsport: Set at BOTTOM, Clear at match
; COM1A1 COM1A0
; 1 0
;
ldi temp1, 1<<COM1A1 | 1<<WGM11
sts TCCR1A, temp1
ldi temp1, 1<<WGM13 | 1<<WGM12 | 1<<CS12; |1<<CS12
sts TCCR1B, temp1
;
; den Endwert (TOP) für den Zähler setzen
; der Zähler zählt bis zu diesem Wert
;
ldi temp1, 0x6F
sts ICR1H, temp1
ldi temp1, 0xFF
sts ICR1L, temp1
;
; der Compare Wert
; Wenn der Zähler diesen Wert erreicht, wird mit
; obiger Konfiguration der OC1A Ausgang abgeschaltet
; Sobald der Zähler wieder bei 0 startet, wird der
; Ausgang wieder auf 1 gesetzt
;
ldi temp1, 0x3F
sts OCR1AH, temp1
ldi temp1, 0xFF
sts OCR1AL, temp1[/color]
; Den Pin OC1A zu guter letzt noch auf Ausgang schalten
ldi temp1, 0x02
out DDRB, temp1

main:
rjmp main

askazo
13.04.2010, 09:28
Hi,

beim Beschreiben von 16-bit-Registern muss der Controller High- und Low-Byte gleichzeitig in das Register schreiben. Dazu dürfen die Werte aber nicht in der selben Variable abgelegt werden. Zudem sollten die Interrupts während einem 16-Bit-Zugriff deaktiviert werden.

Les' Dir mal das Kapitel "Accessing 16-bit Registers" im Datenblatt durch.

Gruß,
askazo