Buscar este blog

viernes, 13 de mayo de 2016

Secuencia de Movimiento para un servo HS322 con visualización en LCD y pulsación de un laser

#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 N; // CONTADOR DEL CICLO DE 3
INT D; // CONTADOR DE REPETICIONES
INT L; // CONTADOR DEL LASER
INT I; // CONTADOR DE LOS PULSOS
INT ENC; // ENTRADA DEL ENCODER

VOID MAIN(){
LCD_INIT();

FOR(I=0;I<30;I++){
OUTPUT_C(0X00); // APAGA EL LASER
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN NEUTRO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_PUTC("\fSERVO NEUTRO");
} // FOR

WHILE(1){

FOR(N=1;N<4;N++){
OUTPUT_E(0X00); // APAGA EL LASER
LCD_PUTC("\fCICLO: "); // NUMERO DEL CICLO DE 3
PRINTF(LCD_PUTC,"%u",N);
DELAY_MS(1000);

FOR(I=0;I<30;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(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
LCD_PUTC("\fSECUENCIA P1"); // INICIA LA SECUENCIA DE LA PRACTICA 1
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SERVO: 0");
LCD_PUTC(", ENC: 0");
} // FOR

FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1050); // COLOCA EL SERVO EN 135°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:135, ");
LCD_PUTC("ED:157.5");
} // FOR
FOR(D=1;D<6;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR


FOR(D=1;D<6;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\fREPETICIONES: ");
PRINTF(LCD_PUTC,"%u",D);
FOR(I=0;I<30;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(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:0, ");
LCD_PUTC("ED:0");
} // FOR
FOR(I=0;I<30;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(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:180, ");
LCD_PUTC("ED:202.5");
} // FOR

} // FOR

FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN 90°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:90, ");
LCD_PUTC("ED:67.5");
} // FOR
FOR(D=1;D<11;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR

FOR(D=1;D<4;D++){
LCD_GOTOXY(1,1);
LCD_PUTC("\fREPETICIONES: ");
PRINTF(LCD_PUTC,"%u",D);
FOR(I=0;I<30;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(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:180, ");
LCD_PUTC("ED:202.5");
} // FOR
FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1500); // COLOCA EL SERVO EN 90°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,2);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("SV:90, ");
LCD_PUTC("ED:67.5");
} // FOR
} // FOR

FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2250); // COLOCA EL SERVO EN 15°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:15, ");
LCD_PUTC("ED:0");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR

FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(2100); // COLOCA EL SERVO EN 30°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:30, ");
LCD_PUTC("ED:0");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR

FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1950); // COLOCA EL SERVO EN 45°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:45, ");
LCD_PUTC("ED:22.5");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR

FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1800); // COLOCA EL SERVO EN 60°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:60, ");
LCD_PUTC("ED:45");
} // FOR
FOR(D=1;D<4;D++){
LCD_GOTOXY(1,2);
LCD_PUTC("ESPERA: ");
PRINTF(LCD_PUTC,"%u",D);
LCD_PUTC("s");
DELAY_MS(1000);
} // CONTADOR
} // FOR DE CILO DE 3

FOR(I=0;I<30;I++){
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
DELAY_US(1050); // COLOCA EL SERVO EN 135°
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
DELAY_US(20000); // DELAY DE APAGADO
LCD_GOTOXY(1,1);
// DESPLIEGA EL ANGULO DEL SERVO Y DEL ENCODER EN LA LCD
LCD_PUTC("\fSV:135, ");
LCD_PUTC("ED:157.5");
} // FOR
FOR(L=0;L<5;L++){
OUTPUT_E(0X01); // ENCIENDE EL LASER
LCD_GOTOXY(1,2);
LCD_PUTC("LASER PULSANDO"); // ESPLIEGA MENSAJE DE SALER PULANDO
DELAY_MS(500);
OUTPUT_E(0X00); // APAGA EL LASER
DELAY_MS(500);
} // FOR LASER

} // WHILE
} //MAIN

No hay comentarios:

Publicar un comentario