You are on page 1of 7

SEGUIDOR DE LINEAS PIC 16F877A

Un robot seguidor de lineas esta conformado por tres partes fundamentales: 1 Los ojos: observar la linea, que se hara obteniendo el contraste negro que produce la linea con respecto al entorno blanco, utilizando una serie de sensores infrarrojos. 2 El cerebro, este va a decidir que camino tomar segn los datos que le suministren los ojos, en este apartado se utiliza un pic para decidir el rumbo: derecha, izquierda, adelante, atrs y las estrategias de correccin para no perder la linea. 3 Los pies: la traccin el movimiento: dos ruedas dan el movimiento que dependiendo de las decisiones que tome el cerebro giraran a la misma velocidad, o creara una diferencia entre ambas para dar un giro en un sentido u otro. El software necesario para la programacin del cerebro y la simulacin electrnica es PIC-C para la programacin e ISIS PROFESSIONAL para la simulacin electrnica. Ahora hablemos del apartado que corresponde a la programacin que es el mas importante en este robot: el cerebro, PIC 16F877A.

Control de puertos: El pic posee 5 puertos de entrada salida I/O son A,B,C,D,E. cada puerto tiene 8 pines que se numeran de 0 a 7. Su configuracin para decidir qu pines sern salidas o entradas se hace mediante la funcion SET_TRIS_X(HEX) donde X sera el puerto que se quiere configurar y HEX un numero hexadecimal de la forma 0xYZ , Y: numero hexadecimal de rango 0 a F, controla los pines 7,6,5,4. Z: numero hexadecimal de rango 0 a F, controla los pines 3,2,1,0. Binario 0: Salida. Binario 1: Entrada.

PINES decimal

7 6 5 4

HEX

8 4 2 1 (0 a F) 0x0Z 0xFZ 0x5Z

BINARIO 0 0 0 0 BINARIO 1 1 1 1 BINARIO 0 1 0 1

PINES decimal

3 2 1 0

HEX

8 4 2 1 (0 a F) 0xY0 0xYF 0xYA

BINARIO 0 0 0 0 BINARIO 1 1 1 1 BINARIO 1 0 1 0

Ejemplos: SET_TRIS_B(0x50); pines entrada (6,4), pines salida (7,5,3,2,1,0). SET_TRIS_B(0x77); pines entrada (6,5,4,2,1,0), pines salida (7,3).

La otra forma de controlar los puertos es utilizando la correspondencia binaria en el parmetro de entrada en la funcin SET_TRIS_X(Binary) en el binary el orden de los pines es de forma descendente de izquierda a derecha del pin 7 al pin 0.

Ejemplo: set_tris_a(0b00011111); entrada(4,3,2,1,0).

//pines

de

salida

(7,6,5),

pines

de

Control de PIN: Entrada: para obtener el estado lgico (0-1) de un pin de entrada por cada ciclo de programa se utiliza la funcin INPUT(PIN_XN), X:para el puerto, N: para el pin (0-7). Ejemplo: while ( !input(PIN_B1) ); Salida: para llevar el estado lgico (0-1) a un pin de salida existen varias funciones que se pueden utilizar: 1. OUTPUT_BIT(PIN_XN,ESTADO): X:puerto, N:pin, ESTADO: el estado lgico (0-1) que se desea sacar por el pin de salida. 2. OUTPUT_HIGH(PIN_XN): X:puerto, N:pin, esta funcion lleva la salida del pin automaticamente a 1 logico. 3. OUTPUT_LOW(PIN_XN): X:puerto, N:pin, esta funcion lleva la salida del pin automaticamente a 0 logico.

Control de PWM: En este pic los pines de salida del PWM estn en el puerto c especficamente en los pines PIN_C2 que corresponde al PWM1 y el PIN_C1 que corresponde al PWM2. Para obtener una seal particular en cualquiera de los PWM se debe calcular el periodo del pic, el periodo del PWM con la frecuencia deseada, y asi calcular el PR2 necesario para configurar la seal de salida del PWM. El PWM est asociado al TIMER2. Ejemplo: si se quiere como salida una frecuencia de 20khz con un ciclo de servicio o trabajo del 50% entonces se hacen los clculos siguientes: Periodo del PWM = 1/20khz = 50us Periodo del pic = 1/20Mhz = 50ns PR2 = (periodo PWM/(4*periodo PIC*Prescaler))-1 PR2 = (50us/(4*50ns*1))-1=249

Teniendo esta informacin podemos configurar el PWM por cdigo.

setup_ccp1(ccp_PWM); //activa el pin_c2 como salida PWM, antes activar el pin como salida. setup_timer_2(prescaler,PR2,postscaler); setup_timer_2(t2_div_By_1,249,1); // Ahora debemos calcular el tamao del DUTY (ciclo de servicio) que aumentara o disminuira el tiempo de seal alta por cada ciclo, como se muestra en la figura: DUTY= t alta, Un led con poca iluminacin.

Un led con mucha iluminacin

DUTY = Periodo PWM * ciclo de servicio(porcentaje) / periodo PIC * Prescaler DUTY = 50us*0.5/(50ns*1) = 500 (al 50%) set_pwm_duty(500);

Habiendo conocido la teora necesaria para comprender las partes necesarias para la programacin ahora veremos el cdigo en pic-c.

Simulacion en isis

Cargando el codigo en isis, usando el .hex generado por picc abriendo las propiedades del pic.

You might also like