Beruflich Dokumente
Kultur Dokumente
Motivacion:
OBJETIVO
El objetivo del proyecto es lograr el control de varios servos y sus respectivos angulos
Materiales de proyecto
*microcontrolador pic16f84.
POR QUE?
*conector usb-serial
Que nos dara la posibilidad de manejar el mecanismo desde otros dispositivos
IDEA PRINCIPAL
La idea principal es que el pic funcione nicamente como controlador de servos, recibiendo el
mismo datos(angulos) de manera externa desde otros sistemas que calculen la cinematica
necesaria en el sistema controlado.
DIAGRAMA ILUSTRATIVO
PIC16F84
PROCESADOR EXTERNO
SERIAL CONTROLADOR
VARIOS SERVOS
ALGORITMO
Donde el timer0 funcionara generando una onda para cada canal mediante la variable
asignada para cada uno.
Se realizara mediante el protocolo serial el cual nos da la posibilidad de introducir datos desde
la computadora, celulares, etc.
APLICACIONES
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
GuardaDato
Unidades
Decenas
Centenas
SumaUDC
servo1_general
servo2_general
servo3_general
servo4_general
servo5_general
servo6_general
servo7_general
servo8_general
general
control
temporal
ENDC
ORG 0
Inicio
clrw
bcf Salida1
bcf Salida2
bcf Salida3
bcf Salida4
bcf Salida5
bcf Salida6
bcf Salida7
bsf Entrada
bsf Entrada2
movlw d'256'
movwf temporal
movlw b'00000011'
Principal
call Timer0_HIGH
call Timer0_LOW
call Timer1_HIGH
call Timer1_LOW
call Timer2_HIGH
call Timer2_LOW
call Timer3_HIGH
call Timer3_LOW
call Timer4_HIGH
call Timer4_LOW
bsf Salida5 ; La salida pasa a nivel alto
call Timer5_HIGH
call Timer5_LOW
call Timer6_HIGH
call Timer6_LOW
call Timer7_HIGH
call Timer7_LOW
btfsc Entrada
goto SeteaServos2
btfsc Entrada1
goto Demo
;btfsc Entrada2
;goto Demo2
goto Principal
Demo
movlw d'200'
movwf servo1_general
movlw d'005'
movwf servo2_general
movlw d'240'
movwf servo3_general
movlw d'008'
movwf servo4_general
goto Principal
Demo2
movlw d'012'
movwf servo1_general
movlw d'215'
movwf servo2_general
movlw d'005'
movwf servo3_general
movlw d'214'
movwf servo4_general
return
Timer0_HIGH
movf servo1_general,W
movwf TMR0
bcf INTCON,T0IF ; Resetea el flag de desbordamiento del TMR0.
Timer0_tempp0
return
Timer0_LOW
movf servo1_general,W
movwf TMR0
bcf INTCON,T0IF
Timer0_temp20
return
Timer1_HIGH
movf servo2_general,W
sublw d'256'
movwf TMR0
Temp1H
return
Timer1_LOW
movf servo2_general,W
movwf TMR0
bcf INTCON,T0IF
Temp1L
return
Timer2_HIGH
movf servo3_general,W
sublw d'256'
movwf TMR0
Temp2H
return
Timer2_LOW
movf servo3_general,W
movwf TMR0
bcf INTCON,T0IF
Temp2L
return
Timer3_HIGH
movf servo4_general,W
sublw d'256'
movwf TMR0
Temp3H
return
Timer3_LOW
movf servo4_general,W
movwf TMR0
bcf INTCON,T0IF
Temp3L
return
Timer4_HIGH
movf servo5_general,W
sublw d'256'
movwf TMR0
Temp4H
return
Timer4_LOW
movf servo4_general,W
movwf TMR0
bcf INTCON,T0IF
Temp4L
return
Timer5_HIGH
movf servo6_general,W
sublw d'256'
movwf TMR0
Temp5H
return
Timer5_LOW
movf servo6_general,W
movwf TMR0
bcf INTCON,T0IF
Temp5L
return
Timer6_HIGH
movf servo7_general,W
sublw d'256'
movwf TMR0
Temp6H
return
Timer6_LOW
movf servo7_general,W
movwf TMR0
bcf INTCON,T0IF
Temp6L
return
Timer7_HIGH
movf servo8_general,W
sublw d'256'
movwf TMR0
Temp7H
return
Timer7_LOW
movf servo8_general,W
movwf TMR0
bcf INTCON,T0IF
Temp7L
return
Timer0_2000us
movwf TMR0
return
; Comprobando con la ventana Stopwatch del simulador se obtienen unos tiempos para la onda
movlw d'0'
movlw d'1'
movlw d'2'
movlw d'3'
movlw d'4'
movlw d'5'
movlw d'6'
xorlw Tecla7 ; Es la tecla del movimiento hacia adelante?
movlw d'7'
movlw d'8'
movlw d'9'
return
SeteaServos2
btfss Entrada
goto Principal
call CargaSumaUDCA
goto SeteaServos2
CargaSumaUDCA
call PideCifras
call SumaUDC_UPDATE
movwf servo1_general
goto Principal
CargaSumaUDCB
call PideCifras
call SumaUDC_UPDATE
movwf servo2_general
goto Principal
CargaSumaUDCC
call PideCifras
call SumaUDC_UPDATE
movwf servo3_general
goto Principal
CargaSumaUDCD
call PideCifras
call SumaUDC_UPDATE
movwf servo4_general
goto Principal
CargaSumaUDCE
call PideCifras
call SumaUDC_UPDATE
movwf servo5_general
goto Principal
CargaSumaUDCF
call PideCifras
call SumaUDC_UPDATE
movwf servo6_general
goto Principal
CargaSumaUDCG
call PideCifras
call SumaUDC_UPDATE
movwf servo7_general
goto Principal
CargaSumaUDCH
call PideCifras
call SumaUDC_UPDATE
movwf servo8_general
goto Principal
PideCifras
clrw
call RS232_LeeDato
call ascii
movwf Centenas
call RS232_LeeDato
call ascii
movwf Decenas
call RS232_LeeDato
call ascii
movwf Unidades
clrw
return
Rx ; serie RS232.
return
SumaUDC_UPDATE
clrw
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Centenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Decenas,0
addwf Unidades,0
return
INCLUDE "RS232"
INCLUDE "RETARDOS"
END