Gast
#1292884
Nabend,
ich versuche meiner kleinen Schaltung beizubringen in einem bestimmten
Takt zu blinken.
Zum Erzeugen der Taktrate nehme ich einen Warteschleifengenerator.
Mir ist aufgefallen, das zwischen der Taktrate im Code und dann der
tatsächlichen Rate (meist langsamer) ein Unterschied besteht.
Beispiel 10hz.
.include "tn13def.inc"
;
start:
ldi r16, $1f
out DDRB, r16
ldi r16, $00
out PortB, r16
;
Loop:
sbi PortB, 0
rcall Warte
cbi PortB, 0
rcall Warte
rjmp Loop
Warte:
; =============================
; Warteschleifen-Generator
; 400000 Zyklen:
; -----------------------------
; warte 399999 Zyklen:
ldi R17, $97
WGLOOP0: ldi R18, $06
WGLOOP1: ldi R19, $92
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; warte 1 Zyklus:
nop
; =============================
ret
Im Generator läßt sich die Taktrate von 1,0000 bis 11,059 auswählen.
Da 4,000 voreingestellt war, habe ich damit gearbeitet.
Dazu noch die Zeit (z.B 0,1 für 10 hz).
Ich benutze einen tiny13.
Ich hoffe mir kann da jemand einen Tipp geben, was ich ändern muss.
Grüße
Andreas