31/08/2012 TALLER DE CONSTRUCCION DE UN MICROBOT RASTREADOR PROGRAMACION TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR ESTRUCTURA GENERAL DE UN PROGRAMA #include<16F84A> #use delay(clock=4000000) main() { } TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 1 31/08/2012 OPERACIONES CON LOS PUERTOS 1) Especificar qué líneas son de entrada, y cuáles de salida 1 -> Input -> Entrada 0 -> Output -> Salida set_tris_a(); ej-> set_tris_a(0b00110001); set_tris_a(0x34); set_tris_b(); ej-> set_tris_b(0b00110001); set_tris_b(0x34); 2) Líneas de salida (escritura -> output) output_low(); ej-> output_low(PIN_A2); output_high(); ej-> output_high(PIN_A0); output_bit(); ej-> output_bit(PIN_A1,0); output_bit(PIN_A1,1); output_X(); ej_> output_a(0x03); output_a(0xFF); 3) Líneas de entrada (lectura -> input) input(); ej-> input(PIN_B2); input_X(); ej_> puerto_b=input_b(); TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR OPERACIONES CON TIEMPOS 1) Retardo de microsegundos delay_us(); ej-> delay_us(50); 2) Retardo de milisegundos delay_ms(); ej-> delay_ms(50); delay_ms(1000); TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 2 31/08/2012 EJEMPLO 1 #include<16F84A> #use delay(clock=4000000) main() { set_tris_a(0x00); set_tris_b(0x01); //Importante con las entradas!!!! while(TRUE){ if(input(PIN_B0)) output_bit(PIN_A0,0); else output_bit(PIN_A0,1); } } if(!input(PIN_B0)) if(input(PIN_B0)==0) TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR EJEMPLO 1 ...Y EL ENSAMBLADOR set_tris_a(0x00); set_tris_b(0x01); BCF CLRF BSF MOVLW MOVWF BCF CLRF BSF MOVLW MOVWF STATUS,RP0 PORTA STATUS,RP0 0x00 TRISA STATUS,RP0 PORTB STATUS,RP0 0x01 TRISB while(TRUE){ | | } if(input(PIN_B0)) output_bit(PIN_A0,0); else output_bit(PIN_A0,1); BUCLE: | | GOTO BUCLE BTFSC BCF BSF PORTB,0 PORTA,0 PORTA,1 ;Ojo banco TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 3 31/08/2012 VARIABLES Globales o locales, estáticas... Los mismos tipos que en C int -> 8bit int16 -> 16bit int32 -> 32bit int1 <-> char -> 1bit Manejo de bits/bytes make8(); x=(y,1); x=(y,0); offset:0,1,2,3 make16(); x=(y,z) y=int8, z=int8 make32(); x=(var1, var2, var3, var4); vari=int8 TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR PROGRAMACION DE LAS VELOCIDADES I main(){ /* * CONFIGURACIONES */ int activo=40; while(TRUE) { output_bit(PIN_A1,1); delay_ms(activo); output_bit(PIN_A1,0); delay_ms(100-activo); } //Motores al 40% //Periodo de la señal: 100ms } TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 4 31/08/2012 TEMPORIZADOR TMR0 Se programa para que salte la interrupción cada vez que se desborde 1) Calcular cada cuánto tiempo salta la interrupción Para esta aplicación, nos da un poco igual 2) Configurar el temporizador setup_timer_0(RTCC_DIV_1|RTCC_INTERNAL); set_timer0(0xFF); 3) Crear la rutina de interrupción siguiente transparencia TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR INTERRUPCIONES ¿Dónde colocar la subrutina? #include<16F84A> #use delay(clock=4000000) -> AQUÍ #int_TIMER0 subrutina_TIMER0(){ } main(){ } Configurar las interrupciones: enable_interrupts(INT_RTCC); enable_interrupts(GLOBAL); TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 5 31/08/2012 EJEMPLO II: INTERRUPCIONES #include<16F84A> #use delay(clock=4000000) int flag=0; //Variable global #int_TIMER0 subrutina_TIMER0(){ if(flag==1) if(flag==0) flag=1-flag; } main(){ output_bit(PINB0,1); output_bit(PINB0,0); set_tris_b(0x00); //Configurar B=salidas enable_interrupts(INT_RTCC); //Configurar interrupciones enable_interrupts(GLOBAL); setup_timer_0(RTCC_DIV_1|RTCC_INTERNAL); //Conf. TMR0 set_timer0(0xFF); //Establecer frecuencia de parpadeo while(TRUE); //Bucle infinito } TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR PROGRAMACION DE LAS II INCF VELOCIDADES CONTADOR MOVLW SUBWF Programación por interrupciones BTFSC GOTO NUM_VELOCIDADES CONTADOR STATUS,2 ;flag Z INICIO int cont=0, velocidad1=0, velocidad2=0; MOVLW VELOCIDAD_1 #int_TIMER0 subrutina_TIMER0(){ SUBWF BTFSC BCF CONTADOR STATUS,2 ;flag Z PORTB,0 ;O el que sea MOVLW VELOCIDAD_2 cont++; SUBWF CONTADOR if(cont=NUM_VELOCIDADES){ BTFSC STATUS,2 ;flag Z output_bit(MOTOR_1,1); BCF PORTB,1 ;O el que sea output_bit(MOTOR_2,1); cont=0; GOTO SALIR } if(cont==velocidad1) INICIO: output_bit(MOTOR_1,0); PORTB,0 if(cont==velocidad2) BSF output_bit(MOTOR_1,0); } BSF CLRF PORTB,1 CONTADOR SALIR: RETFIE TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 6 31/08/2012 EL PREPROCESADOR Aquellas instrucciones que empiezan con un # Básicamente: - #include - #define - #use Particularmente interesantes los #define TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR UNA DE CHAPA: EL REGLAMENTO • Artículo 1: Reserva de modificación de las normas y decisiones de los árbitros • Artículo 2: Objetivo de la modalidad “rastreadores” Esta prueba valorará la habilidad de un robot para recorrer un camino sinuoso previamente establecido, en el menor tiempo posible. [...] • Artículo 3: Tipo de robots móviles que pueden competir Los robots han de poseer unas dimensiones máximas de 20x30cm (ancho x largo), siendo libres la altura y el peso.En cualquier caso, deben ser completamente autónomos [...] TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 7 31/08/2012 SIGUE LA CHAPA: EL REGLAMENTO • Artículo 4: Desarrollo de las pruebas La pista consistirá en una superficie clara con una línea oscura [...] de 2±0,5cm de grosor. [...] El camino puede presentar tantas bifurcaciones y curvas como la organización considere oportuno. Los puntos de salida y meta serán únicos. En cualquier caso, entre 10 y 15cm de que aparezca una bifurcación, una línea oscura de 2±0,5cm de grosor y 5±1cm de longitud separada entre 1 y 2 cm de la trayectoria y en el sentido de recorrido de la misma, indicará por cuál de los dos caminos de la bifurcación el robot deberá seguir obligatoriamente [...]. El robot siempre debe seguir el camino a lo largo de la línea que define su trazado sin posibilidad de poder evitar o saltar un parte del mismo. En todo momento parte del robot deberá estar sobre el camino; en caso contrario será descalificado. Si un robot permanece más de 10seg parado, quedará eliminado. TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR SIGUE LA CHAPA: EL REGLAMENTO • Artículo 4 (continuación) Penalizaciones: - Cada vez que se tome un bifurcación por el lado no indicado, se penalizará con 4 puntos - Por cada 10seg o fracción de retraso en alcanzar la llegada respecto del tiempo de X minutos marcado por la organización para completar el recorrido, se penalizará 1 punto. TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 8 31/08/2012 EJEMPLO DE PISTA TALLER DE CONSTRUCCIÓN DE UN MICROBOT RASTREADOR 9