moin!
für einen servocontroller brauch ich kommazahlen (um nicht nur die maximalpositionen bei einer pulslänge von 1 oder 2 anfahren zu können). das doofe ist, dass mein basic-compiler nur ganze zahlen bei einer wait-operation zulässt. ich hatte das so vor:
Code:
define var pls as byte 'variable für die pulslänge
low rb.0
let pls = 1
pulse:
wait 20
high rb.0
wait pls
low rb.0 'einmal 20 ms low und dann high für pulslänge
if rb.1 = high then goto increase 'wenn taste an rb.1 gedrückt
goto pulse
increase:
let pls = pls + 0.1 'zu pls 0,1 addieren
if pls > 2 then pls = 1 'pls nicht zu groß werden lassen
wait 500 'kurze pause
goto pulse
das prog soll bei tastendruck den servo ein stück weiterfahren und bei endposition wieder an die anfangsposition gehen.
der compiler macht allerdings aus dem "+0,1" "+1", wodurch mein servo bei tastendruck die jeweils andere endposition (1 oder 2) anfährt.
jetzt hab ich mir überlegt, ich könnte das ganze in assembler vielleicht beheben, so dass ich den assembler-code direkt bearbeite und da eintrage, dass er nicht 1 sondern 0,1 dazuaddieren soll. der assembler-code den der compiler erstellt sieht an der stelle so aus:
Code:
;ø~ø00039 let pls = pls + 0.1 'addiere 0,1ms zu pls
movf 64,w
movwf 16
movf 64+1,w
movwf ARG0+1
movlw 1
movwf 18
clrf ARG1+1
call $$ADD16
movf 16,w
movwf 64
movf ERG+1,w
movwf 64+1
clrwdt
;ø~ø00040 'fertig
das was hinter den kryptischen zeichen (zeilennummern vermute ich) steht, ist er basiccode, direkt drunter dann der assembler
nun hab ich von assembler wenig ahnung und wollte mal die freaks hier fragen, was ich verändern muss.... hoffe ihr werdet schlau aus dem problem!
Lesezeichen