Nothing Special   »   [go: up one dir, main page]

Manejo de Perifericos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 135

MANEJO DE PERIFÉRICOS CON EL

PIC16F877A

Ing. Junior Figueroa Olmedo


DISTRIBUCIÓN DE PINES DEL PIC16F877A
REGISTROS DEL PIC16F877A
ENTRADAS Y SALIDAS DIGITALES

 El microcontrolador PIC16F877A cuenta con cinco puertos denotados con A, B, C, D y E.


Todos ellos tienen las siguientes características en común:

 Por razones prácticas, muchos pines de E/S son multifuncionales. Si un pin no se


configura para realizar una de estas funciones, puede ser utilizado como pin de E/S de
propósito general.

 Cada puerto tiene su propio registro de control de flujo, o sea el registro TRIS
correspondiente: TRISA, TRISB, TRISC etc. lo que determina el comportamiento de
bits del puerto, pero no determina su contenido.
ENTRADAS Y SALIDAS DIGITALES
Puerto PORTA y registro TRISA

 El puerto PORTA es un puerto bidireccional, de 6 bits de anchura (6 pines). Los bits


de los registros TRISA y ADCON1 controlan los pines del PORTA.

 El registro TRISA determina cuáles pines serán configurados como entradas y cuáles
serán configurados como salidas digitales. Los bits apropiados del registro ADCON1
determinan si los pines serán configurados como entradas analógicas o
entradas/salidas digitales.

 Todos los pines del PORTA se comportan como entradas/salidas digitales. Cinco de
ellos pueden ser configurados como entradas analógicas (denotadas por ANx). El
terminal RA4/T0CKI se utiliza también como entrada de reloj externo del
temporizador Timer0.
Puerto PORTA y registro TRISA
Puerto PORTB y registro TRISB

 El puerto PORTB es un puerto bidireccional, de 8 bits de anchura. Los bits del


registro TRISB determinan la función de sus pines (entrada o salida digital).

 Los pines RB4 al RB7 pueden programarse (configurando el registro INTCON) para
generar una interrupción cuando la señal que ingresa en uno de ellos cambia de
estado. El pin RB0/INT también puede programarse como petición de interrupción
externa.

 Cada terminal del puerto B cuenta con un circuito pull-up interno, que se puede
programar mediante el bit RBPU# (BIT 7) del registro de funciones OPTION-REG.
Con este bit se activan o desactivan los pull-up del puerto B.
Puerto PORTB y registro TRISB
Resistencias Pull-Up del PORTB

 Una resistencia pull-up está forzando todo el tiempo a que una entrada permanezca en un
estado deseado. Esto es de vital importancia para evitar cambios de estado en los pines de
entrada producidos por ruidos eléctricos o variaciones en la fuente de alimentación. Esto
evita los famosos estados de alta impedancia (high Z).

 La resistencia ubicada arriba, permite que la entrada esté siempre en un valor alto, esto
quiere decir, en pull-up, y el switch externo al cerrarse conecta con GND el pin, como es
mas “fácil” pasar directo a GND que a 5 volts a través de una resistencia, el pin se pone
en un estado 0 lógico. Además la resistencia debe ser tal que la corriente que circule por
ella sea pequeña.

 La activación de las resistencias pull-up es de gran utilidad cuando se conectan a los pines
botones de presión (con el teclado), interruptores y optoacopladores.
Puerto PORTC y registro TRISC

 El puerto PORTC es un puerto bidireccional, de 8 bits de anchura. Los bits del


registro TRISC determinan la función de sus pines (entradas y salidas digitales).

 Todos los pines de este puerto tienen multiplexadas diferentes funciones.


Puerto PORTD y registro TRISD

 El puerto PORTD es un puerto bidireccional, de 8 bits de anchura. Los bits del


registro TRISD determinan la función de sus pines (entradas y salidas digitales).

 Todos los pines de este puerto disponen en su entrada de un Schmitt Trigger.

 Además de usarse como líneas de E/S digitales, implementan un puerto paralelo


esclavo de 8 líneas (PSP), que sirve para permitir la comunicación en paralelo con
otros elementos del sistema.
Puerto PORTE y registro TRISE

 El puerto PORTE es un puerto bidireccional, de 3 bits de anchura. Los bits del


registro TRISE determinan la función de sus pines.

 Similar al puerto PORTA, en este caso los tres pines se pueden configurar como
entradas analógicas.

 Los terminales de este puerto comparten sus funciones con el Puerto Paralelo
Esclavo (PSP) para lo cual hay que poner el bit PSPMODE a 1.
CARACTERÍSTICAS ELÉCTRICAS DE LOS
PUERTOS DE E/S

 Al conectar dispositivos a los terminales de los puertos, hay que tener en cuenta las
limitaciones de potencia eléctrica del microcontrolador.

 Cada terminal E/S puede suministrar o drenar una corriente máxima. Además, la
corriente suministrada o drenada por todos los terminales de un puerto no puede
exceder un cierto valor, que es generalmente menor que la suma de las corrientes
individuales permitidas a través de los terminales del puerto.

Máxima corriente de salida a nivel alto por un pin I/O 25 mA

Máxima corriente de salida a nivel bajo por un pin I/O 20 mA

Máxima corriente de salida a nivel alto por el puerto A 80 mA

Máxima corriente de salida a nivel bajo por el puerto A 50 mA

Máxima corriente de salida a nivel alto por el puerto B 150 mA

Máxima corriente de salida a nivel bajo por el puerto B 100 mA


GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE LA RAM
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE LA RAM
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE LA RAM
 Ejemplo 1: Se configuran los terminales RB1 como salida y el RB0 como entrada
(con resistencia de pull-up). La salida debe tener el mismo valor que la entrada del
switch. Se utiliza un interruptor en la entrada y un led en la salida.
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE LA RAM
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE DIRECTIVAS
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE DIRECTIVAS
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE DIRECTIVAS
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE DIRECTIVAS
GESTION DE E/S DIGITALES EN CCS C
A TRAVÉS DE DIRECTIVAS
GESTION DE E/S DIGITALES EN CCS C
 Ejemplo 2: Realizar un juego de luces en donde se visualice el encendido de 8 leds
conectados en el puerto B. El proceso de encendido inicia desde el bit menos significativo
y sigue avanzando hacia el bit mas significativo, en esta actividad de avance los leds
anteriores se irán apagando y la duración de encendido será de 1 segundo. Una vez que se
llegue al final el proceso de encendido se invierte empezando desde el bit MSB hacia el bit
LSB. Este juego de luces se debe de mostrar de forma indefinida. Se solicita optimizar la
programación utilizando estructuras de repetición y operadores de desplazamiento.
GESTION DE E/S DIGITALES EN CCS C
 Solución Ejemplo 2:
GESTION DE E/S DIGITALES EN CCS C
 Ejercicio: Realizar un semáforo de 2 intersecciones, con la ayuda de 6 leds (2
amarillos, 2 rojos y 2 verdes), ubicados en los terminales mostrados en la figura.
Tomar en consideración que nunca pueden estar encendidos al mismo instante los
leds del mismo color en ambos semáforos, es decir no puede estar en un semáforo
verde y en el otro verde también. Existe un cambio de verde a amarillo mientras el
otro semáforo sigue en rojo, en el momento que el primer semáforo se pone en
rojo el segundo salta de rojo a verde. El tiempo estimado de cambio de color de
verde a amarillo es de 9 segundos y de amarillo a rojo 3 segundos.
GESTION DE E/S DIGITALES EN CCS C
 Ejemplo 3: Cada vez que se presione el pulsador conectado en RC2 (RC2=1) se
mostrará una cuenta ascendente binaria de 0 a 15 a través de cuatro leds
conectados a los cuatro bits menos significativos del puerto B del PIC16F877A.
Cada vez que se presione el pulsador conectado en RC3 (RC3=1) se decrementa el
valor del contador y se visualiza en los leds. Determinar la lógica necesaria para no
sobrepasar los valores máximos y mínimos del contador.
GESTION DE E/S DIGITALES EN CCS C
GESTION DE E/S DIGITALES EN CCS C
 Ejercicio: Mediante el uso de un dip-switch de 8 elementos conectado al puerto C,
realizar un menú de operación de secuencias de 8 leds en base a los estados de los
4 bits menos significativos del puerto, según las siguientes opciones de activación:
 Switch 1 (bit 0): se encienden los leds pares de uno en uno desde el LSB hasta
el MSB, n número de veces.
 Switch 2 (bit 1): se encienden los leds impares de uno en uno desde el MSB
hasta el LSB, n número de veces.
 Switch 3 (bit 2): titilan n veces los leds pares del puerto.
 Switch 4 (bit 3): titilan n veces los leds impares del puerto.

El número n proviene de los estados de los 4 switch más significativos conectados al


puerto C y tendrá un valor a 0 a 15.

 Nota: se debe que optimizar el código de las secuencias usando sentencias de


control con bucles repetitivos, no se puede ingresar las acciones de encendido y
apagado de una en una. El puerto C tiene que estar conectado en su totalidad a los
dip-switch. Como condición fundamental no se tiene que esperar al finalizar una
secuencia para que inicie la nueva secuencia seleccionada. Cada secuencia se inicia
una vez seteado su valor.
DISPLAY DE 7 SEGMENTOS

 El display de 7 segmentos, es un componente que se utiliza para la representación


de números en muchos dispositivos electrónicos.
 Este elemento se ensambla o arma de manera que se pueda activar cada segmento
(diodo LED) por separado logrando de esta manera combinar los elementos y
representar todos los números en el display (del 0 al 9).

 El display de 7 segmentos más común es el de color rojo, por su facilidad de


visualización.
 Cada elemento del display tiene asignado una letra que identifica su posición en el
arreglo del display.
DISPLAY DE 7 SEGMENTOS ÁNADO COMÚN
 Además de los dígitos de 0 a 9, hay algunas letras (A, C, E, J, F, U, H, L, b, c, d, o, r, t) que
se pueden visualizar al enmascarar.

 Display Ánodo Común


En el display ánodo común, todos los ánodos de los diodos LED están unidos y
conectados a la fuente de alimentación.
En este caso para activar cualquier elemento hay que poner el cátodo de los leds a
tierra a través de una resistencia para limitar la corriente que pasa por el elemento.
DISPLAY DE 7 SEGMENTOS ÁNADO COMÚN
DISPLAY DE 7 SEGMENTOS CÁTODO
COMÚN
 Display Cátodo Común
El display cátodo común tiene todos los cátodos de los diodos LED unidos y
conectados a tierra. Para activar un segmento de estos hay que poner el ánodo del
segmento a encender a Vcc (tensión de la fuente) a través de una resistencia para
limitar el paso de la corriente

 Nota: En caso de que se utilicen los visualizadores de ánodo común, todos los unos
contenidos en la siguiente tabla se deben sustituir por ceros y viceversa.
DISPLAY DE 7 SEGMENTOS CÁTODO
COMÚN
DISPLAY DE 7 SEGMENTOS – EJEMPLOS EN C
CCS
 Ejemplo 4: Manejar un display 7 segmentos de cátodo común. Realizar un contador
de 0-9, cada segundo se suma un dígito y cuando se llega a 9 se vuelve a empezar
desde 0.
DISPLAY DE 7 SEGMENTOS – EJEMPLOS EN C
CCS
 Solución 1 Ejemplo 4
DISPLAY DE 7 SEGMENTOS – EJEMPLOS EN C
CCS
 Solución 2 Ejemplo 4

 Ejercicio: Realice la programación del microcontrolador para que este muestre sobre
un display de 7 segmentos de ánodo común todas las vocales del alfabeto tanto
minúsculas como mayúsculas. Este proceso se repite tantas veces lo indique la
codificación de tres pulsadores conectados en cualquier puerto del microcontrolador.
DISPLAY DE 7 SEGMENTOS CON
DECODIFICADOR BCD

 La manera natural de manejar un display con un microcontrolador es usando un


circuito Decodificador BCD a 7 segmentos.
 El decodificador de BCD a siete segmentos es un circuito combinacional que permite
un código BCD en sus entradas y en sus salidas activa un display de 7 segmentos para
indicar un dígito decimal.

 El decodificador requiere de una entrada en código decimal binario BCD y siete salidas
conectadas a cada segmento del display.
 De esta manera solo se utilizan 4 pines del PIC en vez de 7 como se ha estado
haciendo hasta ahora.
DISPLAY DE 7 SEGMENTOS CON
DECODIFICADOR BCD
 Suponiendo que el visualizador es un display de cátodo común, se obtiene una tabla
cuyas entradas en código BCD corresponden a A, B, C y D y unas salidas
correspondientes a los leds que se encenderían en cada caso para indicar el dígito
decimal.

 Los valores binarios desde el 1010 al 1111 en BCD nunca se presentan, entonces las
salidas se tratan como condiciones de no importancia.
DISPLAY DE 7 SEGMENTOS CON
DECODIFICADOR BCD
 Así como existen display de ánodo común y de cátodo común, existen también
decodificadores para cada tipo.
 En un decodificador de ánodo común sus salidas están activas cuando están en nivel
bajo «0V=0 lógico», dado que controlará los cátodos de los segmentos. El más usado
es el 74LS47.
 Por lo contrario, en un decodificador para display de cátodo común sus salidas están
activas cuando están en nivel alto «5V=1lógico», ya que gobernará los ánodos de los
segmentos. El más usado es el 74LS48.

 La asignación de pines para el 74LS48 es idéntica a la de la figura con la diferencia de


que las salidas a,b,c,...,g no están negadas.
DISPLAY DE 7 SEGMENTOS CON
DECODIFICADOR BCD - EJEMPLOS

 Ejemplo 5: Manejar un display 7 segmentos de cátodo común con un decodificador


BCD a siete segmentos 74LS48. Realizar un contador automático de 0-9, cada segundo
se suma un dígito y cuando se llega a 9 se vuelve a empezar desde 0.
DISPLAY DE 7 SEGMENTOS CON
DECODIFICADOR BCD - EJEMPLOS
 Solución Ejemplo 5:

 Ejercicio: Realizar la misma actividad solicitada en el ejemplo 5 pero con un


display de 7 segmentos de ánodo común y además este contador debe ser manual.
Añadir 2 pulsadores, uno para decrementar y otro para incrementar la cuenta.
Mostrar por defecto en el display el numero 7.
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS

 En ocasiones nos encontramos con la necesidad de controlar o mostrar más de un


dígito mediante 2 o más displays. Para ello nos tendremos que valer de una serie de
técnicas o truquitos para mostrar dicha información sin tener que conectar todos los
pines del PIC a los dos o mas displays.
 Para ello nos aprovecharemos de un defecto o característica de nuestros ojos. Este
defecto se le conoce como persistencia de la visión. Se trata de que una imagen
permanece en la retina humana una décima de segundo después de que esta ya haya
desaparecido por completo.
 Nuestro ojo ve con una cadencia de 10 imágenes por segundo y después nuestro
celebro las enlaza como una sola imagen visual, móvil y continua, lo que genera en
nuestro cerebro la ilusión de movimiento.
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS
 Para lograr este objetivo se realiza una conexión multiplexada de estos dispositivos a
los puertos paralelos del microcontrolador. La figura muestra un posible esquema de
conexión utilizando elementos de 7 segmentos de ánodo común, sin el uso de
decodificadores, con 𝑅𝑅𝑅𝑅 = 330Ω y 𝑅𝑅𝑅𝑅 = 1𝐾𝐾Ω.
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS
 Para lograr este objetivo se realiza una conexión multiplexada de estos dispositivos a
los puertos paralelos del microcontrolador. La figura muestra un posible esquema de
conexión utilizando elementos de 7 segmentos de cátodo común, sin el uso de
decodificadores.
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS - EJEMPLOS
 Ejemplo 6: Realizar un contador automático de 00-99 con un doble display de 7
segmentos de ánodo común. Cuando éste llegue a 99 volverá a 00 y así
indefinidamente. Al circuito mostrado en la figura añádale los transistores
correspondientes.
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS - EJEMPLOS
 Segunda opción de circuito Ejemplo 6
MANEJO DE VARIOS DISPLAY DE 7 SEGMENTOS - EJEMPLOS

 Solución 1 Ejemplo 6
MANEJO DE VARIOS DISPLAY DE 7 SEGMENTOS - EJEMPLOS

 Solución 2 Ejemplo 6:
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS - EJERCICIO

 Ejemplo 7: Mostrar en 4 display de 7 segmentos de ánodo común la palabra HOLA y hacer


parpadear este mensaje cada 0.5 segundos.
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS - EJERCICIO
 Solución Ejemplo 7:
MANEJO DE VARIOS DISPLAY DE 7
SEGMENTOS - EJERCICIO
 Ejercicio: Realizar un contador decimal de 4 dígitos que se incremente de forma automática. Si se
pulsa el botón A se detiene el conteo. Si se pulsa en botón B se realiza un proceso de comparación
siempre y cuando se haya previamente presionado el botón A; el proceso de comparación consiste
en verificar si el número que actualmente se muestra en los leds está entre 24 y 50, si este es el
caso se enciende un buzzer o chicharra de12 voltios. Si se presiona el botón C se reinicia el conteo
y se apaga el buzzer.
MANEJO DEL DISPLAY LCD

 Las pantallas de cristal líquido o display LCD (Liquid Crystal Display) para mensajes
tienen la capacidad de mostrar cualquier carácter alfanumérico (letras de alfabeto
griego, signos de puntuación, símbolos matemáticos, etc), permitiendo representar la
información que genera cualquier equipo electrónico de una forma fácil y económica.
 También es posible visualizar símbolos creados por el usuario.
 Este componente electrónico está específicamente fabricado para ser utilizado con los
microcontroladores.
 En esta parte se trata sobre los detalles de funcionamiento de un LCD de 2 líneas de
16 caracteres. Todos los displays de este tipo y que están disponibles en el mercado
son compatibles entre sí.
 El modelo descrito aquí es el más utilizado en la práctica por su bajo precio y grandes
capacidades. Está basado en el microcontrolador HD44780 (Hitachi).
MANEJO DEL DISPLAY LCD
 Está constituido por un circuito impreso en el que están integrados los controladores
del display y los pines para la conexión del display. Sobre el circuito impreso se
encuentra el LCD en sí, rodeado por una estructura metálica que lo protege.

 En total se pueden visualizar 2 líneas de 16 caracteres cada una, es decir, 2x16=32


caracteres

 A pesar de que el display sólo puede visualizar 16 caracteres por línea, puede almacenar en
total 40 por línea. Es el usuario el que especifica qué 16 caracteres son los que se van a
visualizar.
LOS CARACTERES DEL LCD
 El LCD dispone de una matriz de 5x8 puntos para representar cada carácter. En total se
pueden representar 256 caracteres diferentes. 240 caracteres están grabados dentro del
LCD y representan las letras mayúsculas, minúsculas, signos de puntuación, números, etc...

 Existen 8 caracteres que pueden ser definidos por el usuario


MEMORIAS DEL LCD

 El controlador HD44780 del módulo LM016L dispone de tres bloques de memoria:

 DDRAM (Display Data RAM - RAM de Datos de Visualización)

 CGRAM (Character Generator RAM - Generador de Caracteres RAM)

 CGROM (Character Generator ROM - Generador de Caracteres ROM)


DDRAM Display Data RAM (RAM de datos
de visualización)
 En esta memoria se almacenan los caracteres (códigos ASCII) que están siendo
visualizados o que se encuentran en posiciones no visibles.

 El módulo LCD almacena en esta memoria dos líneas de 40 caracteres (80 caracteres)
pero sólo se visualizan 2 líneas de 16 caracteres. Por ello la DDRAM tiene un tamaño
de 2x40=80 bytes.

 Debido a esta peculiar disposición de la DDRAM se puede pensar en el display como


un display virtual constituido por dos líneas de 40 caracteres cada una. La posición
situada más a la izquierda de cada línea es la posición 1 y la situada más a la derecha es
la posición 40.
DDRAM Display Data RAM (RAM de datos
de visualización)

 Para localizar los elementos dentro del display virtual se va a utilizar un par de
coordenadas (x,y) donde x representa la posición horizontal (comprendida entre 1-
40) e y representa la línea (1-2). El display real es una ventana en la que se visualizan
dos líneas de 16 caracteres (es lo que el usuario está viendo).

 Tal y como se encuentra configurado el display real en la figura de arriba, la posición


(14,1) se corresponde con la letra P, la posición (15,1) con la letra R, ....., y la posición
(29,1) con la letra N.
DDRAM Display Data RAM (RAM de datos
de visualización)
 Cuando se inicializa el LCD, el display real se sitúa en el extremo más izquierdo del
display virtual, que se corresponde con los valores de x comprendidos entre 1 y 16.

 En el ejemplo de la figura anterior, en la posición (2,1) se encuentra la letra E y en la


posición (16,1) la letra U.

 Los caracteres enviados al display pueden ser visibles si se encuentran en posiciones


que caen dentro del display real o pueden ser no visibles. En la figura anterior, las
posiciones (1,1)-(16,1) y (1,2)-(16,2) son visibles. Todos los caracteres enviados a esas
posiciones serán visibles. Si se envía un carácter a cualquiera de las otras posiciones no
será visible.
DDRAM Display Data RAM (RAM de datos
de visualización)

 El mapa de memoria de la DDRAM está constituido por dos bloques de 40 bytes.


 Así, las direcciones 00h-27h están asociadas a las posiciones (1,1)-(40,1) del display
virtual y las direcciones 40h-67h a las posiciones (1,2)-(40,2). En el ejemplo, en la
dirección 40h de la DDRAM se encuentra almacenado el carácter H, que se
corresponde con la posición (1,2) del display virtual.
CGRAM Character Generator RAM
(generador de caracteres RAM)
 La CGRAM es la memoria que contiene los caracteres definibles por el usuario. Está
formada por 64 posiciones, con direcciones 00h-3Fh. Cada posición es de 5 bits.
 La memoria está dividida en 8 bloques, correspondiendo cada bloque a un carácter
definible por el usuario. Por ello el usuario puede definir como máximo 8 caracteres,
cuyos códigos van del 0 al 7.

 Los registros de memoria (cada posición) son de 8 bits de anchura, pero sólo se
utilizan 5 bits más bajos.
CGRAM Character Generator RAM
(generador de caracteres RAM)

 Cada carácter está constituido por una matriz de 5 columnas x 8 filas. Para definir un
carácter y asignarlo por ejemplo en el código 0 habrá que almacenar en las posiciones
00h-07h los valores binarios de las 8 filas del carácter del usuario. Un bit con valor 1
representa un punto encendido. Un bit con valor 0 es un punto apagado.

 Una vez definido el nuevo carácter, cada vez que se envíe su código correspondiente al
display se visualizará.
CGRAM Character Generator RAM
(generador de caracteres RAM)

 En este ejemplo ‘carácter 0’ significa visualizar ‘sonrisa’, ‘carácter 1’ significa visualizar


‘ancla’, etc.
CGROM Character Generator ROM (generador de
caracteres ROM)
 La memoria CGROM contiene un mapa estándar de todos los caracteres que se
pueden visualizar en la pantalla. A cada carácter se le asigna una localidad de memoria.
CGROM Character Generator ROM
(generador de caracteres ROM)

 Las direcciones de las localidades de memoria CGROM corresponden a los caracteres


ASCII.

 Si el programa que se está actualmente corriendo en el microcontrolador ejecuta el


comando ‘enviar el carácter P al puerto’, el valor binario 0101 0000 aparecerá en el
puerto. Este valor es el equivalente ASCII del carácter P.

 Al escribir este valor en ciertos pines del LCD, se visualizará el símbolo de la localidad
0101 0000 de la CGROM. En otras palabras, se visualizará el carácter P.
DISTRIBUCIÓN Y CONEXIÓN DE PINES DEL LCD
ASIGNACIÓN DE PINES DEL LCD

 El contraste del visualizador depende del voltaje de alimentación y de si los mensajes


se visualizan en una o dos líneas. Por esta razón, el voltaje variable 0-Vdd se aplica al
pin marcado como Vee. Un potenciómetro se utiliza con frecuencia para este
propósito.

 Algunos de los visualizadores LCD tienen retroiluminación incorporada (diodos LED


azules o verdes). Al utilizarlo durante el funcionamiento, se debe de conectar una
resistencia en serie a uno de los pines para limitar la corriente (similar a diodos LED).

 Si no hay caracteres visualizados o si todos los caracteres están oscurecidos al


encender el visualizador, lo primero que se debe hacer es comprobar el
potenciómetro para ajustar el contraste. ¿Está ajustado apropiadamente? Lo mismo se
aplica si el modo de funcionamiento ha sido cambiado (escribir en una o en dos
líneas).
CONEXIÓN DEL LCD CON EL
MICROCONTROLADOR

 Los datos se transmiten por un bus de datos de 8 bits de anchura, aunque el LCD ofrece la
posibilidad de trabajar con este bus multiplexado mediante de 4 bits, pero esto se verá más
adelante.

 Para el control del display son necesarios 3 bits: una señal de enable (E), una para indicar
lectura/escritura (R/W) y otra para seleccionar uno de los dos registros internos (RS). Por
ello, en el peor de los casos, el sistema de control del LCD necesitará utilizar 8+3=11 bits.
BUS DE DATOS DE LCD

 El modo de LCD de 8 bits utiliza los pines D0-D7 para transmitir los datos.
 El propósito principal del modo de LCD de 4 bits es de ahorrar los valiosos pines de
E/S del microcontrolador. Sólo los 4 bits más altos (D4-D7) se utilizan para la
comunicación, mientras que los demás pueden quedarse desconectados. Cada dato se
envía al LCD en dos pasos: primero se envían los 4 bits más altos (normalmente por
las líneas D4- D7), y luego los 4 bits más bajos. A este proceso se lo conoce como
multiplexación.
 Con el modo de LCD de 4 bits se ahorran pines de E/S pero se gana en complejidad
en el microcontrolador, que tiene que multiplexar y demultiplexar los datos.
BUS DE CONTROL DE LCD
 El bus de control está formado por 3 señales: RS, R/W y E. La señal E es la señal de
validación de los datos. Cuando no se utiliza el display esta señal debe permanecer a 0.
Sólo en las transferencias de información (lecturas o escrituras) es cuando se pone a
nivel 1 para validar los datos, pasando después de un tiempo a nivel 0.

 La señal R/W permite seleccionar si la operación que se va a realizar sobre el display


es una lectura o una escritura. Cuando R/W=1 se realizan lecturas y cuando R/W=0
escrituras. Lo normal siempre es realizar escrituras, no obstante, el display ofrece la
posibilidad de poder leer los contenidos de la memoria CGRAM y DDRAM así como
leer el estado interno del display (ocupado o disponible) y el contador de direcciones..

 Con RS (Register Select) se selecciona el registro interno del display sobre el que se va
a leer/escribir. El LCD dispone de dos registros internos: registro de control y
registro de datos. Ambos registros son de lectura y escritura. RS=0 selecciona el
registro de control. RS=1 el registro de datos.
CONEXIÓN DEL LCD CON EL
MICROCONTROLADOR

 Pocas veces se leen los datos del LCD (por lo general se transmiten del
microcontrolador al LCD) así que, con frecuencia, es posible guardar un pin de E/S de
sobra. Es simple, basta con conectar el pin R/W a Tierra (R/W=0).
SECUENCIAS DE TEMPORIZACIÓN
 En la figura se representa el cronograma correspondiente a una operación de escritura
(para datos o comandos de control) para un bus de datos de 8 bits. Para controlar al
LCD los tiempos empleados deben ser siempre mayores que los mínimos indicados en
la figura.

 Para el caso de 4 bits, primero se envían los 4 bits MAS SIGNIFICATIVOS y después
los 4 bits menos significativos.
 Par enviar un comando de control se debe colocar RS=0 y para enviar un carácter
(dato) RS=1.
SECUENCIAS DE TEMPORIZACIÓN

Operaciones para escribir un carácter mediante un bus de datos de 8


bits:

1. La señal E se encuentra siempre en 0 antes de realizar cualquier


operación.
2. Poner RS = 1 y R/W = 0.
3. Situar los 8 bits del dato a imprimir en el bus de datos del LCD.
4. Realizar una pausa de 140 ns o un tiempo más prolongado.
5. Poner E = 1.
6. Realizar una pausa de 450 ns o un tiempo más prolongado.
7. Poner E = 0.
8. Realizar una pausa de 10 ns o un tiempo más prolongado.
9. El carácter ha sido impreso en el LCD.
10. Realizar una pausa de 40 us o superior, antes de imprimir otro carácter.
SECUENCIAS DE TEMPORIZACIÓN
Operaciones para escribir un carácter mediante un bus de datos de 4 bits:

1. La señal E se encuentra siempre en 0 antes de realizar cualquier operación.


2. Poner RS = 1 y R/W = 0.
3. Situar los 4 bits MSB del dato a imprimir en el bus de datos del LCD.
4. Realizar una pausa de 140 ns o un tiempo más prolongado.
5. Poner E = 1.
6. Realizar una pausa de 450 ns o un tiempo más prolongado.
7. Poner E = 0.
8. Realizar una pausa de 10 ns o un tiempo más prolongado.
9. Realizar una pausa de 1 us o superior, para poder enviar los 4 bits de datos
restantes.
10. Situar los 4 bits LSB del dato a imprimir en el bus de datos del LCD.
11. Realizar una pausa de 140 ns o un tiempo más prolongado.
12. Poner E = 1.
13. Realizar una pausa de 450 ns o un tiempo más prolongado.
14. Poner E = 0.
15. Realizar una pausa de 10 ns o un tiempo más prolongado.
16. El carácter ha sido impreso en el LCD.
17. Realizar una pausa de 40 us o superior, antes de imprimir otro carácter.
SECUENCIAS DE TEMPORIZACIÓN
 En la figura se muestran los cronogramas correspondientes a la escritura de un
carácter en el LCD. Se presenta el cronograma cuando se usa un bus de 8 bits y
cuando se usa un bus multiplexado de 4 bits. Se ha supuesto que el carácter enviado es
el 41h (La letra ‘A’).
COMANDOS DE CONTROL DEL LCD
 Todos los datos transmitidos a un visualizador LCD por las salidas D0-D7 serán
interpretados como un comando o un dato, lo que depende del estado lógico en el pin
RS:
 RS = 1: Los bits D0 - D7 son direcciones de los caracteres a visualizar. El
procesador LCD direcciona un carácter del mapa de caracteres y lo visualiza.
 RS = 0: Los bits D0 - D7 son los comandos para ajustar el modo del visualizador.

• Al LCD le lleva un cierto tiempo procesar cada comando enviado. Por ello, para que se
ejecute el comando especificado es necesario asegurarse de que el comando anterior
ha finalizado. Existen dos estrategias para realizar esto.

1. La primera se basa en leer el estado del bit Busy Flag (bit 7 del LCD), para ello se
lee el bus de dato con RS=0 y R/W= 1. Si este bit se encuentra a 1 quiere decir
que el LCD está ocupado procesando el comando anterior y por tanto no puede
procesar nuevos comandos. Hay que esperar a que el bit Busy Flag sea igual a 0,
para enviarle el siguiente comando.

2. La segunda estrategia, menos elegante pero más cómoda de implementar, consiste


en realizar una pausa antes de volver a enviar el siguiente comando. Los tiempos
máximos que tarda el LCD en procesar los comandos están especificados por el
fabricante y tienen un valor típico de 40 µs. Si se realiza una pausa mayor o igual a
esta se tiene garantía de que el LCD ha terminado de ejecutar el comando.
DESCRIPCIÓN DE COMANDOS
 BORRAR EL VISUALIZADOR
 Este comando borra todas las posiciones del display virtual y sitúa el display real en
la posición inicial, en la que se visualizan las posiciones desde la (1,1) hasta la (16,1)
y desde la (1,2) hasta la (16,2). El cursor se sitúa en la posición (1,1) (dirección 0 de
la DDRAM). Pone el bit I/D a "1" por defecto para auto incremento de la posición
del cursor.

 PONER EL CURSOR AL INICIO


 Envía el cursor a la posición (1,1). El display real se sitúa en la posición inicial, es
decir que coloca el cursor en la posición de inicio (dirección 0 de la memoria
DDRAM) y hace que el display comience a desplazarse desde la posición original. El
contenido de la memoria RAM de datos de visualización (DDRAM) permanece
invariable.
DESCRIPCIÓN DE COMANDOS
 MODO DE ENTRADA

 Actualiza el contador de direcciones en la forma especificada y establece si el


display realiza desplazamientos o no. Estas acciones se llevan a cabo cada vez que se
realiza una lectura o escritura en el display.
 Cuando I/D=1, el contador de direcciones se incrementa, lo que provoca que el
cursor avance hacia la derecha cada vez que se imprime un carácter en el display.
Cuando I/D=0 el contador se decrementa y el cursor se mueve hacia la izquierda al
imprimir.
 Con S=1 se indica al LCD que debe mover el display real una posición a la derecha
cada vez que se imprime un carácter. Con S=0 el display debe permanecer ‘quieto’
al imprimir. (Normalmente se utiliza I/D=1 y S=0, por lo que el comando típico
es 0x06)
DESCRIPCIÓN DE COMANDOS

 ACTIVAR/DESACTIVAR EL VISUALIZADOR
 Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor (C) y
se establece si este último debe o no parpadear (B).

 Display ON/OFF: D=1 activa el LCD. Cuando D=0 el LCD funciona normalmente
pero no se visualiza ninguna información. Es posible realizar impresiones, enviar
comandos, pero nada quedará reflejado en pantalla. Sólo cuando D=1 se puede ver
algo en el display.

 Cursor ON/OFF: C=1 activa el cursor. Con C=0 el cursor no se ve.

 Parpadeo ON/OFF: B=1 hace que los caracteres situados en la posición del
cursor parpadeen. Con B=0 no hay parpadeo.
DESCRIPCIÓN DE COMANDOS
 DESPLAZAR EL CURSOR/VISUALIZADOR
 Mueve el cursor y desplaza el display real sin cambiar el contenido de la memoria
de datos de visualización DDRAM.

 Con S/C=1 se mueve el display, con S/C=0 el cursor. R/L=1 desplaza a la derecha y
R/L=0 a la izquierda.

 MODO DE FUNCIONAMIENTO
 Establece el tamaño de la interfaz del bus de datos (DL), número de líneas del
display (N) y tipo de carácter (F).

 D L= “1” Trabaja en bus de 8 bits, si = “0” bus de 4 bits


 N = “1” Presentación en 2 líneas, si = “0” se una línea
 F = “1” caracteres de 5x10 pixel, si = “0” 5x7
SECUENCIA DE INICIALIZACIÓN DEL LCD

 Tras haber energizado el módulo LCD, éste debe ser inicializado para establecer
el protocolo de comunicación necesario y para que opere correctamente. Esta
operación se puede realizar de dos formas: por circuito interno o por software.
 Los LCDs tienen un circuito interno de reset que los inicializa automáticamente
tras alimentarlos.
 Este circuito ejecuta automáticamente una secuencia de inicio interna en el
instante de aplicarle la tensión de alimentación si se cumplen los requisitos de
alimentación expuestos en el siguiente cronograma.

 Dichos requisitos consisten en que el tiempo que tarde en estabilizarse la tensión


desde 0.2 V hasta los 4.5V sea entre 0.1 ms y 10 ms. Igualmente el tiempo de
desconexión debe ser como mínimo de 1 ms antes de volverlo a conectar.
SECUENCIA DE INICIALIZACIÓN DEL LCD
 Lo cierto es que la autoinicialización no siempre es fiable. Por eso existe la
inicialización por software, que permite una completa configuración de los
parámetros del LCD.
 Se constituye de una serie de pasos para enviar ciertos comandos y que varían de
acuerdo con la interfaz de 4 u 8 bits a usar. En la figura se muestra un diagrama de flujo
que corresponde a la inicialización del LCD para una interfaz de 4 bits.

 Para establecer la inicialización para una interfaz de 8 bits hay que obviar los pasos 9 y
10. Los bits menos significativos DB0-DB3 no se emplean en este proceso de
inicialización.
SECUENCIA DE CONFIGURACIÓN DEL LCD

 Una vez que se haya completado la inicialización tras el encendido del LCD, ya se tiene
ahora establecida la interfaz de datos de 4 u 8 bits. El siguiente paso es realizar una
secuencia típica de configuración del LCD mediante los comandos de control
mostrados en el diagrama de flujo de la siguiente figura .
MANEJO DEL DISPLAY LCD - EJEMPLO
 Ejemplo 8: Realizar un programa que permita visualizar el mensaje “HOLA MUNDO
MICRO” en la pantalla del LCD de 2x16, mediante un bus de datos de 8 bits. Realizar
las funciones necesarias para realizar la secuencia de inicialización, secuencia de
configuración, escribir datos (caracteres) y comandos de control, localizar el cursor en
la posición requerida e imprimir el mensaje. Utilizar los pines del puerto B para enviar
los datos hacia los pines D0-D7 del módulo LCD, el pin C0 para la señal RS y el pin C1
para la señal E.
MANEJO DEL DISPLAY LCD - EJEMPLO

 Solución Ejemplo 8:
MANEJO DEL DISPLAY LCD - EJEMPLO

 Solución Ejemplo 8:
MANEJO DEL DISPLAY LCD - EJEMPLO

 Solución Ejemplo 8:
MANEJO DEL DISPLAY LCD - EJEMPLO

 Solución Ejemplo 8:

 Ejercicio: Realizar la misma actividad solicitada en el ejemplo 8 pero con un bus datos
multiplexado de 4 bits. Utilizar los 4 pines MSB del puerto D para enviar los datos
hacia los pines D4-D7 del módulo LCD, el pin B0 para la señal RS y el pin B1 para la
señal E.
MANEJO DEL DISPLAY LCD CON CCS C
MANEJO DEL DISPLAY LCD CON CCS C
MANEJO DEL DISPLAY LCD CON CCS C

 El driver lcd.c está pensando para trabajar con cualquier puerto de un microcontrolador. Ya
sea usando los pines de un mismo puerto o alguna combinación de ellos con pines de otros
puertos. Por defecto, utiliza el PORTD a menos que se le indique lo contrario.
 Por defecto, este driver usa siete terminales para la comunicación entre el módulo LCD y el
PIC. A continuación se indican las conexiones del LCD con el puerto D:
D0  Enable
D1  RS
D2  RW
D4  D4
D5  D5
D6  D6
D7  D7
MANEJO DEL DISPLAY LCD CON CCS C
 Se puede trabajar con otros puertos, modificando el fichero lcd.c. En la siguiente figura
se muestra parte del fichero lcd.c donde se definen los pines de los puertos que van
hacer modificados y utilizados para hacer funcionar el módulo LCD.

 Para definir los nuevos pines se deben descomentar las líneas 51 a la 57 y en la


etiqueta PIN_x colocar los nombres de los nuevos terminales a utilizar. Por ejemplo en
la figura anterior se utilizan los tres pines del puerto E para el bus de control y los 4
pines MSB del puerto D para el bus de datos.
 También se pueden poner estas líneas antes de la directiva #include <lcd.c> del
programa principal, sin tener que modificar (descomentar) el fichero driver, y así evitar
realizar posibles cambios al driver lcd.c original que se instala por defecto.
MANEJO DEL DISPLAY LCD CON CCS C - EJEMPLO

 Ejemplo 9: Realizar un programa que permita visualizar el mensaje “HOLA MUNDO


MICRO” en la pantalla del LCD de 2x16, mediante un bus de datos multiplexado de 4
bits. Utilizar las funciones disponibles en el driver lcd.c. Realizar las conexiones del
módulo LCD con los pines del PIC que vienen definidos por defecto en el driver lcd.c.
MANEJO DEL DISPLAY LCD CON CCS C - EJEMPLO

 Solución Ejemplo 9:
MANEJO DEL DISPLAY LCD CON CCS C - EJEMPLO

 Ejemplo 10: Realizar un menú de control mediante un pulsador. El programa debe


mostrar un menú de 3 funciones (MEDIR, CALIBRAR e INICIALIZAR). Mediante un
pulsador se debe seleccionar uno de los 3 elementos y con otro ejecutar la función
(en este caso encender un led). Utilizar las funciones disponibles en el driver lcd.c.
Utilizar los 4 pines MSB del puerto B para enviar los datos hacia los pines D4-D7 del
módulo LCD, el pin B0 para la señal RS, el pin B1 para la señal R/W y el pin B2 para la
señal E.
MANEJO DEL DISPLAY LCD CON CCS C - EJEMPLO

 Solución Ejemplo 10:


MANEJO DEL DISPLAY LCD CON CCS C - EJEMPLO

 Solución Ejemplo 10:


MANEJO DEL DISPLAY LCD CON CCS C - EJEMPLO

 Solución Ejemplo 10:


MANEJO DEL DISPLAY LCD CON CCS C - EJEMPLO

 Ejercicio: Realizar un programa que permita visualizar sobre la pantalla del LCD de
2x16 el mensaje “MICRO PIC16F877A”. El mensaje debe empezar a visualizarse desde
la posición (1,1) con la letra A e ir avanzando hacia la derecha hasta llegar a la posición
(1,16), en ese instante las letras irán desapareciendo por el lado derecho y volverán a
reaparecer por el lado izquierdo de la segunda línea hasta llegar a la posición (2,16)
cuando esto ocurra el proceso se volverá a repetir indefinidamente empezando desde
la posición (1,1). Utilizar las funciones disponibles en el driver lcd.c y realizar las
conexiones del módulo LCD con los pines del PIC que vienen definidos por defecto
en este driver.
MANEJO DE TECLADOS MATRICIALES
 Las aplicaciones con microcontroladores, requieren en algunos casos el uso de teclas
de entrada de datos numéricos, funciones e incluso caracteres de texto.

 La opción de mayor practicidad es el uso de teclados matriciales, estos consisten en un


arreglo de pulsadores alineados en filas y columnas, minimizando el número de
conexiones eléctricas.
MANEJO DE TECLADOS MATRICIALES
 Un teclado matricial está compuesto por teclas interconectadas formando una matriz.
Las teclas son simples interruptores mecánicos y cada uno ocupa la intersección de
una fila con una columna.
 Cuando se pulsa una tecla, se ponen en contacto eléctrico la fila y la columna donde
está dicha tecla. Las filas y columnas de esta matriz se pueden conectar a los
terminales de uno o más puertos paralelos del PIC.
MANEJO DE TECLADOS MATRICIALES

 Para explorar un teclado matricial se envían señales hacia las filas de la matriz
por las líneas de exploración y se recoge información por las columnas, que
entonces constituyen las líneas de retorno.

 Básicamente se parte de que si no hay ninguna tecla pulsada, todas las líneas
de retorno están en el nivel lógico “1”. Las líneas de exploración son puestas
(sucesiva o simultáneamente) a “0”. Este valor lógico sólo aparece en la línea
de retorno donde está la tecla pulsada, mientras que las restantes líneas de
retorno mantienen el valor “1”.

 Con la información enviada hacia la matriz y la que retorna, se conforma un


código único para cada tecla, llamado código de exploración.

 Para garantizar que las líneas de retorno permanezcan en “1” si no hay tecla
pulsada, se conectan resistencias entre cada línea de retorno y la tensión de
alimentación (VDD).
MANEJO DE TECLADOS MATRICIALES

 El mecanismo empleado para atender a los teclados matriciales tiene los


siguientes pasos:

Paso 1: Esperar la liberación del teclado (debido al pulsado de la tecla


anterior a la actual).

Paso 2: Detectar que hay una nueva tecla pulsada.

Paso 3: Si se detecta que ha pulsado una tecla, se debe esperar un tiempo


prudencial para que termine el rebote (acción denominada debounce). Una
espera de unos 20 ms suele ser suficiente.

Paso 4: Se explora la matriz del teclado para determinar cuál es la tecla


que ha sido pulsada. En este paso se genera el código de exploración que
identifica la tecla pulsada, que contiene básicamente los números de la fila y
la columna que ocupa la tecla en la matriz.
MÉTODO DE EXPLORACIÓN SECUENCIAL
DE LAS FILAS

1. Se envía un “0” hacia la primera fila y se leen todas las columnas. Si la lectura
no contiene ningún “0” (todas las columnas están en “1”), la tecla pulsada no
está en esa fila.
2. Entonces se envía el “0” a la siguiente fila y se leen todas las columnas.
3. Se repite el proceso con las siguientes filas hasta encontrar algún “0” en la
lectura de las columnas.
4. Se conoce entonces en qué fila y columna está la tecla pulsada y con esto se
puede conformar un código de exploración para la tecla.
MÉTODO DE EXPLORACIÓN SIMULTÁNEA
DE FILAS Y COLUMNAS

1. Se envía un “0” a todas las filas simultáneamente y se leen todas las


columnas, con lo que se detecta en qué columna está la tecla pulsada “0”.
2. A continuación se invierte el proceso: se envía simultáneamente un “0” a
todas las columnas y se leen todas las filas, detectándose así la fila en que
está la tecla pulsada.
3. Conociendo en qué fila y columna está la tecla pulsada, se puede conformar
un código de exploración para la tecla.
VENTAJAS Y DESVENTAJAS DE AMBOS
MÉTODOS DE EXPLORACIÓN

 El método de exploración simultánea de filas y columnas tiene la ventaja de


que permite la exploración rápida del teclado en sólo dos pasos, pero
requiere que las líneas de exploración y retorno sean bidireccionales (aunque
esto no es problema en los microcontroladores PIC).

 El método de exploración secuencial es en general más lento, pues el tiempo


que demora detectar la pulsación de una tecla depende de su posición en la
matriz, pero en cambio las líneas de exploración y retorno pueden ser
unidireccionales.

 Nota: Existen otras formas de controlar y hacer funcionar a los teclados


matriciales, tanto en las conexiones eléctricas con el microcontrolador y por
tanto la lógica de programación implementada en el software de
programación. Las conexiones electrónicas y métodos implementados en
este documento son los más empleados.
MÉTODO DE EXPLORACIÓN SECUENCIAL DE LAS
FILAS - PROGRAMACIÓN
 Ejemplo 11: Realizar un programa que permita visualizar en la pantalla de un LCD de 2x16
las teclas presionadas en un teclado matricial de 3X4 mediante una exploración secuencial
de las filas. Realizar las conexiones del módulo LCD, del teclado matricial y el PIC según se
muestra en la figura. Utilizar en la programación las funciones disponibles en el driver lcd.c.
MÉTODO DE EXPLORACIÓN SECUENCIAL DE LAS
FILAS - PROGRAMACIÓN
Solución 1 Ejemplo 11:
MÉTODO DE EXPLORACIÓN SECUENCIAL DE LAS
FILAS - PROGRAMACIÓN
MÉTODO DE EXPLORACIÓN SECUENCIAL DE LAS
FILAS - PROGRAMACIÓN
MÉTODO DE EXPLORACIÓN SECUENCIAL DE LAS
FILAS - PROGRAMACIÓN
Solución 2 Ejemplo 11:
MÉTODO DE EXPLORACIÓN SECUENCIAL DE LAS
FILAS - PROGRAMACIÓN
MÉTODO DE EXPLORACIÓN SECUENCIAL DE LAS
FILAS - PROGRAMACIÓN

 Ejercicio: Realizar la misma actividad solicitada en el ejemplo 11 pero mediante una


exploración simultánea de las filas y columnas del teclado matricial. Además se debe
utilizar los 8 terminales del puerto D.
TECLADO MATRICIAL CONECTADO AL PUERTO B
DE UN PIC

 Se observa en la figura que no se han utilizado las resistencias externas en las líneas de
retorno, porque las líneas del puerto B tienen un pull-up activo interno que hace la
función de esas resistencias, garantizando que en las líneas de retorno haya un “1” si
no hay ninguna tecla pulsada.
TECLADO MATRICIAL CONECTADO AL
PUERTO B DE UN PIC

 Si se compara esta conexión con la secuencia del Método por Exploración


Simultánea de Filas y Columnas, se observa que los pines RB4 al RB7 funcionan
como líneas de exploración y la otra mitad (RB0-RB3) como líneas de retorno.

 Las filas del teclado matricial se conectan a los bits más significativos del Puerto B,
mientras que las columnas se conectan a los bits menos significativos del mismo
puerto.

 Las resistencias de 330 Ω en serie con las filas tienen como misión evitar
cortocircuitos entre las líneas de la parte baja y alta del puerto B cuando el
microcontrolador utilice estas líneas para funciones distintas de la exploración del
teclado.

 Ejercicio: Realizar la misma actividad solicitada en el ejemplo 11 pero mediante una


exploración simultánea de las filas y columnas de un teclado matricial de 4x4. Utilizar
los pines del puerto B para conectar el teclado matricial y hacer uso de las resistencias
pull-up.
MANEJO DE TECLADO MATRICIAL CON CCS C
MANEJO DE TECLADO MATRICIAL CON CCS C
MANEJO DE TECLADO MATRICIAL CON CCS C
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO
 Ejemplo 12: Introducir datos por el teclado y visualizarlos en el LCD. Cuando se
pulsa la tecla “*” se borra la pantalla del LCD. Mostrar el valor del carácter, el valor
ASCII y el valor numérico. Realizar las conexiones del módulo LCD, del teclado
matricial y el PIC según se muestra en la figura. Utilizar en la programación las
funciones disponibles en los drivers lcd.c y el kbd.c.
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO
Solución Ejemplo 12:
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO
MODIFICACIÓN DE LA LIBRERÍA KBD.C PARA MANEJAR
UN TECLADO MATRICIAL DE 4X4
 Para manejar un teclado matricial de 4x4 haciendo uso del driver KBD.C se debe
añadir o modificar las siguientes líneas de código:
MODIFICACIÓN DE LA LIBRERÍA KBD.C PARA MANEJAR
UN TECLADO MATRICIAL DE 4X4
 Para manejar un teclado matricial de 4x4 haciendo uso del driver KBD.C se debe
añadir o modificar las siguientes líneas de código:
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO
 Ejercicio: Realizar un programa que permita visualizar en la pantalla de un LCD de
2x16 las teclas presionadas en un teclado matricial de 4X4 utilizando y modificando el
driver KBD.C. Realizar las conexiones del módulo LCD, del teclado matricial y el PIC
según se muestra en la figura. Utilizar en la programación las funciones disponibles en
el driver lcd.c.

 Nota: No modifique directamente el driver KBD.C, cree un nuevo archivo (KBD_4X4.C)


donde debe copiar las líneas de código del driver y realizar las respectivas modificaciones.
Además añada al circuito anterior un display de 7 segmentos para visualizar la teclas.
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO

 Ejercicio: Realizar un programa que permita realizar las operaciones básicas de una
calculadora (suma, resta, multiplicación y división) empleando los elementos y los
circuitos que se muestran en la figura. Tomar como referencia el funcionamiento de la
calculadora que viene en el sistema operativo Windows. Mostrar las operaciones y
resultados de la misma forma que se muestra en la pantalla de esta calculadora.
Manejo de la memoria EEPROM interna del PIC16F877A

 El PIC16F877A tiene 256 bytes de memoria EEPROM de datos (memoria no volátil)


con un rango de direcciones de 00h a FFh, donde se pueden almacenar datos y
variables que interesa que no se pierdan cuando se desconecta la alimentación al
sistema.
 La memoria EEPROM no está mapeada en la zona de memoria de datos donde se
ubican los registros SFR y GPR. Para poder leerla y escribirla durante el
funcionamiento normal del microcontrolador hay que utilizar cuatro registros del
banco SFR:

Registro Función

Ubicado en la dirección 10Dh del banco 3, en él se carga la


EEADR
dirección (8 bits) a acceder de la EEPROM de datos.

Ubicado en la dirección 10Ch del banco 3, en él se depositan los


EEDATA
datos que se leen o se escriben.

Ocupa la dirección 18Ch del banco 4, tiene misiones de control en


EECON1
las operaciones de la EEPROM.

Ocupa la dirección 18Dh del banco 4, se emplea como un


EECON2 dispositivo de seguridad durante el proceso de escritura de la
EEPROM.
Proceso de Lectura de la memoria EEPROM

 El procedimiento para leer un dato almacenado en la memoria EEPROM de datos es el


siguiente:
1. Colocar la dirección de la celda de memoria en el registro EEADR.

2. Poner el bit EEPGD del registro EECON1 a 0, para indicar que se accederá a la
memoria EEPROM de datos y no a la memoria FLASH de programa.

3. Poner el bit RD del registro EECON1 a 1. Con esto se inicia la lectura. El dato
estará disponible en el registro EEDATA en el siguiente ciclo de instrucción.

4. Al completarse la operación de lectura, el bit RD se pone automáticamente a 0.


Además, el bit EEIF del registro PIR2 se pone a 1, indicando el fin de la operación
de lectura.
Proceso de Escritura de la memoria EEPROM

 La duración típica de un ciclo de escritura es de 10 ms, que es notablemente larga


en comparación con la velocidad del PIC. Para escribir sobre una posición de la
EEPROM de datos, el usuario debe seguir la siguiente secuencia de instrucciones
en las que participa el registro EECON2:

1. Cargar en el registro EEADR la dirección de la posición a escribir.

2. Cargar el dato a ser grabado sobre el registro EEDATA.

3. Poner el bit EEPGD del registro EECON1 a 0, para indicar que se accederá
a la memoria EEPROM de datos y no a la memoria FLASH de programa.

4. Poner el bit WREN del registro EECON1 a 1, con lo cual se consigue


habilitar el proceso de escritura.

5. Cargar sobre el registro EECON2 primero el valor de 55h y luego el valor


de AAh, que corresponde a la secuencia de inicio del para escritura.
Proceso de Escritura de la memoria EEPROM

6. Poner el bit WR del registro EECON1 a 1. Con esto se inicia la escritura.

7. Al completarse la operación de escritura, el bit WR se pone automáticamente a


0. Además, el bit EEIF del registro PIR2 se pone a 1, indicando el fin de la
operación de escritura.
Funciones del Compilador C para manejar la
memoria EEPROM
 read_eeprom (address)
Esta función lee un byte de la dirección (address) de EEPROM especificada. Para el
PIC16F877A la dirección puede ser de 0 a 255.
valor = read_eeprom(10); //Lee el dato almacenado en la posición 10

 write_eeprom (address, value)


Esta función borra y escribe un byte de datos en la dirección de memoria EEPROM
especificada. Para el PIC16F877A la dirección (address) puede ser de 0 a 255; value
es una constante o variable a escribir en la EEPROM. Esta función puede tardar
varios milisegundos para ejecutarse.

#define ULTIMO_VALOR 10 //Ubicación en la EEPROM


valor++;
write_eeprom (ULTIMO_VALOR , valor);

 erase_eeprom (address)
Esta función borra el dato almacenado en la dirección (address) de EEPROM
especificada. Para el PIC16F877A la dirección puede ser de 0 a 255.
erase_eeprom(0); // borra la primera fila de la memoria EEPROM (8 bytes)
Funciones del Compilador C para manejar la
memoria EEPROM

 #rom address = {data1, data2, … , datan}

Esta directiva permite la inserción de datos en el archivo .HEX de la memoria de


programa. En particular, se puede usar para programar (inicializar) la EEPROM de
datos del PIC.
address es una palabra de dirección de la ROM y es diferente para diferentes gamas
de PICs. Para el PIC16F877A esta dirección es la 0x2100; data1, data2, … , datan es
una lista de palabras separadas por comas.

#rom 0x2100 = {1, 2, 3, 4, 5, 6, 7, 8}


En este ejemplo se asignan (almacenan) los valores que se encuentran dentro de los
corchetes { }, a las posiciones 0, 1, 2, 3, 4, 5, 6 y 7 de la EEPROM.

#rom 0x2100 = {"hello"}


Almacena una cadena de caracteres en la memoria EEPROM. Cada carácter se
guarda en un posición de memoria empezando de la posición 0 a la posición 5.
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO
 Ejemplo 13: Diseñar un sistema básico para el control de accesos; a través de un teclado de
4X4 introducir una clave de 3 dígitos que cuando sea correcta abra una puerta (con un pulso
a un relé) y lo indique en una pantalla LCD. Guardar la clave de acceso en la memoria
EEPROM. Realizar las conexiones del módulo LCD, del teclado matricial y el PIC según se
muestra en la figura. Utilizar en la programación las funciones disponibles en los drivers lcd.c y
modificar el driver kbd.c según corresponda.
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO
Solución Ejemplo 13:
MANEJO DE TECLADO MATRICIAL CON CCS C +
EJEMPLO

 Ejercicio: Modificar el programa anterior para que permita al usuario realizar un


cambio de clave de acceso (de 4 dígitos) cuando se ha presionado la tecla “#”.

También podría gustarte