OBJETIVO Mediante una matriz de leds de 5x7, una memoria EEPROM y el PIC16F877A, mostrar los caracteres de los nombres y primer apellido de los integrantes del equipo.
INTRODUCCION En esta práctica se programó el PIC para que muestre el nombre y primer apellido de cada integrante del equipo, donde el primer carácter del nombre y apellido están en mayúscula y lo demás en minúsculas y dejando un espacio entre el nombre y el apellido utilizando una memoria EEPROM que tiene grabados los caracteres del alfabeto en mayúsculas y minúsculas. El PIC16F877A cuenta con 5 puertos (RA, RB, RC, RD y RE) que pueden ser utilizados como entrada o salida de datos, como se muestra en el siguiente diagrama:
DESARROLLO El diagrama genereal de esta practica queda como se muestra en el siguiente diagrama:
Mediante tres push button conectados a los pines RB0, RB1 Y RB2 nos permitirán activar los pines ejecutando el programa previamente cargado al PIC para visualizar el nombre y apellido de cada integrante en la matriz de leds. Entre los pines 13 y 14 se conectó un cristal de 4MHz que permitirá realizar la oscilación de la señal puesto el microcontrolador no cuenta con un oscilador interno para para realizar la función de selección de frecuencia.
Por otra parte, se colocaron flip-flops tipo JK para un conteo rápido de ciclos de reloj, la salida de este conteo se colocaron en las entradas del decoder, esto se realizó con el fin de hacer que cada entrada de datos dieran un corrimiento para el encendido de los leds.
En lo que respecta al timer, se configuro para que diera una frecuencia de reloj mayor a 60 Hz.
Direcciones de las letras en la memoria EEPROM DIRECCION 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
CARACTER A B C D E F G H I J K L M N O P Q
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
R S T U V W X Y Z a b c d e f g h i
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
j k l m n o p q r s t u v w x y z
Se programó el microcontrolador en el programa MICROBASIC PRO con el siguiente código. main: trisa = 255 trisb = 0 trisc = 0 trisd = 0 while (true) portb = 255 portc = 0 portd = 0
portb = 0x23 delay_ms(200) portb = 0x1A delay_ms(200) portb = 0x27 delay_ms(200) portb = 0x1D delay_ms(200) portb = 0x2B delay_ms(200) portb = 0x28 delay_ms(200)
if porta = 1 then portb = 255 portb = 0x00 delay_ms(200) portb = 0x25 delay_ms(200) portb = 0x1E delay_ms(200)
delay_ms(200) portb = 0x11 delay_ms(200) portb = 0x2E delay_ms(200)
portb = 0x22 delay_ms(200) portb = 0x33 delay_ms(200) end if if porta = 2 then portb = 0x03 delay_ms(200) portb = 0x1A delay_ms(200) portb = 0x27 delay_ms(200) portb = 0x22 delay_ms(200) portb = 0x1E delay_ms(200) portb = 0x25 delay_ms(200)
if porta = 4 then
portb = 0x2B delay_ms(200) portb = 0x27 delay_ms(200) portb = 0x1A delay_ms(200) portb = 0x27 delay_ms(200) portb = 0x1D delay_ms(200) portb = 0x1E delay_ms(200) portb = 0x33 delay_ms(200)
portb = 255 delay_ms(200) portb = 0x0C delay_ms(200) portb = 0x1A delay_ms(200) portb = 0x2B delay_ms(200) portb = 0x2D delay_ms(200) portb = 0x22 delay_ms(200) portb = 0x27 delay_ms(200) portb = 0x1E delay_ms(200) portb = 0x33 delay_ms(200) end if
portb = 0x0E delay_ms(200) portb = 0x2C delay_ms(200) portb = 0x22 delay_ms(200) portb = 0x2B delay_ms(200) portb = 0x22 delay_ms(200) portb = 0x2C delay_ms(200) portb = 255 delay_ms(200) portb = 0x07 delay_ms(200) portb = 0x1E delay_ms(200)
end if wend end.
CONCLUSIONES Es necesario saber en qué dirección de memoria está grabado cada carácter para que al momento de programar el microcontrolador muestre correctamente y en orden los nombres de los integrantes. Como el PIC16F877A no cuenta con un oscilador interno es necesario un cristal externo entre los pines 13 y 14. Para grabar los números hexadecimales correspondientes a cada carácter, se deben de colocar de manera correcta en las direcciones de memoria al momento de programarlos, de otra manera, aunque el circuito este bien construido, no se mostraran de manera correcta los caracteres en la matriz de leds. Se debe tener en cuenta que la memoria tiene una configuración para la lectura de datos y otra para la escritura, por lo que se debe configurar de manera correcta para que los datos no se modifiquen o se pierdan y se tengan que volver a grabar los datos nuevamente en la memoria. La configuración de los push button en el PIC indica que cada que se presionen se activara en alto y como consecuente iniciara el programa cargado en la pic dependiendo que botón se presione. En el momento en que se programó el PIC se escribieron los valores de las direcciones en hexadecimal para que se muestren los caracteres, sin embargo cuando no se realiza el direccionamiento adecuado puede surgir el problema de que se muestre un carácter que no es.
El PIC cuenta con unos pines de activación (chip enable), escritura (Write enable) y lectura de datos (Read data) deben ir conectados a voltaje o tierra (activos en bajo) esta configuración se realizara dependiendo de cómo se usara el PIC ya que en estos pines se verifica la activación del PIC como tal. Al momento de programar el PIC se debe de asignar que pines se utilizaran como entrada de datos y cuáles serán utilizados como salida de datos.
REFERENCIAS
M. MORRIS MANO, “LOGICA DIGITAL Y DISEÑO DE COMPUTADORES”, ED. Prentice Hall (1989). MICROCHIP 16F877A, Datasheet, 2003, MICROCHIP TECHONOLOGY INC.