PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION Entrega Nº 2 Arquitectura de Computadores “¡Bong!” Grupo 12 Camilo Araya Alejandro Fernández Pablo Fredes Ruo Shin Lee Alvaro Rivera Gabriel Vidal Muy malo el informe. La mayoría de las veces, "menos es más", es decir, conviene hacer uno pequeño de calidad y elaborado por uds. que con copy&paste y "blabla". 1 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION Índice. 1. General 3 1.1. Cambios 3 1.2. Secuencias del juego 4 1.3. Entradas. 4 1.4. Salidas. 4 2. Detección de Sensores a Utilizar 5 2.1. Detección de la pelota al pasar por línea de gol 5 2.2. Emisión del Sonido 6 2.3. Contabilización y despliegue de las anotaciones 6 2.4. Manejo de tiempo y despliegue durante el juego 6 2.5. Detección de patrones 6 2.6. Movimiento del “arquero” 7 3. Descripción Salidas del PIC 8 3.1. Detección de la pelota al pasar por línea de gol 9 3.2. Emisión del Sonido 9 3.3. Manejo del tiempo y despliegue durante el juego 9 3.4. Detección de patrones 9 3.5. Movimiento del “arquero” 10 4. Esquemas 11 4.1. Diagrama prueba de la placa 11 4.2. Esquemático general 12 5. Programa de Prueba 2 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 1. General 1.1. Cambios ¿Por qué? Se decidió no poner obstáculos, en su lugar se dividirá el área de juego en dos sectores. Al jugar se contabilizará el número de veces que pasa la bola por cada sector, por el lado que pase más veces la bola se encenderá un LED que indicará que de pasar la bola por ese sector la anotación no será válida, al apagarse el LED las anotaciones volverán a ser válidas. Sonido: será usado como alarma cada vez que se haga una anotación. Por simpleza, en una primera etapa el lanzamiento de la bola será manual. Implementación de un botón de inicio y un botón para definir la dificultad del juego. 1.2. Secuencias del juego ¿Hay segunda etapa? ¿Cuándo? Un botón sólo se puede presionar, no permite seleccionar nada El jugador define la dificultad del juego y lo inicia mediante botones. Comienza el cronómetro, el cual correrá por un tiempo definido (el tiempo que dure una partida) El jugador lanza la pelota intentando realizar una anotación. El lado por el que pase la bola será detectado por los fototransistores, estos enviarán una señal indicando el lado por el cuál pasó, esto aumentará la cuenta del número de veces que ha pasado la bola por ese lado, de alcanzarse un cierto número de pasadas se encenderá el LED correspondiente a ese lado indicando que de pasar la bola por ese sector mientras esté encendido el LED la anotación no será válida, el LED permanecerá encendido mientras dure ésta condición. De marcarse un gol será detectado por el sensor que enviará la señal para actualizar el marcador. El jugador recupera la bola y sigue intentando realizar anotaciones durante el tiempo de juego. Al término del tiempo se acaba el juego, el puntaje obtenido de ser de los más altos obtenidos se almacenará en memoria 1.3. Entradas 3 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION Fototransistores Botones 1.4. Salidas LEDs: De colores, que indiquen dificultad Display de 7 segmentos: Marcador y contador de tiempo Motor: Movimiento del arquero Sonido: Bocina que anuncie goles y finalización del juego 4 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 2. Descripción de sensores a utilizar 2.1. Detección de la pelota al pasar por línea de gol Utilizaremos un sensor Foto-Interruptor infrarrojo CNZ1120 Panasonic, con un valor de $1795 en Olimex (http://www.olimex.cl/product_info.php?cPath=50_88&products_id=191). Este sensor emite un rayo infrarrojo entre los dos foto interruptores, detectando cada objeto que pase entre ellos (en este caso la pelota). Ilustración 1: Foto transistores El circuito de cómo operará este sensor está detallado a continuación: No sirve. Interesa el circuito de cómo uds usarán el componente. Datasheet: http://www.olimex.cl/pdf/Components/CNZ1120.pdf 2.2. Emisión de Sonido El micrófono capta sonidos Utilizaremos un micrófono Electret (Breakout board), con un valor de $5970 (http://www.olimex.cl/product_info.php?cPath=50_95&products_id=412). Modelo OPA344. Esquemáticamente el circuito funciona así: 5 en Olimex PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION Aclárense: ¿parlante o micrófono? El parlante es más simple pero, ¿cómo lo alimentarán? En caso de ser muy compleja la utilización de este dispositivo, la alternativa sería el parlante 8 Ohm 1W 2.5 Amperes de Victronics(http://www.victronics.cl/phpdetalle.php?p=95-002542), mucho más sencillo que el que queremos implementar. 2.3. Contabilización y despliegue de las anotaciones ¿Saben qué significa? Utilizaremos un display de 7 segmentos 7S-CC para desplegar las anotaciones. La contabilización se registrará en la memoria. ¿Un solo dígito? 2.4. Manejo del tiempo y despliegue durante el juego Utilizaremos el timer incorporado en el PIC, y se desplegará el tiempo en un display distinto al de las anotaciones. ¿Del mismo tipo? ¿Cuántos dígitos? 2.5. Detección de patrones de juego Se utilizará el mismo sensor Foto-Interruptor infrarrojo CNZ1120 Panasonic en dos posiciones distintas (2 sensores distintos), los que se pondrán en un mismo eje. Cada par de foto interruptores agarrará solamente la mitad del ancho de la cancha, de tal forma que se puedan contabilizar las veces que pasa la pelota por un sector ó por otro. Utilizaremos dos LED que indicarán, al prenderse, cuando la pelota ha superado el límite de veces que puede pasar por cada sector, inhabilitando posteriormente los goles por ese lado. 6 Los sensores no detectan patrones. El análisis de la información sí. PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 2.6. Movimiento del “arquero” El movimiento del arquero se hará de manera radial a través de un motor cuyo eje será paralelo a la normal de la superficie del juego e irá ubicado por debajo de ésta. El motor elegido es el Motor Servo para propósito general giro en 180° DY-S0209-38g (http://www.olimex.cl/product_info.php?products_id=292). Para utilizar este servo, al darle un voltaje mayor a Vcc/2 gira hacia un lado, y al darle uno menor a Vcc/2 gira hacia el otro (no hay documentación oficial sobre este motor, pero obtuvimos esta información del foro de Olimex.cl). En general los servos no funcionan así. ¿Hablan del voltaje como señal de entrada al servo? ¿Qué hay con la alimentación de ellos? 7 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 3. Descripción salidas del PIC Entradas y Salidas del PIC16F876AAA: No sirve para nada hacer copy&paste del datasheet. Puerto A: 8 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION Puerto B: 3.1. Detección de la pelota al pasar por línea de anotación No analiza, convierte Conectaremos el sensor a la entrada RA0 del PIC, y será analizado por el ADC. Necesitaremos salidas del PIC para ir contando los goles, por lo que utilizaremos desde RD0 hasta RD3. 3.2. Emisión de Sonido ¿Para contar o mostrar? Utilizaremos la salida del PIC RB3/PGM y RC6/TX/CK, y como entrada RA3. ¿Cómo quieren convertir una señal digital en sonido? ¿DAC? 3.3. Manejo del tiempo y despliegue durante el juego El tiempo será controlado por la configuración de un timer interno del PIC, el cual será conectado a un decodificador BCD/7 segmentos, cuya salida se encontrará entre RD4 y RD7. 3.4. Detección de patrones de juego Al utilizar dos foto sensores iguales al de la línea de meta, conectamos a las entradas RA2 y RA3 del PIC, y salida a tierra. Los LED están conectados a RC0 y RC1. 9 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 3.5. Movimiento del “arquero” La conexión del motor que moverá al arquero se hará en el pin RC2 del PIC, por corresponder éste a la salida PWM1. No es coherente con lo descrito para el servo. 10 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 4. Esquemas ¿Qué versión? Es bastante caro. Espero que no sea "pirata". 4.1. Díagrama prueba de la placa Utilizamos el Software “Proteus” para realizar una simulación de la prueba de la placa, para comprobar que no existan errores. Está sumamente simplificada para efectos de prueba. Usamos el archivo modificado Modf.hex C4 22p X1 CRYSTAL C3 22p RV1 U1 13 14 2 3 4 5 6 7 10k RV2 8 9 10 1 10k OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 R6 10k 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 PIC16F877A PROGRAM=..\..\..\..\Users\Ale\Downloads\Modf.hex D1 D2 10k LED R2 LED D3 10k DSW1 4 3 OFF ON 1 2 R7 10k DIPSW_2 R10 R8 10k 10k 11 10k R3 LED R9 R1 10k PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 4.2. Esquemático general Está detallado en el punto 3. Acá lo mostramos gráficamente: 12 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION 5. Código (programa de prueba) ; Ayudantía 2, José Luis Honorato Modificado por Álvaro Rivera Grupo 12 list p=16f877a ; Tipo dispositivo include <P16F877A.inc> ; Para que reconozca los registros ORG H'00' GOTO PARTIDA ; Ubicación de partida ORG H'04' GOTO INT ; Ubicación de interrupciones ; Variables a almacenar, registros ; de propósito general en el banco 0 LED EQU H'20' ; Led de uso actual POT1 EQU H'21' ; Vin POT2 EQU H'22' ; LED LEVEL EQU H'23' ; Nivel de corte de low a med LEVEL2 EQU H'27' ; Nivel de corte 2 de med a high CONT EQU H'24' ; Contador de overflows del timer DIST EQU H'26' ; Valor del Vin aceptable, entre 0 y 127 PARTIDA BCF STATUS,RP1 BSF STATUS,RP0 ; Me cambio al banco 1 ;Configuración de Puertos (Output = 0 , Input = 1) MOVLW B'11111000'; RB0 , RB1, RB2 como outputs para LEDs MOVWF TRISB MOVLW H'FF' ; Todos los canales de A como input MOVWF TRISA MOVLW H'FF' ; Todos los canales de C como input (Vamos a usar RC2 para el switch) MOVWF TRISC BCF STATUS,RP0 BCF STATUS,RP1 ; Vuelvo al Banco 0 CLRF CONT CLRF LED CLRF LEVEL CLRF LEVEL2 13 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION CLRF POT1 CLRF POT2 CLRF DIST ;INTERRUPCIONES MOVLW B'11000000' MOVWF INTCON ; Interrupciones Globales y Periféricas BCF STATUS,RP1 BSF STATUS,RP0 ; BANCO 1 MOVLW B'00000001' MOVWF PIE1 ; Activo la interrupcion Timer1 Overflow ; Aqui se puede usar la interr. del USART, etc. BCF STATUS,RP0 BCF STATUS,RP1 ; BANCO 0 ;CONFIGURACION TIMER 1 CLRF TMR1L CLRF TMR1H ; Borro registros TMR1 MOVLW B'00000000' ; Uso de clock interno, prescaler 1:4, Timer1 OFF MOVWF T1CON ;CONFIGURACION ADC BCF STATUS,RP1 BSF STATUS,RP0 ;BANCO 1 MOVLW B'01000000' ; Justificado Izquierdo FOSC/2 Todos análogos MOVWF ADCON1 BCF STATUS,RP0 BCF STATUS,RP1 MOVLW B'01000000' MOVWF ADCON0 MOVLW D'42' MOVWF LEVEL MOVLW D'84' MOVWF LEVEL2 ;BANCO 0 ;FOSC/8, CH0 por ahora, ADC=OFF Mal indentado LOOP 14 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION ; Leo los valores de los potenciometros CALL LEER_CH0 CALL UBICAR ; Veo en que Level me encuentro, entre low y med o med y high CALL LEER_CH1 BTFSC PORTC,2 ; Si RC2 esta en 1, parpadea CALL BLINK BTFSS PORTC,2 ; Si RC2 esta en 0, lo prendo CALL LED_ON GOTO LOOP ; Vuelvo a hacer lo anterior UBICAR BCF STATUS,C ; Me aseguro de bajar el flag MOVF DIST,0 ; Vin formateado SUBWF LEVEL2,0 ; (LEVEL2) - (W) = (W) BTFSS STATUS,C ; Según el resultado, activo el led correspondiente CALL LED_HIGH ; Si no hubo carry, DIST > LEVEL, si es igual se queda en LOW BTFSC STATUS,C CALL UBICAR_ML ; ahora compruebo si el valor es menor o mayor que 42 RETURN UBICAR_ML MOVF DIST,0 ; Vin formateado SUBWF LEVEL,0 ; (LEVEL) - (W) = (W) BTFSS STATUS,C ; Según el resultado, activo el led correspondiente CALL LED_MED ; Si no hubo carry, DIST > LEVEL, si es igual se queda en LOW BTFSC STATUS,C CALL LED_LOW RETURN LED_HIGH ; RD2 MOVLW B'00000100' MOVWF LED BCF STATUS,C RETURN LED_MED; RD1 MOVLW B'00000010' MOVWF LED BCF STATUS,C RETURN LED_LOW ; RD0 MOVLW B'00000001' 15 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION MOVWF LED BSF STATUS,C RETURN LED_ON MOVLW B'00000000' ; Uso de clock interno, prescaler 1:4, Timer1 OFF MOVWF T1CON MOVF LED,0 MOVWF PORTB RETURN BLINK MOVLW B'00000001' ; Uso de clock interno, prescaler 1:1 (tercer y cuarto bit), Timer1 ON MOVWF T1CON MOVF CONT,0 ; CONT en W XORWF POT2,0 ; Comparo CONT con POT2, si son iguales (Z=1), cambio el estado del LED BTFSC STATUS,Z CALL CAMBIA_LED BCF STATUS,Z RETURN INT BCF INTCON,GIE ;APAGO INTERRUPCIONES BTFSC PIR1,TMR1IF ; Si la interrupcion es por TMR1 overflow, voy al método CALL CONTAR ; Aqui se pueden agregar otras interrupciones BSF INTCON,GIE ;REACTIVO |INTERRUPCIONES RETURN CONTAR BCF PIR1,TMR1IF ; Bajo el flag de la interrupción MOVLW H'EE' MOVWF TMR1H MOVLW H'00' MOVWF TMR1L ; El tiempo de parpadeo dependerá del valor de TMR1H + TMR1L INCF CONT,1 ; Incremento el contador RETURN CAMBIA_LED BCF STATUS,Z CLRF CONT MOVF PORTB,0 BTFSC STATUS,Z CALL PRENDE_LED BTFSS STATUS,Z 16 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION CALL APAGA_LED RETURN PRENDE_LED MOVF LED,0 MOVWF PORTB BSF STATUS,Z RETURN APAGA_LED BCF PORTB,0 BCF PORTB,1 BCF STATUS,Z RETURN LEER_CH0 ; Revisa en que lado estoy MOVLW B'01000001' ; Me cambio a CH0 MOVWF ADCON0 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;BCF ADCON0,CHS0 BSF ADCON0,GO ; Le digo GO PAUSA0 BTFSC ADCON0,GO GOTO PAUSA0 ; Si está en Clear, movemos el dato 17 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION MOVF ADRESH,0 MOVWF POT1 ;MOVLW H'00' ;MOVWF ADRESH BCF STATUS,C BCF STATUS,DC BCF STATUS,Z RRF POT1,1 ; Maximo 127 BCF STATUS,C MOVF POT1,0 MOVWF DIST RETURN LEER_CH1 ; Blink MOVLW B'01001001' ; Me cambio a CH1 MOVWF ADCON0 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;BSF ADCON0,CHS0 BSF ADCON0,GO ; Le digo GO PAUSA1 BTFSC ADCON0,GO ; Si está en Clear, movemos el dato 18 PONTIFICIA UNIVERSIDAD CATOLICA DE CHILE ESCUELA DE INGENIERIA DEPARTAMENTO DE CIENCIA DE LA COMPUTACION GOTO PAUSA1 MOVF ADRESH,0 MOVWF POT2 ;MOVLW H'00' ;MOVWF ADRESH RETURN END 19