Colegio Industrial N° 4 | Tecnicatura en Electrónica
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
GLCD
INTRODUCCIÓN
Los LCD alfanuméricos poseen grandes prestaciones prácticas pero tienen también cierta rigidez a la hora de presentar la
información en pantalla: no se puede, por ejemplo, exteriorizar ondas, dibujos, ni logos. Un paso más allá de los LCD
alfanuméricos son los LCD gráficos (o GLCD) compuestos por una matriz continua de pixeles (no agrupados como en los
anteriores). En ellos es factible representar de forma monocromática y mediante un mapa de bits algún dibujo, logo o incluso
animación. Celulares como el Nokia 1100 o Motorola C115 poseían pantallas con estas características. Vienen de diversas
dimensiones, entre ellas 128x64 pixeles, 240x128, 240x64, entre otros. Suelen poseer luz de fondo verde o azul. Vienen con
controladores incorporados, para que su manejo se simplifique.
Esta guía está basada en el GLCD marca WINSTAR de 128x64 puntos y de comunicación paralela; aunque la librería utilizada y
descrita más adelante soporta un gran número de displays distintos.
CARACTERISTICAS
Como anexo se presenta el datasheet de la pantalla. Algo sumamente importante a tener en cuenta es el controlador con el
que viene el display. Leyendo las características se puede observar que en este caso en particular contamos con un
controlador NT 7108 (compatible al KS0108).
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
LIBRERÍA U8glib Y CONEXIONADO
La U8glib es una librería para Arduino creada para simplificar la tarea de mostrar información en pantallas pequeñas. Soporta
un gran número de controladores, entre ellos el KS0108.
Se puede descargar desde la página [Link] y se la debe instalar desde la IDE de Arduino:
Programas > Include Library > Add .ZIP Library
Una gran forma de aprender a utilizar esta librería y a manejar los LCD gráficos es a través de la interpretación de los
programas de ejemplo que vienen. Ahora se desarrollará la programación básica para poder escribir en la pantalla.
1. Incluir la librería.
Programas > Include Library > U8glib
Nos aparecerá en el cuadro de la programación lo siguiente:
#include <U8glib.h>
2. Seleccionar controlador y detallar la conexión de los pines: debido a que esta librería está diseñada para un gran
número distinto de chips controladores, debemos especificar cuál de estos tiene nuestro display. Papa poder
observar la lista completa de controladores soportados nos dirigimos a la página
[Link] o consultar el anexo a este apunte. La primer columna especifica el
controlador, la segunda el tamaño.
La octava columna nos indica cómo debemos realizar la conexión de pines. En nuestro caso tenemos el controlador
KS0108:
U8GLIB_KS0108_128(d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw [, reset])
La conexión con el reset es optativa y por eso se encuentra entre corchetes. Se recomienda realizar la misma
conexión al Arduino que en los ejemplos que trae:
U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16);
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
3. Antes de dibujar o de escribir textos vamos a ver el contexto de la programación. Los dibujos se organizan
preferentemente de forma individual en subrutinas. Cuando se la desea imprimir en pantalla se llama a la subrutina
dentro de un Bucle de pintado. La programación está comentada para su comprensión.
#include <U8glib.h>
U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16);
void dibujo1(){
…
}
void dibujo2(){
…
}
void setup() {…]
void loop(){
//BUCLE DE PINTADO
[Link](); //inicia el proceso de dibujo
do{
dibujo1(); //se llaman a las subrutinas de dibujo
dibujo2();
}while([Link]()==1) //¿se ha acabado de dibujar? 1:no 0:si
delay(500); //redibuja después de una pausa
Dentro de las subrutinas de dibujo podemos incluir texto, dibujos o formas.
TEXTO
A la hora de escribir textos en la pantalla tenemos que tener en cuenta un par de cosas: la posición de escritura, la fuente de
la letea , su tamaño y el punto de referencia en donde el texto comienza a dibujarse.
Existe un gran número de tamaños y fuentes de letras, todas disponibles en la página de la librería U8glib o en el anexo que
se presenta a este apunte. Basta con escribir el código correspondiente antes del texto en cuestión:
[Link](fuente);
Por ejemplo:
[Link](u8g_font_courB14);
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
Supongamos que queremos escribir (ABg). Antes de hacerlo debemos tener en cuenta cuál va a ser el punto de referencia en
donde comienza el dibujo. Existen tres posibilidades:
Tomar como referencia para escribir el punto de arriba a la izquierda:
[Link]();
Tomar como referencia para escribir el punto central a la izquierda:
[Link]();
Tomar como referencia para escribir el punto base a la izquierda:
[Link]();
Una vez que seleccionamos l fuente, y el punto de referencia, se puede comenzar a escribir mediante el siguiente comando:
[Link](columna, fila, ”texto a imprimir”);
La columna y fila establecen en donde se ubicará el punto de referencia seleccionado para empezar a imprimir. Recordar que
todo esto se debe colocar en una subrutina que luego se debe llamar en el bucle de pintado. Por ejemplo:
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
void texto1(){
[Link](u8g_font_gdr11); //fuente
[Link](); //punto de referencia
[Link](5, 20, "Industrial 4");
}
void texto2(){
[Link](u8g_font_baby); //fuente
[Link](); //punto de referencia
[Link](4, 64, "Rio Gallegos | Santa Cruz");
}
void setup() {…]
void loop(){
//BUCLE DE PINTADO
[Link](); //inicia el proceso de dibujo
do{
texto1(); //se llaman a las subrutinas de dibujo
texto2();
}while([Link]()==1) //¿se ha acabado de dibujar? 1:no 0:si
delay(500); //redibuja después de una pausa
IMAGEN
1. Pasar la imagen al tamaño adecuado (en este caso 128x64 pixeles). Se deben elegir imágenes con poco detalle y
preferentemente monocromática.
2. Hacerla monocromática. Para los pasos 1 y 2 se pueden emplear las herramientas que la página
[Link] ofrece.
3. Es conveniente retocarla con algún editor de imágenes como Paint, GIMP, o Photoshop.
4. Convertirla en un array de bytes. Para ello dirigirse al siguiente link:
[Link]/hacker-tools/image-to-byte-array/
5. Crear una constante al principio del programa con los bytes entregados por la página:
const uint8_t dibujo [] U8G_PROGMEM = {
0xff, 0x0, 0x8, 0x0, 0x0, 0xff, 0xff, 0xcf, 0xff, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0,
0x1f, 0xfe, 0x0, 0x8, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xfc, 0x1, 0xf8, 0x0, 0x0, 0x0,
...}
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
6. Llamarlo dentro del bucle de dibujo:
u8g . drawBitmapP ( columna, fila, ancho en bytes, alto en bits, nombre);
Columna y fila indican en donde queremos comenzar a dibujarlo. El ancho en bytes del dibujo, y su alto en bits. El
nombre se refiere a cómo se llama el array de bytes.
Por ejemplo:
u8g . drawBitmapP ( 0 , 0 , 8 , 64, dibujo );
Sistemas de Electrónica de Control | Tec. Alvarado Diego
Colegio Industrial N° 4 | Tecnicatura en Electrónica
PROYECTO #1 PWM
CONTROL DE VELOCIDAD DE UN MOTOR DE C.C.
Diseñe el sistema para poder controlar la velocidad de un motor de corriente continua a través de la computadora. Se debe
ingresar el porcentaje de trabajo deseado. En caso de ingresar valores erróneos se debe mandar un mensaje al bus serie.
Tenga en cuenta que el motor de corriente continua se alimenta a una tensión mucho mayor que la que puede el Arduino
entregar.
Modifique su diseño para que, además de la velocidad, se pueda seleccionar el sentido de giro.
Sistemas de Electrónica de Control | Tec. Alvarado Diego