# Control de 3 Servomotores usando pic 16f84A



## Yeremi (Jun 25, 2012)

*Hola amigos!*
Estoy preparando un mini proyecto en MPLAB y lo simulo en proteus para el pic16f84A.
La duda esta en el ASM que estoy armando ya que de principio estaba para el PIC16F628 pero funciona perfectamente en el 16f84a. Son 3 servos, cada uno controlado por 3 interruptores;primero uno que lo deja en posición inicial, el otro que lo hace girar a la derecha y el otro a la izquierda(los servos que estoy utilizando en la realidad los tengo modificados para 360°), en total 6 interruptores, de los cuales del RA1, RA2 y RA3(Servo1 RA0), RB1, RB2, RB3(Servo2 RB0), RB5, RB6, RB7(Servo3 RB4). La idea es que puedan ser controlados libremente cada uno para lo que sea y solo puedo controlar uno, necesito enlazar el otro servo y no pude:/
De todos modos dejo los docs en asm, hex y cto. de proteus ya que necesito una mano(el cto solo tiene 2 servos pero agregando el segundo, ya el tercero sera facil) 
Sin mas que agregar me despido!


----------



## 300 KVA (Jun 26, 2012)

veo que no usas la interrupción, inicias tu programa en 0x000, normalmente conviene iniciar en 0x070 para brincarse la dirección de interrupciónes 0x040,
lo que yo haria es algo asi:
org 0x040
goto interrupcion
org 0x070
inicio:
trises, etc
ciclo:
btfsc switch 1
goto unoinicio
lee switch 2
goto unoizq
lee switch 3
goto unoder
unoinicio:
movlw (valor de centro)
movwf motor1
goto servo2
unoizq:
movlw (valor izquierda)
movwf motor1
goto servo2
unoder:
movlw (valor derecha)
movwf motor1
servo2:
btfsc switch 4
goto dosini
btfsc switch 5
goto dosizq
btfsc switch 6
goto dosder
dosini:
movlw (valor centro)
movwf motor2
goto servo3
dosizq:
movlw (valor izq)
movwf motor2
goto servo3
dosder:
movlw (valor der)
movwf motor2
servo3:
(lo mismo que antes)
goto ciclo

y en la interrupcion
interrupcion:
decfsz tiempo
goto servos
goto reset
check1:
decfsz conta1
goto check2
bcf (servo1)
check2:
decfsz conta2
goto check3
bcf (servo2)
check3:
decfsz conta3
goto salida
bcf (servo3)
salida:
bcf interrupcion
return
reset:
movf servo1,0
movwf conta1
bsf (servo1)
movf servo2,0
movwf conta2
bsf (servo2)
movf servo3,0
movwf conta3
bsf (servo3)
goto check1
end

los letreros en parentesis son o numeros que hay que recalcular o los puertos de salida de los servos.


----------



## Yeremi (Jun 27, 2012)

gracias 300 KVA lo probare ya que encontre el problema, y esta solucionado. Solo use preguntas btfsc y btfss y listo pero tu acotaciòn parece mas practica 
saludos!


----------

