Hallo Searcher,
vielen Dank für deine schnelle Antwort und für den Hinweis mit dem [ CODE]. Das hatte ich gesucht nur leider nicht gefunden, sorry.
Deine Hinweise habe ich wie folgt umgesetzt, nur leider ist es das gleiche Verhalten wie zuvor.
Zitat von
Searcher
Mit dem Bitmuster 0b00011101 wird zwar CTC aber mit ICR1 als TOP Wert eingestellt.
Das Bitmuster habe ich jetzt auf 0b00001101 geändert.
Code:
;; Control Register B
LDI temp, 0b00001101 ; Timer prescaler of 1024 & Clear Timer on Compare Match (CTC) Mode -> self adjust overflow value
OUT TCCR1B, temp ; Control Register B
Zitat von
Searcher
Werte nicht nachgerechnet aber beide Register werden in der falschen Reihenfolge beschrieben. Auszug aus dem Datenblatt, Abschnitt "Accessing 16-bit Registers":
To do a 16-bit write, the high byte must be written before the low byte. For a 16-bit read, the low
byte must be read before the high byte
Die Reihenfolge habe ich nun geändert.
Code:
;; Output Compare Register 1 A for CTC
; write value 15625 -> 15625 * 1024 = 16MHz -> 1 second count
LDI temp, 0b00111101
OUT OCR1AH, temp
LDI temp, 0b00001001
OUT OCR1AL, temp
;; Output Compare Register 1 B for CTC
; write value 31,250 -> 31,250 * 1024 = 32MHz -> 2 seconds count
LDI temp, 0b01111010
OUT OCR1BH, temp
LDI temp, 0b00010010
OUT OCR1BL, temp
Zitat von
Searcher
Kommentar irreführend.
Kein Fehler aber Sichern des SREG und Wiederherstellen ist nicht notwendig, da die nachfolgenden Kommandos bis reti das Statusregister nicht ändern.
Das Sichern des SREG habe ich eingefügt, weil ich es machen wollte. Also als Übung und Vorsatz damit ich mir das angewöhne.
Beste Grüße
Helmut
Lesezeichen