Buscar este blog

viernes, 13 de mayo de 2016

Lectura de un encoder rotativo acoplado a servo HS322

El tamaño de paso para este encoder en especifico es de 22.5 grados.

#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER
// DEFINICION DE LAS CONEXIONES DE LA LCD AL PIC
#DEFINE LCD_DB4   PIN_B4
#DEFINE LCD_DB5   PIN_B5
#DEFINE LCD_DB6   PIN_B6
#DEFINE LCD_DB7   PIN_B7
#DEFINE LCD_RS    PIN_B2
#DEFINE LCD_E     PIN_B3
#INCLUDE <lcd1.c>


INT D; // CONTADOR DE REPETICIONES
INT I; // CONTADOR DE LOS PULSOS
INT ENC;

VOID MAIN(){

LCD_INIT();

while(1){

FOR(D=1;D<6;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\f");
FOR(I=0;I<20;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2400); // COLOCA EL SERVO EN 0°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(200000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
ENC=INPUT_A(); // VALOR DE ENCODER IGUAL AL PUERTO A
// COMPARA EL VALOR DE ENC PARA DETERMINAR EL ANGULO
IF(ENC==0X00){ // COMPARA CON CERO
LCD_PUTC("\fENC:0");
} // IF
ELSE IF(ENC==0X01){ // COMPARA CON UNO
LCD_PUTC("\fED:22.5");
} // ELSE IF
ELSE IF(ENC==0X02){ // COMPARA CON DOS
LCD_PUTC("\fED:45");
} // ELSE IF
ELSE IF(ENC==0X03){ // COMPARA CON TRES
LCD_PUTC("\fED:67.5");
} // ELSE IF
ELSE IF(ENC==0X04){ // COMPARA CON CUATRO
LCD_PUTC("\fED:90");
} // ELSE IF
ELSE IF(ENC==0X05){ // COMPARA CON CINCO
LCD_PUTC("\fED:112.5");
} // ELSE IF
ELSE IF(ENC==0X06){ // COMPARA CON SEIS
LCD_PUTC("\fED:135");
} // ELSE IF
ELSE IF(ENC==0X07){ // COMPARA CON SIETE
LCD_PUTC("\fED:157.5");
} // ELSE IF
ELSE IF(ENC==0X08){ // COMPARA CON OCHO
LCD_PUTC("\fED:180");
} // ELSE IF
ELSE IF(ENC==0X09){ // COMPARA CON NUEVE
LCD_PUTC("\fED:202.5");
} // ELSE IF
ELSE IF(ENC==0X10){ // COMPARA CON DIES
LCD_PUTC("\fED:225");
} // ELSE IF
} // FOR
FOR(I=0;I<20;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(600); // COLOCA EL SERVO EN 180°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(200000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
ENC=INPUT_A(); // VALOR DE ENCODER IGUAL AL PUERTO A
// COMPARA EL VALOR DE ENC PARA DETERMINAR EL ANGULO
IF(ENC==0X00){ // COMPARA CON CERO
LCD_PUTC("\fENC:0");
} // IF
ELSE IF(ENC==0X01){ // COMPARA CON UNO
LCD_PUTC("\fED:22.5");
} // ELSE IF
ELSE IF(ENC==0X02){ // COMPARA CON DOS
LCD_PUTC("\fED:45");
} // ELSE IF
ELSE IF(ENC==0X03){ // COMPARA CON TRES
LCD_PUTC("\fED:67.5");
} // ELSE IF
ELSE IF(ENC==0X04){ // COMPARA CON CUATRO
LCD_PUTC("\fED:90");
} // ELSE IF
ELSE IF(ENC==0X05){ // COMPARA CON CINCO
LCD_PUTC("\fED:112.5");
} // ELSE IF
ELSE IF(ENC==0X06){ // COMPARA CON SEIS
LCD_PUTC("\fED:135");
} // ELSE IF
ELSE IF(ENC==0X07){ // COMPARA CON SIETE
LCD_PUTC("\fED:157.5");
} // ELSE IF
ELSE IF(ENC==0X08){ // COMPARA CON OCHO
LCD_PUTC("\fED:180");
} // ELSE IF
ELSE IF(ENC==0X09){ // COMPARA CON NUEVE
LCD_PUTC("\fED:202.5");
} // ELSE IF
ELSE IF(ENC==0X10){ // COMPARA CON DIES
LCD_PUTC("\fED:225");
} // ELSE IF
} // FOR
} // FOR

} // WHILE
} //MAIN

No hay comentarios:

Publicar un comentario