TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: sejotre en 07 de Marzo de 2013, 23:36:54
-
hola a todos!!
estoy haciendo un programita tratando de controlar la velocidad de un servo con 4 pulsadores (que cada uno determine cierta velocidad )
y que de solo 400 grados(esto lo vere mas adelante)
despues de haber leido bastante en el foro no encuentro cual es el problema que tengo me pueden ayudar?
lo intente con el 12f675 y no logre nada me pase al 16f627a y tampoco
aca les dejo el programa para que me lo revisen si pueden
@ DEVICE INTRC_OSC_NOCLKOUT,PROTECT_OFF,WDT_OFF,PWRT_ON,MCLR_ON,BOD_OFF,LVP_OFF,CPD_OFF
servo1 var portb.7
trisb = %00001111
pause 500
bot1 var portb.0
bot2 var portb.1
bot3 var portb.2
bot4 var portb.3
start:
if bot1 = 0 then
PulsOut servo1, 180
pause 100
if bot2 = 0 then
PulsOut servo1, 170
pause 200
if bot3 = 0 then
PulsOut servo1, 160
pause 300
if bot1 = 0 then
PulsOut servo1, 130
pause 400
else
goto start
endif
endif
endif
endif
end
gracias
-
Hola; tienes que especificar un poco más, hay que indicar si el compilador te da algún tipo de error o simplemente compila bien pero no hace lo que quieres.
Yo no utilizo la misma versión de basic, pero por lo pronto esa estructura aplicada a mi compilador daría errores, te cambio la estructura del código:
@ device intrc_osc_noclkout, protect_off, wdt_off, pwrt_on, mclr_on, bod_off, lvp_off, cpd_off
servo1 var PORTB.7
TRISB = %00001111
pause 500
bot1 var PORTB.0
bot2 var PORTB.1
bot3 var PORTB.2
bot4 var PORTB.3
start:
If bot1 = 0 Then
pulsout servo1, 180
pause 100
Endif
If bot2 = 0 Then
pulsout servo1, 170
pause 200
Endif
If bot3 = 0 Then
pulsout servo1, 160
pause 300
Endif
If bot1 = 0 Then
pulsout servo1, 130
pause 400
Endif
Goto start
End
-
uso microcode y no me marca ningun error
y grabo el pic con "pickit2" y parece estar todo bien
cuando lo monto en el proto no pasa mada ,de todos modos voy a probar la modificacion y te cuento gracias!!
-
Ok, este otro código puede que te ayude a comprender mejor el control del servo:
TRISB = %00001111
WaitMs 500
Symbol servo1 = PORTB.7
Symbol bot1 = PORTB.0
Symbol bot2 = PORTB.1
Symbol bot3 = PORTB.2
Symbol bot4 = PORTB.3
Dim ns As Byte 'Nueva posición del servo
Dim ps As Byte 'Posición del servo
Dim vs As Byte 'Velocidad del servo
ns = 90 'Posición de inicio
ps = 90 'Posicion de inicio
vs = 1 'Velocidad de inicio
start:
If bot1 = 0 Then
ns = 180
vs = 1
Endif
If bot2 = 0 Then
ns = 170
vs = 20
Endif
If bot3 = 0 Then
ns = 160
vs = 50
Endif
If bot1 = 0 Then
ns = 130
vs = 100
Endif
If ps < ns And ps < 255 Then ps = ps + 1 'Servo hacia un lado
If ps > ns And ps > 1 Then ps = ps - 1 'Servo hacia el otro lado
WaitMs vs 'Establece la velocidad del servo.
ServoOut servo1, ps 'Posiciona el servo
Goto start
End
-
muchas gracias por darme una mano probe del primer modo que me dijiste y nada...
probe escribirlo de otra manera y anduvo!!
tengo un servo "towardpro mg996r" y no tengo ni idea de los pulso que necesita
aca te muestro del modo en que anda las dos primeras velocidades ( las mas rapidas) son pracicamente iguales aunque quisiera que vaya mas rapido parece que no le da.
muchas gracias por darme una mano!!
@ DEVICE INTRC_OSC_NOCLKOUT,PROTECT_OFF,WDT_OFF,PWRT_ON,MCLR_ON,BOD_OFF,LVP_OFF,CPD_OFF
servo1 var portb.7
trisb = %00001111
pause 500
bot1 var portb.0
bot2 var portb.1
bot3 var portb.2
bot4 var portb.3
start:
if bot1 = 0 then velo1
if bot2 = 0 then velo2
if bot3 = 0 then velo3
if bot4 = 0 then velo4
goto start
velo1:
PulsOut servo1, 180 ' 250 ' 200 pruebas que hice y no cambio la velocidad
goto start
velo2:
PulsOut servo1, 162
pause 10 'variar la pausa no ayudo mucho
goto start
velo3:
PulsOut servo1, 142
pause 10
goto start
velo4:
PulsOut servo1, 132
pause 10
goto start
end
ahora que anda voy a ver si lo paso al 12f675 ya que me sobran pines por todos lados jajajajajaj
-
Es normal, porque así no se puede controlar la velocidad del servo. La forma del segundo ejemplo no es la mejor pero es mucho más eficaz.
-
hola dogflu66 cuando decis que no es la mejor pero la mas eficaz porque lo decis? cual es la mas eficaz?
el servo que tengo esta trucado (reemplace el pot por 2 resistencias)
ahora lo estoy tratando de poner en un 12f675 sumando un pulsador y ando con problemas creo que es la configuracion de bits (yo solo jugue con el 16f627/28 hasta ahora) me podrias decir si voy bien ?
symbol servo1 = GPIO.0
symbol bot1 = gpio.1
symbol bot2 = gpio.2
symbol bot3 = gpio.4
symbol bot4 = gpio.5
TRISIO = %111110 '
CMCON = 7 'comparator of
ansel = 0
start:
if ( bot1 = 0 ) and ( bot2 = 0 )then velo2
if ( bot1 = 0 ) and ( bot3 = 0 )then velo3
if ( bot1 = 0 ) and ( bot4 = 0 )then velo4
goto start
velo2:
PulsOut servo1, 162
pause 10 'variar la pausa no ayudo mucho
goto start
velo3:
PulsOut servo1, 142
pause 10
goto start
velo4:
PulsOut servo1, 132
pause 10
goto start
end
muchas gracias
-
No he trabajado con servos trucados, así que olvídate de todo lo que te he dicho.
-
es lo mismo segun tengo entendido uso dos resistencias y simulando que el potenciometro esta siempre en el medio de esa forma gira 360·
lo que me dijiste fue muy util para mi gracias.
la manera de configurar los bits de 12f675 es la correcta?