Manejo de Perifericos
Manejo de Perifericos
Manejo de Perifericos
PIC16F877A
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 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
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
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.
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
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.
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
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.
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...
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.
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).
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)
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
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.
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
• 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.
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.
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).
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.
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.
Solución Ejemplo 9:
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.
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”.
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
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
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
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 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
Registro Función
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.
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.
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