informe_picasyfijas(pic 16f ) assembler

Upload: dillam27277774

Post on 06-Jan-2016

75 views

Category:

Documents


4 download

DESCRIPTION

manejo del pic 16f Teclado matricial Visualización dinamica Timer0 retraso de 1 ms con desbordamiento Modo sleep Generación de numero aleatorio Software para jugar picas y fijas Configuración de interrupciones

TRANSCRIPT

LABORATORIO N 1 MICROPROCESADORES E INTERFASES

Jess Moreno, Dillam J. Daz, Vanessa Cucha [email protected], [email protected] [email protected]

Universidad Rosario, Escuela Colombiana de Ingeniera Julio Garavito.Bogot, Colombia.

.

Resumen- El presente informe recopila el diseo e implementacin de un sistema digital en un PIC16F877A el cual permite jugar Picas y Fijas. El juego consiste en descubrir un nmero de cuatro cifras y el sistema diseado muestra al usuario dinmicamente los aciertos en la posicin correcta (Fijas) o en diferente posicin (Picas), todo el cdigo realizado se llev a cabo en el entorno de desarrollo integrado MPLAB v.8 lo que permiti la sntesis e implementacin del mismo. En las secciones que contemplan este documento se explicar el desarrollo y la solucin al problema planteado.

Palabras Claves- juego Picas y Fijas, microcontrolador, MPLAB v.8, PIC16F877A.

I. INTRODUCCIN

Los microcontroladores son circuitos integrados capaces de ejecutar rdenes que fueron grabadas en su memoria. Su composicin est dada por varios bloques funcionales, los cuales cumplen una tarea especfica. Estos dispositivos operan uno o ms procesos, por lo general, estn basados en arquitectura tipo Harvard, la cual consiste en dispositivos de almacenamiento separados (memoria de programa y memoria de datos). Son ampliamente utilizados para controlar diversos sistemas, como aplicaciones industriales de automatizacin y robtica.

Entre la gran familia de microcontroladores se tiene el PIC16F877A el cual cuenta con memoria de programa tipo FLASH, lo que genera facilidad en el desarrollo de prototipos al permitir reprogramarlo sin necesidad de borrarlo con anterioridad. El encapsulado para este tipo de microcontrolador es el DIP (Dual In-line Pin) de 40 pines los cuales se organizan en 5 puertos [1] como se ve en la Figura 1.

Figura 1. Distribucin de los puertos y pines del microcontrolador PIC16F877A [1].

Todo microcontrolador requiere de un circuito externo que le indique la velocidad a la cual debe trabajar, se habla entonces del oscilador y en este caso se trabaja con uno tipo XT cristal de 4MHz el cual internamente posee una frecuencia que est dividida por cuatro lo que indica que la frecuencia de trabajo es de 1Mhz luego cada instruccin que se ejecute se da en un microsegundo su conexin se realiza como se muestra en la Figura 2.

Figura 2. Conexin oscilador tipo XT [2]

Es importante resaltar la importancia que tiene el PICKIT 3 en la programacin del microcontrolador utilizando el entorno de desarrollo MPLAB al permitir programar el micro en tiempo real con su propio hardware.

El objetivo del proyecto es comprender y manejar el lenguaje ensamblador en el modelamiento de sistemas digitales por medio de la programacin del microcontrolador PIC16F877A en la creacin del juego Picas y Fijas para de esta manera trascender en forma prctica la teora vista en clase.

.II. METODOLOGA

Para emprender la implementacin del sistema se realiz un esquema general del circuito. Esta etapa de pre-diseo facilit la definicin de una metodologa para la solucin del laboratorio, ya que nos estamos familiarizando con la programacin del microcontrolador en lenguaje ensamblador. La etapa de pre-diseo grfico nos permiti tener una visin ms clara del acople de los componentes y descripcin interna de los mismos de igual manera se realizaron diagramas de flujo para visualizar y tener un concepto ms claro y detallado de lo que se quera realizar permitiendo la ejecucin del cdigo de una forma ms clara y funcional (Ver Fig. 1 en Anexo 1).

2.1 Visualizacin Dinmica

Este proceso se implement en 8 displays alfanumricos y para lograr la visualizacin dinmica se define un registro para cada uno de los display con el principio de que si se desea utilizar , se van a reutilizar y solo se van a escribir sobre ellos el mensaje a visualizar esto es para solo llamar una funcin con variables globales las cuales van a ser reescritas por el mensaje que deseamos. La forma de poder escribir sobre estos displays es la utilizacin y la ubicacin PCL.

Con la ubicacin del PCL primero se dio la posicin y se configura el PCLATH este brinda la ubicacin con la tabla de la decodificacin respectiva para cada led (Ver Tabla 1), Como son 8 displays se necesita un registro a nivel bajo y nivel alto los cuales van a ser reescritos con su mismo valor. El registro para este proceso se llama visu01 que indica la posicin de la pantalla con la cual se desea visualizar.

Se cre un registro llamado A el cual se encarga de la decodificacin de la corriente, empleando un decodificador (74LS138P) 3 a 8 , las 3 entradas para decodificar las 8 salidas y 1 enable. Para poder visualizar lo primero que se realiza es configurar el dato que se desea por el puerto C siendo este de nivel bajo y el puerto D nivel alto ya que nuestro display de visualizacin tiene 16 segmentos para pintar.

Por lo tanto si se desea pintar en el primer display se manda el dato de decodificacin, en este caso seria 0000 cuando el bit 4 del PORTA est a nivel alto, el enable est en 1 se habilita para pintar y cuando est en 0 se deshabilita para pintar. Una vez configurado el valor que se desea mostrar por el PORTA se habilita el display.

Cada vez que se asigna una letra o nmero a un display se espera un tiempo determinado (retardo) de 400ms para asignar esa letra al display siguiente hasta garantizar que recorriera los 8 displays.

Tabla 1. Decodificacin de la visualizacin.

NMLKJHG2G1FEDCBA (L)

NUMEROS01111111111000000

11111111111111001

21111111100100100

31111111100110000

41111111100011001

51111111100010010

61111111100000010

71111111111111000

81111111100000000

91111111100010000

MENSAJE GANADOR A1111111100001000

G1111111101000010

M1111101011001001

E1111111100000110

O1111111101000000

P1111111100001100

F1111111100001110

H1111111100001001

L1111111111000111

N1111011011001001

R1111011100001100

W1101011111001001

I1110110111110110

*1100000011111111

-1111111100111111

1111111111111111

Tabla 2. Entradas decodificador que habilita los displays

A2A1A0DISP ON

0000

0011

0102

0113

1004

1015

1106

1117

2.2 Teclado

La entrada de los datos se implement en un teclado matricial 4x4 donde:

G Guardas A Nmero Aleatorio T Enter M Leer J Cargar nmero de la EEPROM

El teclado, que est conectado al puerto B de la manera indicada en la figura 5, se encargaba de asignar los nmeros presionados a los registros de datos. Este teclado est compuesto por 16 pulsadores, los cuales, dependiendo de la configuracin del switch asignaban cierta letra a los registros de visualizacin

Figura 3. Teclado matricial 4x4

2.3 Modo Sleep

Se realiza una configuracin del puerto INTCON Y OPTION_REG (Opcin de Registro) este realiza la configuracin de la velocidad de los ciclos de las interrupciones, en este caso se configura 256 habilitando el TIMER0 (TMR0IE), este timer es un paralelo al reloj lo cual permite hacer operaciones cuando se active su flanco por ende cada vez que halla un desbordamiento en el programa va a entrar en la interrupcin. En la interrupcin se evala si existe una interrupcin de los puertos B entonces se dirige a teclado pero si por el contrario no existe ninguna interrupcin se ir a los contadores.

El contador de interrupciones tiene que contar hasta 764 cuando cuenta hasta este valor es equivalente a 50 ms tiempo estimado para entrar en este modo de bajo consumo de energa, el valor de esto se obtuvo de la siguiente manera:

Una vez realizada la configuracin anterior existe una bandera bandsleep sobre el main principal donde se encuentra el ciclo que es la visualizacin, cuando dicha bandera sea 0 se dirige a una parte del programa llamada sleep en esta parte cuando el primer bit sea 1 se dirige a una subrutina llamada apagar donde se pone el bit 3 del PORTA en 0 ya que este bit es el enable y una vez dado este proceso ya no se visualiza nada en los displays entrando al modo sleep.

Es importante mencionar que las teclas deben tener una posibilidad de reiniciar esa bandera, cada vez que se presione una tecla esa bandera es igual a 0, si esta bandera bandsleep es igual a 0 va a saltar en el ciclo.

2.4 Almacenamiento en memoria no voltil EEPROM

Para guardar el nmero aleatorio, se us el direccionamiento indirecto, el cual permite controlar los registros directamente, es decir, se logra acceder a la direccin del registro como tal para manipularlo y poderlo usar. Para esto se usaron los registros FSR y INDF, este ltimo no existe fsicamente en el microprocesador sin embargo es usado como un puente para lograr manipular la informacin del registro.

Luego de tener claro el concepto de direccionamiento indirecto solo es usar el cdigo que nos brinda el manual del microprocesador, teniendo en cuenta que hay que cambiar correctamente de banco y mediante un ciclo se logra guardar el nmero que se desee.

El proceso de carga es el mismo, se realiza un ciclo con el direccionamiento indirecto y el cdigo que nos brinda el manual para as lograr el objetivo de cargar la informacin guardada en la memoria no voltil.

En cuanto al modo de escritura, una vez se presione la tecla M en el teclado matricial va al modo de escritura, cuanto termina este modo la bandera vuelve a ser 0.

2.5 Modo de depuracin o debug

En este modo se lee el puerto PORTA en su bit 4 cuanto este es igual a 1 quiere decir que se encuentra en el ciclo de visualizacin normal si este bit es igual a 0 entra a este modo. Se escogen unas variables y se envan a decodificacin escribiendo los valores aleatorios generados, que cuando se estn generando ya no se visualizan porque en la parte de decodificacin se establecieron como un asterisco (*), entonces al entrar en este modo se puede visualizar el nmero secreto.

2.6 Mensaje para finalizar el juego (Ganador)

Para este mensaje se compara el estado 4 de las picas cuando las fijas son 4 se realiza un XOR si el status de la bandera es igual a 1 lo que significa que son iguales, lo que realiza es mover al mensaje de visualizacin un mensaje que dice Win permitiendo conocer al usuario que ha finalizado el juego de manera satisfactoria pues descubri el nmero.

2.7 Nmero aleatorio

Este nmero se gener a partir de un registro que se va desplazando, en este registro se toman los primeros 4 bits ms significativos, si estos bits son mayores que el dgito 9 se realiza una suma con el nmero 6 guardando el valor dado sobre un registro. Una vez se hallan guardado los valores no importa que se repitan porque siempre se valida cada estado para saber si el nmero es igual si llegado el caso de que el nmero sea igual se vuelve a generar otro nmero hasta ratificar que todos sean diferentes.

IV. RESULTADOS Y ANLISIS

Se obtuvo una buena implementacin y diseo del sistema digital que contempla el juego Picas y Fijas al lograr generar un nmero aleatorio de cuatro dgitos el cual es el nmero a descubrir por el usuario. Se corrobora el funcionamiento comportamental del sistema validando el nmero de picas y fijas por cada intento que el usuario realiza. De igual manera se cumplen con los requerimientos establecidos del almacenamiento y lectura del nmero aleatorio desde la memoria no voltil EEPROM, el modo de bajo consumo de energa y el modo de depuracin, los cuales cumpliendo totalmente los objetivos propuestos para este laboratorio.

La parte que gener mayor dificultad en la realizacin del cdigo fue la del guardado el numero en los registros de la memoria EEPROM, esto debido a que pequeos errors en la codificacin los cuales no eran facilmente identificables en el procesos de simulacin. Un aspecto a mejorar del sistema es el metdo de antirrebote para el teclado matricil, ya que, a pesar que el sistema funcionaba acorde a las especificaciones del laboratorio, el teclado difcultaba una adecuada manipulacin del sistema. Cabe mencionar que el proceso de generacin de numero aleatorio con el mtodo LFSR resulto ser fcil de implementar en un nuero reducido de instrucciones, por lo tanto, el procesos de validacin del nmero implico a constante utilizacin de estas instrucciones.

Otra dificultad en la realizacin del laboratorio fue el haber elegido el puerto B para el ingreso de datosel, dado que no hera posible programar el microcontrolador sobre el montagea. El constante montar y desmontar del del microcontrolador debilito el pin uno, pero afortunadamente no se desprendio. En el futuro se procuara tener encuenta este citerio a la hora de disear el sistema.

Figura 4. Montaje del circuito que desarrolla el juego Picas y Fijas con 8 displays y teclado matricial 4x4 con el microcontrolador PIC16F877A.

V. CONCLUSIONES

Como resultado del proyecto realizado, es posible concluir que la utilizacin del ambiente de desarrollo integrado MPLAB nos permiti editar e implementar el cdigo en lenguaje ensamblador para la programacin del microcontrolador desarrollando de manera eficaz el problema planteado de la realizacin del juego Picas y Fijas.

Conocer y entender las ventajas que presentan los microcontroladores son de gran importancia para futuras aplicaciones al ser sistemas completos con tareas especficas.

Finalmente cabe resaltar la importancia de este tipo de laboratorios al permitir desarrollar y afianzar los conocimientos vistos en clase, de igual manera nos ayuda a generar un pensamiento estructurado, analtico y lgico para solucionar de manera ptima los problemas planteados.

REFERENCIAS[1] El microcontrolador PIC16F877 [Online]. Disponible en: http://www.utp.edu.co/~eduque/arquitec/PIC16F877.pdf[2] Qu es un microcontrolador? [Online]. Disponible en: http://www.electronicaestudio.com/microcontrolador.htm

[3] PIC16F87XA. SEDA. [Online]. Disponible en: http://190.24.150.73/seda/seda_wp_00/?page_id=30

Figura 5. Esquema para la visualizacin dinmica del juego Picas y Fijas.

Figura 6. Diagrama de Flujo para Interrrupciones

Figura 7. Diagrama de Flujo Nmero aleatorio. ANEXO CDIGO

;**********************************************************************; Nombre del archivo: decoTecladoInt.asm; Fecha: 05-09-2015; Version: 1;; Autor: ;********************************************************************** ; __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC list p=16f877A ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ; '__CONFIG' directiva usada para la palabra de configuracin; Las etiquetas que siguen a la directiva estan definidas en el archivo .inc; Revise el datasheet para informacin sobre la palabra de configuraci?n ;***** VARIABLE DEFINITIONSw_temp EQU 0x7D ; variable used for context savingstatus_temp EQU 0x7E ; variable used for context savingpclath_temp EQU 0x7F ; variable used for context saving ;**********************************************************************;DEFINICION DE VARIABLES;**********************************************************************tec EQU 0x22 ;variable que almacena el valor de la tecla pulsadret1 EQU 0x23ret2 EQU 0x24 ; variables para retardovisu01 EQU 0X25 ; VISUALIZACION BAJA SEGEMENTO 1cont_part_b EQU 0X26 ; contador ready pifi01 EQU 0X70 ; numero generado 1visu02 EQU 0X27 ; VISUALICACI?N BAJA SEGEMENTO 2cont_part_a EQU 0X28 ; contador readpifi02 EQU 0X71 ; nmero generado 2visu03 EQU 0X29 ; VISUALICACI?N BAJA SEGEMENTO 3pifi03 EQU 0X72 ; nmero generado 3visu04 EQU 0X2B ; VISUALICACI?N BAJA SEGEMENTO 4pifi04 EQU 0X73 ; nmero generado 4visu05 EQU 0X2D ; VISUALICACI?N BAJA SEGEMENTO 5valnum EQU 0X2E ; valida el nmero visu06 EQU 0X2F ; VISUALICACI?N BAJA SEGEMENTO 6cont_dato_1 EQU 0X30 ; contador dato de entradavisu07 EQU 0X31 ; VISUALICACIN BAJA SEGEMENTO visu08 EQU 0X33 ; VISUALICACIN BAJA SEGEMENTO 8cont_ret1 EQU 0X34 ;RETARDO PARA EL RELOJcont_ret2 EQU 0X36 ;RETARDO PARA EL RELOJ2cont_ale EQU 0X37 ;contador del nmero aletorio numale EQU 0X38 ;nmero aletorioentdato01 EQU 0X32 ; dato de entrada 1entdato02 EQU 0X39 ; dato de entrada 2entdato03 EQU 0X3a ; dato de entrada 3entdato04 EQU 0X3b ; dato de entrada 3bandera EQU 0X3c ; dato de entrada 3 pica EQU 0X40 ; numero de picas fija EQU 0X41 bandsleep EQU 0X42entdatopica EQU 0x43 ; valor a analisar ret3 EQU 0x44 ;variables para retardocont_in1 EQU 0X45 ;CONTADOR DE INTENTOS UNOcont_in2 EQU 0X46 ;CONTADOR DE INTENTOS D0S cont_sleep EQU 0X47 ;CONTADOR DE EL MODO DORMIRdireccion EQU 0X79 ; DIRECCION DE LA MEMORIA EEPROM guardado1 EQU 0X74 ; dato guardado en la memeoria guardado2 EQU 0X75 ; dato guardado en la memeoriaguardado3 EQU 0X76 ; dato guardado en la memeoriaguardado4 EQU 0X77 ; dato guardado en la memeoriadato EQU 0X78 ; DATO GUARDADO PARA ESCRIBIR BANDERA1 EQU 0X4E ; DATO GUARDADO PARA ESCRIBIR datoreg EQU 0X7A;********************************************************************** ORG 0x000 ;vector de reinicializaci?n del procesador nop ; nop required for icd ; go to beginning of program goto main ;ir a main ORG 0x004 ;localizaci?n del vector de interrupciones movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register movf PCLATH,w ; move pclath register into w register movwf pclath_temp ; save off contents of PCLATH register BTFSC INTCON,RBIF goto TECLADOin goto ingresosleep ingresosleep: incf cont_part_b,f ; aumenta la parte inferior del progrma movf cont_part_b,w xorlw .0 ; compar cuando se desborde es igual a cero btfsc STATUS,Z incf cont_part_a,f ;incrementa el estado alto movf cont_part_b,w ;comparar con el numero de intentos deceasos xorlw 0xfb ;toca contar hasta 763 con el de menor valor vamos a contar hasta 256 btfss STATUS, Z ;cuando se cumpla esta condicion goto fin movf cont_part_a,w xorlw .2 btfss STATUS,Z ; CUMPLIO EL NUMERO DE INTERRUCCIONES NECESARIAS PARA LLAMAR SLEEP goto fin bsf bandsleep,0 ; bandera para dormir el programa TECLADOin: clrf TMR0; limpiar timer0 clrf cont_part_b; Borro contador del timer porque se esta usando clrf cont_part_a ; Borro contador del timer porque se esta usando ;******Antirebote por software call retardo100ms ;retardo de 100 ms para Fosc=4MHz ;******BARRIDO PARA PRIMERA COLUMNA movlw b'00000111' movwf PORTB ;asigna 0 l?gico a la columna 1 ;call retardo50ms btfss PORTB,7 call tecla0 ;va a tecla0, si fila 1 = 0 btfss PORTB,6 call tecla4 ;va a tecla4, si fila 2 = 0 btfss PORTB,5 call tecla8 ;va a tecla8, si fila 3 = 0 btfss PORTB,4 call teclaB1 ;va a teclaC, si fila 4 = ;******BARRIDO PARA SEGUNDA COLUMNA movlw b'00001011' movwf PORTB ;asigna 0 l?gico a la columna 2 btfss PORTB,7 call tecla1 ;va a tecla1, si fila 1 = 0 btfss PORTB,6 call tecla5 ;va a tecla5, si fila 2 = 0 btfss PORTB,5 call tecla9 ;va a tecla9, si fila 3 = 0 btfss PORTB,4 call teclaB2 ;va a teclaD, si fila 4 = 0 ;******BARRIDO PARA TERCERA COLUMNA movlw b'00001101' movwf PORTB ;asigna 0 l?gico a la columna 3 btfss PORTB,7 call tecla2 ;va a tecla2, si fila 1 = 0 btfss PORTB,6 call tecla6 ;va a tecla6, si fila 2 = 0 btfss PORTB,5 call teclaMas ;va a teclaA, si fila 3 = 0 btfss PORTB,4 call teclaB3 ;va a teclaE, si fila 4 = 0 ;******BARRIDO PARA CUARTA COLUMNA movlw b'00001110' movwf PORTB ;asigna 0 l?gico a la columna 4 btfss PORTB,7 call tecla3 ;va a tecla3, si fila 1 = 0 btfss PORTB,6 call tecla7 ;va a tecla7, si fila 2 = 0 btfss PORTB,5 call teclaMenos ;va a teclaB, si fila 3 = 0 btfss PORTB,4 call teclaB4 ;va a teclaF, si fila 4 = 0 ;Ingreso de Datos para el programa tener encuenta la interrucci?nes. ;btfss bandera,5 ;goto final ;call ingreso movlw b'11110000' movwf PORTB ;lectura del puerto B para poder ; isr code can go here or be located as a call subroutine elsewherefin: bcf INTCON,RBIF ;borrar bandera bcf INTCON, TMR0IF ; salir del modo de interruccin movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre-isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt main ;******CONFIGURACI?N DE PUERTOS E INTERRUPCIONES bsf STATUS,RP0 ;banco 1 movlw b'11110000' ;Puerto B entradas movwf TRISB & 0x7F ;puerto B