hallo,
ich dimme eine led, die werte zum dimmen kommen vom uart,
das funktiniert auch.
Nun komme ich grade nicht weiter,so dert wert den ich über uart empfange
ist
zb.100,der wert steht jetzt auch in OCR2 drin (siehe bd),wie kann ich
nun die
Routine bd so umschreiben das sie vom aktuellen wert runter dimmt also
ich sende zuerst 100 OCR2 hat jetzt den wert100, dann sende ich 50 nun
sollte vom wert 100 runter gedimmt werden auf 50.
villeicht kann mir jemand weiterhelfen.
bd:
inc B_Out
out OCR2,B_Out
cp b,B_Out
brne bd
mfg
Hey,
Ich kann leider so garkein Assembler. Hab das selbe Problem allerdings
in C gelöst.
Undzwar:
Du nimmst einen Soll-Wert (50) und einen Ist-Wert (100). Der Ist-Wert
ist praktischerweise ja gleich deinem OCR-Register. Jetzt vergleichst
du, ob du größer oder kleiner bist und ziehst ab oder addierst zu.
Das ganze dann mit einer Zählervariable, damit du auch die Fading-Dauer
einstellen kannst.
so ich hab das ganze mal so probiert aber es wird zuerst hogedimmt dann
wieder zurück auf den wert vom uart
in B_Out,OCR2
cp b,B_Out
brsh b_d
bd:
inc B_Out
out OCR2,B_Out
rcall delay
cp b,B_Out
brne bd ;nein -> Schleife
rjmp dfg
b_d:
dec B_Out
out OCR2,B_Out
rcall delay
cp b,B_Out
brne b_d ;nein -> Schleife
dfg:
leider hauts nicht so richtig hin,
mein OCR2-wert ist bei 50 und in b steht ein wert von 25 so sollte
eigentlich der OCR2 wert runter gedimmt werden,es wird aber von 255 nach
25
gedimmt und andersum genau das gleiche soll der wert von 25 auf zb. 60
gdimmt werden.
in B_Out,OCR2
cp b,B_Out
breq dfg
brsh b_d
bd:
inc B_Out
rcall delay
out OCR2,B_Out
cp b,B_Out
brne bd ;nein -> Schleife
rjmp dfg
b_d:
dec B_Out
rcall delay
out OCR2,B_Out
cp b,B_Out
brne b_d ;nein -> Schleife
dfg:
Ich glaub du hast up und down verwechselt.
Versuchs mal damit:
1
in B_Out, OCR2
2
cp b, B_Out
3
breq no_dimm
4
brsh dimm_up
5
6
dimm_down:
7
dec B_Out
8
out OCR2, B_Out
9
rcall delay
10
cp b, B_Out
11
brne dimm_down ; -> neuer Wert noch nicht erreicht
12
rjmp no_dimm
13
14
dimm_up:
15
inc B_Out
16
out OCR2, B_Out
17
rcall delay
18
cp b, B_Out
19
brne dimm_up ; -> neuer Wert noch nicht erreicht
20
21
no_dimm:
Zu beachten ist noch der Zählerwert. Denn wenn der jetzt größer als dein
neuer OCR2 Wert ist, dann gibt es kein Compare-Match und der Zähler
zählt bis 255->0 ... bis neuer OCR2 Wert!