TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: peyutron1 en 28 de Septiembre de 2009, 09:43:52
-
Buenas!!
llevo todo el dia probando para poder parar un servo en una posicion y no hay manera estoy utilizando este codigo
' servo que se mueve de izquierda a derecha
ser var portb.0 'servo en el B0
pw var byte
pw = 150
derecha:
pulsout ser,pw
pause 18
pw = pw + 1
if pw > 220 then izquierda
goto derecha
izquierda:
pulsout ser,pw
pause 18
pw = pw - 1
if pw < 80 then derecha
goto izquierda
endpero no hay manera he intercalado "pauses" por todos los sitios y no hay manera de que se este quieto en un lado,va dando saltitos sin ton ni son. Mi intencion esque haga un barrido y se detenga en la posicion mas a la izquierda durante 5seg y luego valla otra vez a la derecha hasta el final y se detenga otros 5 seg. una ayudita?? Gracias de antemano
-
Para conseguir que se estabilice, tienes que mandar CONTÍNUAMENTE una señal PWM con un tiempo en alto determinado.
Mira:
http://slalen.ifastnet.com/index.php/servomotores.html
http://slalen.ifastnet.com/index.php/futaba-y-los-pics.html
Si haces un pause, dejas de mandar la señal con lo que el servo se posiciona en su origen.
-
mmmm, para empezar no inicializas el puerto b con un pulso en 0, tendria que ser algo así:
derecha:
PORTB = 0
pulsout ser,pw
pause 18
Esta medio raro como estas variando el "pw", igual y podria ser algo así:
derecha:
PORTB = 0
for pw = 80 to 221
pw = pw + 1
pulsout ser,pw
if pw > 220 then izquierda
NEXT pw
Y tal vez para hacer lo que dices del retardo podrias hacer un for anidado el la subrutina "izquierda".
Es lo que se me ocurre, espero te sirva.
-
buenas! he estado un poco liado y no he podido responder antes, he hecho esto :
' servo que se mueve de izquierda a derecha
ser var portb.0 'servo en el B0
pw var byte
pw = 150
ser = 0
derecha:
ser = 0
for pw = 80 to 220
pulsout ser,pw
pause 18
pw = pw + 1
if pw > 220 then izquierda
next pw
goto derecha
izquierda:
ser = 0
for pw = 220 to 80
pulsout ser,pw
pause 18
pw = pw - 1
if pw < 80 then derecha
next pw
goto izquierda
endpero solo va hacia un lado y ahi se keda... bueno en fin probando mas cosas probe esto otro,
ser var portb.0 ;servo en el B0
forw var portb.1 ;motor en el B1>
back var portb.2 ;motor en el B2> este motor es controlado por un puente H
p1 var porta.0 ;pulsador en el puerto A0
p2 var porta.1 ;pulsador en el puerto A1
b1 var byte
frec var byte
b1 = 150 ; variable para poner el servo en posicion central
frec = 18
start:
low back ;pone en nivel bajo el puerto B2
pulsout ser, b1 ; pone el servo en posicion central
pwm forw,frec,30 ;el motoro se mueve hacia adelante
if p1 = 0 then izquierda ; si se pulsa p1 ir a etiqueta izquierda
if p2 = 0 then derecha ;si se pulsa p2 ir a etiqueta derecha
goto start ; repite start
izquierda:
high back ;pone marcha atras el motor
pulsout ser, b1 ;gira hacia la izquierda hasta llegar al tope
pause 18
b1 = b1 + 1
if b1 > 210 then start ; cuando llega al tope pasa a la etiqueta start
goto izquierda ; repite la etiqueta hasta que if -- then sea cierto
derecha:
high back
pulsout ser, b1
pause 18
b1 = b1 - 1
if b1 < 80 then start
goto derecha
end
vale pues funciona todo menos que vuelva a su posicion central, he intentado hacer una etiqueta llamada start y otra forward start:
pulsout ser, b1
pause 18
b1 = b1
if b1 = b1 then forward
goto start
forward:
low bck
pwm forw,frec,30
if p1 = 0 then izquierda
if p2 = 0 then derecha
goto forwardpero me sigue pasando lo mismo, cuando llega a la izquierda o a la derecha ahi se queda... vuelve a ir hacia delante pero el servo no recupera su posicion central, he provado con for x = 1 to 10 para este ultimo "start" pero nada o peor...
se que esto se supone que es lo mas sencillo del mundo... pero no hay manera...alguna sugerencia?? que estoy haciendo mal?