Proyecto 13.1 - PG24064A GLCD

18 de octubre de 2015

Proyecto 13a - POWERTIP PG24064A - Graphic LCD Module

En este proyecto veremos como conectar y programar Arduino para controlar displays LCD gráficos de gran tamaño, concretamente trabajaremos con uno de 240x64 pixeles.

Cuando trabajemos con displays LCD, lo primero que hay que averiguar es que controlador utiliza. Se puede buscar en el datasheet del fabricante, o bien mirar en la cara de los componentes. El controlador determina cómo se conecta el display al Arduino y qué tipo de librería hay que utilizar. 

El módulo PG24064-A funciona con el controlador LC7981. Se puede ver en el lado derecho junto al conector.

Ahora toca descargar la librería universal para displays gráficos monocromo de 8 bits, olikraus/u8glib no sin antes agradecer a estos señores el enorme trabajo realizado, sin el cual nada de esto sería posible.

Una vez instalada la librería abrimos el ejemplo "Hello Wordl" y desmarcamos únicamente el constructor que corresponde al controlador y dimensiones en pixeles de la pantalla, es decir U8GLIB_LC7981_240X64. El resto de constructores se pueden borrar.

La librería viene con muchos ejemplos para que hagamos pruebas con nuestro display.

Esquema

Pin Assignment

Sketch

/*

  HelloWorld.pde

  

  "Hello World!" example code.

  

  >>> Before compiling: Please remove comment from the constructor of the 

  >>> connected graphics display (see below).

  

  Universal 8bit Graphics Library, http://code.google.com/p/u8glib/

  

  Copyright (c) 2012, olikraus@gmail.com

  All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, 

  are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list 

    of conditions and the following disclaimer.

    

  * Redistributions in binary form must reproduce the above copyright notice, this 

    list of conditions and the following disclaimer in the documentation and/or other 

    materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 

  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 

  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 

  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 

  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 

  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 

  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 

  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 

  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 

  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 

  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 

  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 

  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  

  

*/

#include "U8glib.h"

// setup u8g object, please remove comment from one of the following constructor calls

// IMPORTANT NOTE: The following list is incomplete. The complete list of supported 

// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device

U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16);

// 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16

void draw(void) {

  // graphic commands to redraw the complete screen should be placed here  

  u8g.setFont(u8g_font_unifont);

  //u8g.setFont(u8g_font_osb21);

  u8g.drawStr( 0, 22, "Hello World!");

}

void setup(void) {

  

  // flip screen, if required

  // u8g.setRot180();

  

  // set SPI backup if required

  //u8g.setHardwareBackup(u8g_backup_avr_spi);

  // assign default color value

  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {

    u8g.setColorIndex(255);     // white

  }

  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {

    u8g.setColorIndex(3);         // max intensity

  }

  else if ( u8g.getMode() == U8G_MODE_BW ) {

    u8g.setColorIndex(1);         // pixel on

  }

  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {

    u8g.setHiColorByRGB(255,255,255);

  }

}

void loop(void) {

  // picture loop

  u8g.firstPage();  

  do {

    draw();

  } while( u8g.nextPage() );

  

  // rebuild the picture after some delay

  delay(50);

}


Si todo ha ido bien esto será lo que veáis en la pantalla:

Proyecto 13b - POWERTIP PG24064A - Graphic LCD Module                     

A continuación veremos como mostrar imágenes.

De igual manera que con el display gráfico del proyecto 12, para mostrar una imagen por pantalla necesitamos convertir la imagen bmp en una matriz hexadecimal.

Abrimos la imagen con el paint, en Atributos seleccionamos unas dimensiones de 240x64 píxeles monocromo, y a continuación la guardamos. Después abrimos el .bmp con el LCD Image Converter. Este programa escanea la imagen y la convierte en una matriz hexadecimal que pegaremos en el código.

Hay que tener en cuenta que la imagen se puede escanear de derecha a izquierda, de arriba a abajo y viceversa. La dirección empleada depende de dónde esté el pixel 0,0 y por dónde empieza el display a dibujar la imagen en pantalla. Aquí no hay una receta mágica, tendremos que probar las diferentes opciones hasta dar con la correcta.

Abrir el programa LCD Image Converter, abrir el .bmp en File->Open. 

Ir a Options->Conversion y en Main Scan Direction y Line Scan Direction hacer pruebas con las diferentes opciones hasta que la imagen salga bien en el display.

 

Sketch

/*

  XBM.pde

  

  drawXBM example code.

  

  >>> Before compiling: Please remove comment from the constructor of the 

  >>> connected graphics display (see below).

  

  Universal 8bit Graphics Library, http://code.google.com/p/u8glib/

  

  Copyright (c) 2012, olikraus@gmail.com

  All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, 

  are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list 

    of conditions and the following disclaimer.

    

  * Redistributions in binary form must reproduce the above copyright notice, this 

    list of conditions and the following disclaimer in the documentation and/or other 

    materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 

  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 

  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 

  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 

  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 

  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 

  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 

  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 

  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 

  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 

  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 

  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 

  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  

  

*/

#include "U8glib.h"

U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16

#define u8g_logo_width 240

#define u8g_logo_height 64

//static unsigned char u8g_logo_bits[] = {

static unsigned char u8g_logo_bits[] U8G_PROGMEM = {

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x3c, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x7f, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7b, 0x00, 0x80, 0xff, 0x7f, 0xfe, 0xff, 0x07, 0x3e, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0xff, 0xff, 0x0f, 0xe0, 0x0f, 0xf8, 0xff, 0x3f, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0xff, 0x0f, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0xe0, 0x0f, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x80, 0x9f, 0xcf, 0x07, 0xf8, 0x0f, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x1f, 0xfc, 0x0f, 0x3c, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x80, 0x0f, 0x00, 0xc0, 0xf9, 0xf8, 0x1c, 0xfe, 0x0f, 0x3c, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0x1f, 0x00, 0xc0, 0xf0, 0x70, 0xf8, 0xff, 0x0f, 0x3c, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0x7f, 0x00, 0xff, 0xe0, 0x70, 0xf0, 0xff, 0x0f, 0x3c, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfc, 0x7f, 0x80, 0xff, 0x60, 0x70, 0xf0, 0xff, 0x07, 0x3c, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0x80, 0xf3, 0xe0, 0x70, 0xf0, 0xff, 0x07, 0x3c, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0x80, 0xc1, 0xe0, 0x70, 0xf0, 0xff, 0x03, 0x3c, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0x81, 0xc1, 0xe0, 0x70, 0xe0, 0xff, 0x03, 0x3c, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0x81, 0xc1, 0xe1, 0x60, 0x60, 0xfe, 0x01, 0xbc, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xc1, 0xc1, 0xe0, 0x60, 0x70, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x83, 0xc1, 0xe1, 0x60, 0x30, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf1, 0x7f, 0x80, 0x83, 0xc3, 0xc1, 0xc0, 0x30, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe0, 0x7f, 0x00, 0x07, 0x83, 0xc3, 0xc1, 0x30, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xe0, 0x3f, 0x00, 0x07, 0x87, 0x83, 0x83, 0x31, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 

    0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0x1f, 0x00, 0x0e, 0x0e, 0x87, 0xc7, 0x3b, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 

    0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0x0f, 0x00, 0x1e, 0x9e, 0xdf, 0xcf, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0x87, 0xcc, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xfb, 0xef, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0xfe, 0xfb, 0xef, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0xfe, 0xfb, 0xef, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xf7, 0xef, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0xef, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf0, 0x1f, 0xfe, 0x0f, 0x0e, 0x8f, 0xc7, 0x3f, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 

    0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe0, 0x3f, 0x00, 0x07, 0x07, 0x87, 0x83, 0x31, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0xe0, 0x3f, 0x00, 0x07, 0x87, 0xc3, 0xc1, 0x30, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf0, 0x7f, 0x00, 0x83, 0x83, 0xc1, 0xc1, 0x30, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x80, 0x83, 0xc3, 0xe1, 0x60, 0x70, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xc3, 0xc1, 0xe0, 0x60, 0xfe, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x81, 0xc1, 0xc1, 0x60, 0xe0, 0xff, 0x03, 0xbc, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, 0x81, 0xc1, 0xe1, 0x60, 0xf0, 0xff, 0x03, 0xbc, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0x81, 0xc1, 0xe0, 0x70, 0xf0, 0xff, 0x07, 0x3c, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xff, 0x80, 0xe3, 0xe0, 0x70, 0xf0, 0xff, 0x07, 0x3c, 0xfe, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xfc, 0xff, 0x80, 0xff, 0xe0, 0x70, 0xe0, 0xff, 0x0f, 0x3c, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf8, 0x7f, 0x00, 0xff, 0x60, 0x70, 0xf0, 0xff, 0x0f, 0x3c, 0xf8, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0x3f, 0x00, 0xce, 0xe0, 0x70, 0xf8, 0xff, 0x0f, 0x3c, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0x0f, 0x00, 0xc0, 0xf1, 0x78, 0x3c, 0xfc, 0x0f, 0x3c, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x80, 0x03, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0xf8, 0x0f, 0x3c, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x80, 0xdf, 0xdf, 0x0f, 0xe0, 0x0f, 0x3c, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x87, 0x03, 0xe0, 0x0f, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0xff, 0x07, 0x00, 0xc0, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfb, 0xff, 0xff, 0x3f, 0xe0, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3b, 0x00, 0x00, 0xfc, 0x7f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x7e, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x38, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 

     };

void draw(void) {

  // graphic commands to redraw the complete screen should be placed here  

  u8g.drawXBMP( 0, 0, u8g_logo_width, u8g_logo_height, u8g_logo_bits);

}

void setup(void) {

  // flip screen, if required

  // u8g.setRot180();

}

void loop(void) {

  // picture loop

  u8g.firstPage();  

  do {

    draw();

  } while( u8g.nextPage() );

  

  // rebuild the picture after some delay

  delay(500);

}

Esta es la imagen del código anterior.

Proyecto 13c - POWERTIP PG24064A - Graphic LCD Module 

También podemos utilizar el display para mostrar información en tiempo real. Esta quizás sea la aplicación más interesante de las aquí explicadas.

En el ejemplo que sigue he conectado un potenciómetro en la entrada A5 y he modificado ligeramente el código del primer ejemplo (Hello World!") para mostrar por pantalla el valor de Analog Read y la tensión en voltios correspondiente que se aplica en dicha entrada A5.

En la página de olikraus/u8glib hay un estupendo User Reference Manual donde explican todas las funciones que se pueden hacer con la librería U8g, para sacarle todo el potencial a nuestro display.

Sketch

/*

  Analog Read

  

  Este código muestra por pantalla el valor de analogRead

  y la tensión aplicada en A5.

  

  >>> Before compiling: Please remove comment from the constructor of the 

  >>> connected graphics display (see below).

  

  Universal 8bit Graphics Library, http://code.google.com/p/u8glib/

  

  Copyright (c) 2012, olikraus@gmail.com

  All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, 

  are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list 

    of conditions and the following disclaimer.

    

  * Redistributions in binary form must reproduce the above copyright notice, this 

    list of conditions and the following disclaimer in the documentation and/or other 

    materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 

  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 

  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 

  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 

  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 

  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 

  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 

  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 

  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 

  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 

  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 

  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 

  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  

  

*/

#include "U8glib.h"

int pot = A5;

int lectura = 0;

float tension = 0;

float aux;

// setup u8g object, please remove comment from one of the following constructor calls

// IMPORTANT NOTE: The following list is incomplete. The complete list of supported 

// devices with all constructor calls is here: http://code.google.com/p/u8glib/wiki/device

U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16

void draw(void) {

  // graphic commands to redraw the complete screen should be placed here  

  u8g.setFont(u8g_font_unifont);

  //u8g.setFont(u8g_font_osb21);

  lectura = analogRead(pot);

  aux = map(lectura, 0, 1023, 0, 5000);

  tension = aux / 1000;

  

           //(col, fila)

  u8g.drawStr( 0, 10, "Analog Read=");

  u8g.setPrintPos(100, 10);

  u8g.print(lectura);

  u8g.drawStr( 0, 21, "Tension=");

  u8g.setPrintPos(70, 21);

  u8g.print(tension);

}

void setup(void) {

  

  // flip screen, if required

  // u8g.setRot180();

  

  // set SPI backup if required

  //u8g.setHardwareBackup(u8g_backup_avr_spi);

  // assign default color value

  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {

    u8g.setColorIndex(255);     // white

  }

  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {

    u8g.setColorIndex(3);         // max intensity

  }

  else if ( u8g.getMode() == U8G_MODE_BW ) {

    u8g.setColorIndex(1);         // pixel on

  }

  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {

    u8g.setHiColorByRGB(255,255,255);

  }

}

void loop(void) {

  // picture loop

  u8g.firstPage();  

  do {

    draw();

  } while( u8g.nextPage() );

  

  // rebuild the picture after some delay

  delay(2000);

}

Este es sólo un ejemplo de aplicación. Se puede conectar un teclado numérico, un RTC, un medidor de corriente, una LDR..

Espero que os haya gustado.

¡Hasta pronto!