You are on page 1of 3

;********************************************************************** ; MANEJO DE SERVOS - Programa Bsico 1 ; Por Eduardo J.

Carletti, Robots Argentina, 2007 ;********************************************************************** list #include p=16F628A ; definir procesador

; definiciones de variables especficas del procesador ; para evitar los mensajes de cambio de ; banco en el resultado del compilador

ERRORLEVEL 1;-302 __CONFIG UT & _MCLRE_OFF

_CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKO

;***** DEFINICIN DEL NOMBRE DE ENTRADAS Y SALIDAS #define #define #define #define SERVO1 PULSADOR1 PULSADOR2 PULSADOR3 PORTA,0 PORTA,1 PORTA,2 PORTA,3 ; ; ; ; puerto puerto puerto puerto de de de de salida de servo 1 entrada de pulsador 1 entrada de pulsador 2 entrada de pulsador 3

;***** VARIABLES CBLOCK 0x20 acum_A Posic ENDC ; variable momentnea ; posicin servo

;******************************************************************************* **** org goto 0x000 principal

;******************************************************************************* **** ; Principal ;******************************************************************************* **** principal movlw b'00000111' movwf CMCON clrf PORTA clrf PORTB bsf STATUS,RP0 movlw b'00001110' movwf TRISA MOVLW b'00000000' movwf TRISB movlw movwf es ; de 1 MHz si el oscilador es de 4 MHz). b'00000010' OPTION_REG ; deshabilita comparadores. Esto es ; algo importante en el PIC 16F628A ; inicia ports ; inicia ports ; Apunta a banco 1 ; PORTA ; salidas menos 1, 2 y 3, entradas ; PORTB ; salidas ; Configuracin para TMR0 ; preescaler 2, 1:8 con CLK interno (que

; El contador cuenta cada 8 useg bcf STATUS,RP0 clrf TMR0 movlw d'133' o) movwf Posic ;******************************************************************************* **** ; Lazo principal ;******************************************************************************* **** lazo ; ; ; ; ; Los servos actan con un pulso de control que va entre 0,5 ms y 2,5 ms. En el bloque que sigue se inicia en 1 el pulso de control y se espera un retardo fijo de aproximadamente 0,5 ms, que es el valor mnimo del pulso. Con este valor de longitud de pulso y una longitud cero en la parte variable, el servo est parado al mximo hacia la izquierda (sentido antihorario). bsf bcf movlw movwf btfss goto bcf ; ; ; ; SERVO1 INTCON,T0IF d'192' TMR0 INTCON,T0IF $-1 INTCON,T0IF ; ; ; ; ; pone la seal de servo en 1 borra el flag de timer (256-192 = 64) 64 * 8 us = 0,512 ms valor al registro de timer espera por timer = ff -> 00 ; Apunta a banco 0 ; inicia registro de timer en 0 ; inicia valor de posicin de servo (centr

; borra el flag de timer

A continuacin, comienza el tiempo variable del pulso. Esto permite que el recorrido completo, de 180 grados (valores de pulso entre 0,5 ms y 2,5 ms), se divida en 256 segmentos (256 * 8 us = 2,048 ms). La parte variable del pulso de control vara entre 0 y 2 ms movf movwf btfss goto bcf bcf Posic,w TMR0 INTCON,T0IF $-1 SERVO1 INTCON,T0IF ; 256-nn x 8 uS = 1 ms, 1,5 ms, 2,5 ms ; valor al registro de timer ; espera por timer = ff -> 00 ; pone la seal de servo en 0 ; borra el flag de timer

; Retardo de 20 ms, que es el tiempo estndar que debe separar los pulsos ; de control para los servos comunes de RC movlw 2 ms retardo movwf bcf movlw movwf btfss goto decfsz goto btfss acum_A INTCON,T0IF d'6' TMR0 INTCON,T0IF $-1 acum_A retardo PULSADOR1 ; ; ; ; borra el flag de timer (256-6 = 250) 250 * 8 us = 2 ms valor al registro de timer espera por timer = ff -> 00 d'9' ; cantidad de veces: 9 x 2 ms = 18 ms +

; decrementa cantidad de veces ; lee rdenes a travs de pulsadores

pulsadores

goto iniciaPos btfss PULSADOR2 goto incPos btfss PULSADOR3 goto decPos goto lazo iniciaPos 12 us movlw d'133' movwf Posic goto lazo decPos sale1 incPos movf Posic,f bz sale1 decf Posic,f goto lazo movlw 0xFF xorwf Posic,w bz sale2 incf Posic,f goto lazo END

; servo en posicin central ; incrementa Posic ; decrementa Posic

; 256-133 = 123, 123 * 8 us = 984 us + 5 ; posicin central en esta disposicin ; y sale ; ; ; ; ; ; ; ; ; se fija si Posic ya es cero si es cero no decrementa si no es cero, decrementa y sale se fija si Posic no es 0xFF que es el valor mximo si es el valor mximo, no incrementa si no es el valor mx, incrementa y sale

sale2

You might also like