-
-
Fast PWM
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
-
Erfahrener Benutzer
Roboter Genie
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
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen