PDF de programación - Capitulo III. Pantalla LCD Hitachi 44780

Imágen de pdf Capitulo III. Pantalla LCD Hitachi 44780

Capitulo III. Pantalla LCD Hitachi 44780gráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 22 de Noviembre del 2017)
937 visualizaciones desde el 22 de Noviembre del 2017
2,3 MB
28 paginas
Creado hace 4a (11/12/2015)
Capitulo III.

Pantalla LCD Hitachi 44780.
Si bien para visualizar datos los dígitos de siete segmentos son muy usados y útiles las pantallas
LCD como la clásica Hitachi 44780 que brinda una solución elegante y de bajo costo.

Básicamente podemos imaginar una pantalla LCD como una memoria de 40 caracteres de los cuales
solo 16 son visibles (pantallas 16x2).

Estas pantallas se pueden manejar en 8 o 4 bit's. En este manual usaremos el enfoque de 4 bit's ya
que esta modalidad nos libera mas pines en el puerto de la Raspberry PI.

El manejo de un LCD, no es nada del otro
mundo si comprendemos la arquitectura de
un modulo LCD.

Los módulos LCD, llevan integrado a sus
circuitos, 3 regiones de memorias que serán
la base fundamental para el funcionamiento
del modulo.
Por un lado, tenemos dos regiones donde se
albergan datos temporales con características RAM. Estas dos regiones, son las llamadas CGRAM y
DDRAM, que son en si los espacios donde se almacenan los datos que se van a mostrar en pantalla.
La diferencia entre una y otra, es que la CGRAM (Character Generator RAM), nos permite definir y

Electrónica Digital con RaspberryPI



Pagina 54 de 81

alojar 8 nuevos caracteres personalizados. En la CGRAM, es donde se alojan los caracteres creados
por el usuario con matrices personalizadas, y la DDRAM (Data Display RAM), es un espacio
temporal donde se almacenan los caracteres que se van a mostrar en pantalla.
La DDRAM, tiene una capacidad de 80 bytes, 40 por cada línea, de los cuales sólo 32 se pueden
visualizar a la vez (16 bytes por línea).
Las dos direcciones más importantes de la DDRAM son:

• Dirección 0x00, que es el comienzo de la primera línea.
• Dirección 0x40, que es el comienzo de la segunda línea.

Por otro lado, tenemos un espacio de memoria interna no volátil del tipo ROM, llamada CGROM
(Character Generator ROM), que es donde se almacena una tabla con los 192 caracteres que pueden
ser visualizados (ver el siguiente cuadro).

Cada uno de los caracteres tiene su representación binaria de 8 bits. Para visualizar un carácter debe
recibir por el bus de datos el código correspondiente. El módulo LCD además de tener definidos
todo el conjunto de caracteres ASCII, permite al usuario definir 4 u 8 caracteres gráficos. La
composición de estos caracteres se va guardando en una memoria llamada CGRAM con capacidad

Electrónica Digital con RaspberryPI



Pagina 55 de 81

para 64 bytes. Cada carácter gráfico definido por el usuario se compone de 16 u 8 bytes que se
almacenan en sucesivas posiciones de la CGRAM.
Se debe establecer la dirección en la memoria CGRAM a partir de la cual se irán almacenando los
bytes que definen un carácter gráfico.
Para la creación de caracteres gráficos hagamos un poco de memoria. Cuando enviamos el código
de un carácter alfanumérico a la DDRAM del LCD, su chip interno buscará en la CGROM el patrón
correspondiente y luego lo visualizará en la pantalla. Así se escriben todos los textos.
Ahora bien, si el código enviado vale entre 0x00 y 0x07 (o 0x08 y 0x0F), el chip interno buscará su
patrón de visualización en la CGRAM. Siendo ésta una RAM de lectura/escritura, podemos
programar en ella los diseños que se nos ocurran.

La CGRAM (Character Generator RAM) consta de 64 bytes en los que se pueden escribir los
patrones de 8 nuevos caracteres de 5×7 puntos ó 4 caracteres de 5×10 puntos.

Cuando los caracteres son de 5×7 puntos los 64 bytes se dividen en 8 bloques de 8 bytes cada uno, y
cada bloque almacena el patrón de un nuevo carácter. El esquema mostrado arriba indica que:
• El primer bloque de CGRAM, con direcciones desde 0b00000000 hasta 0b00000111,

corresponde al código 0x00 (ó 0x80) de la DDRAM.

• El segundo bloque CGRAM, con direcciones desde 0b00001000 hasta 0b00001111,

corresponde al código 0x01 (ó 0x88) de la DDRAM; y así sucesivamente.

Por ejemplo, la figura de arriba indica que se han rellenado los dos primeros bloques con los

Electrónica Digital con RaspberryPI



Pagina 56 de 81

patrones de dos pacmans. Hasta ahí solo se han creado dos nuevos caracteres. Para mostrarlos en el
LCD habría que escribir un código con las funciones adecuadas para esto.

Es importante dejar claro que los caracteres creados por el usuario se contienen en RAM por lo
tanto cuando el LCD pierda su alimentación el carácter se perderá, esto implica que el código
dentro del controlador debe contemplar la creación del carácter cada vez que el LCD arranque
consumiendo en esto memoria de programa.

Para el manejo de estas pantallas contamos con una librería que trabaja conjuntamente con WiringPi
y siempre antes de usar comando para el LCD se debe haber ejecutado la función wiringPiSetup() y
luego la función

lcdInit(2, 16, 4, RS, EN, D0, D1, D2, D3, D0, D1, D2, D3);

Donde 2 es la cantidad de líneas, 16 los caracteres visibles y el resto son los pines de acuerdo a la
definición.

const int RS = 3;
GPIO_3
const int EN = 14; GPIO_14
GPIO_4
const int D0 = 4;
const int D1 = 12;
GPIO_12
GPIO_13
const int D2 = 13;
const int D3 = 6;
GPIO_6

Pines usados por el LCD.

La función lcdPosition(lcdFD,0,1) indica donde estará l cursor, en este caso primera columna de la
segunda fila (primer casillero-caracter de la segunda línea). La librería para el manejo de la pantalla
consiste en dos archivos lcd.c y lcd.h que siempre estarán formando parte de los proyectos en que
usemos la pantalla LCD.

Distribución de pines en la pantalla Hitachi 44780.

El pin R / W (pin 5) en la pantalla LCD debe estar conectado a 0V (GND), esto es muy importante
si utiliza una pantalla de 5V, si conecta este pin a Raspberry destruirá el puerto. Esto es porque la
pantalla intentará escribir en la Raspberry enviando niveles lógicos de 5V a un puerto que solo
admite 3V.
Veamos un pequeño código en C que verifica el funcionamiento de la pantalla.
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#include <wiringPi.h>

Electrónica Digital con RaspberryPI



Pagina 57 de 81

#include "lcd.h"
#include <errno.h>

const int RS = 3;
const int EN = 14;
const int D0 = 4;
const int D1 = 12;
const int D2 = 13;
const int D3 = 6;

int main(){
if (wiringPiSetup() < 0){
fprintf (stderr, "No puedo configurar el dispositivo %s\n", strerror
(errno)) ;
return 1 ;
}

int lcdFD;
lcdFD = lcdInit(2, 16, 4, RS, EN, D0, D1, D2, D3, D0, D1, D2, D3);
lcdPosition(lcdFD,2 ,0);
lcdPrintf(lcdFD,"RaspBerry PI");
lcdPosition(lcdFD,0,1);
lcdPrintf(lcdFD, "Firtec Argentina");
return 0;

}

Conversión Analógica Digital.
En muchos proyectos tenemos que tratar con las señales o información del mundo analógico, como
la temperatura, presión, corriente, etc .
Estas señales son analógicas de forma predeterminada y en la mayoría de los casos se utilizan
sensores que convierten estas señales a analógico de tensión eléctrica que será presentada en un pin
del microcontrolador para hacer algún trabajo.
Por desgracia, los microcontroladores son digitales y no pueden hacer frente a las señales
analógicas por lo que estas señales deben ser convertidas en señales digitales que sean
comprensibles por el núcleo del microcontrolador.
Para este propósito, los fabricantes de microcontroladores suelen incorporar estos módulos en los
microcontroladores sin embargo los chips Broadcom de Raspberry no lo tienen por lo que será
necesario conectarlos como periféricos y vincularlos a Raspberry a través de un bus o línea de
comunicaciones.
Básicamente digitalizar algo es simplemente convertirlo a una secuencia de números de tal forma
que si hacemos el proceso inverso de leer esos números podemos reconstruir la información
original.

Electrónica Digital con RaspberryPI



Pagina 58 de 81

El valor analógico a digitalizar puede ser cualquiera pero los números que se puede tratar en el
conversor tienen valores finitos que dependen de la precisión del conversor A/D.
La operación de digitalización nos devuelve una secuencia de números que si usamos un
convertidor de 12 bits serian entre 0 y 4095.
En la mayoría de los conversores analógico-digitales hay dos operaciones se cumplen de forma
separada.

Sample y Hold convierte la señal en una señal que sigue siendo analógica, pero tiene valores sólo en
instantes de tiempo discretos (muestreo y retención ). El ADC convierte la serie de muestras en
números (conversor analógico a digital ).

Electrónica Digital con RaspberryPI



Pagina 59 de 81

Conversor A/D MCP3201.
Como ejemplo vamos a implementar el conversor analógico digital MCP3201 fabricado por la
empresa Microchip.
Este conversor tiene una resolución de 12 bits pudiendo generar 4096 números por cada medición.

Puede ser alimentado de 2.7 a 5V por lo que cubre perfectamente el rango de voltajes que nos
interesa (3V) para Raspberry.
El MCP3201 cuenta con un registro de aproximación sucesiva (SAR) y una interface serial SPI, lo
que permite la capacidad de añadir un ADC de 12bits a cualquier Microcontrolador que implemente
el protocolo de comunicaciones SPI. Algunas características del MCP3201 son la capacidad de
tomar 100k muestras/segundos, posee un canal de entrada, muy bajo consumo de energía (5nA en
standby, 400uA máximo en estado activo) y esta disponible en encapsulado de 8 pines PDIP, SOIC
y TSSOP.
Algunas de las aplicaciones donde puede incluirse el MCP3201 son adquisición de datos,
instrumentos de medición, procesadores de datos, mediciones industriales, control de motores,
robótica, automatismos industriales, pequeños
  • Links de descarga
http://lwp-l.com/pdf7642

Comentarios de: Capitulo III. Pantalla LCD Hitachi 44780 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad