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:
das prog soll bei tastendruck den servo ein stück weiterfahren und bei endposition wieder an die anfangsposition gehen.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
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:
das was hinter den kryptischen zeichen (zeilennummern vermute ich) steht, ist er basiccode, direkt drunter dann der assemblerCode:;ø~ø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
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!![]()







Zitieren

Lesezeichen