28 abril 2014

LCD Nokia 5110 - PCD8544

      Dentro de la gama de LCD´s que podemos conectar a Arduino, se ha hecho muy popular el display PCD8544 que llevaban los teléfonos móviles Nokia 5110 y 3310. Es un display gráfico de 84 x 48 pixels, monocromo y  con posibilidad de retroiluminación.

      Como quiera que desarmar uno de estos teléfonos  para sacar el display e intentar cablearlo es posible pero poco recomendable, porque soldar cables en ellos es bastante complicado, sin embargo los venden por menos de 3 euros en tiendas chinas por lo que más barato imposible.



Como cablearlo:

Yo uso normalmente este:

                                                                     LCD PCD 8544 NOKIA 5110
Patillaje LCD
   1- RST
  2- CE
 3- DC
 4 - DIN
  5 - CLK
  6 - VCC
  7-LIGHT
    8-GND
6
7
5
4
3
3.3 V
GND (*)
GND
Patillaje Arduino
 (*) a través  resistencia de 220 Ohmios
ARDUINO


                                                                     
Programa test.
Librerías

25 abril 2014

LCD´s reciclados

Es fácil encontrarse LCD´s en aparatos y antes de tirarlos intentar reciclarlos para usos futuros, luego uno comprueba con cierta alegría que son compatibles HD44780 y por tanto usables. Sólo que alguna vez cambian la situación de los pins de alimentación.

Aquí unos pocos que he encontrado:

 
Este pertenecía a un teléfono Ericsson




 
 
Otras veces aún teniendo el datasheet y averiguando los distintos pins es imposible hacerlas funcionar aquí un par de ejemplos, son LCD de máquinas antiguas Olivetti:
 

 
 
 
 


22 abril 2014

Módulos LCD: Hitachi HD44780



Cuando queramos interactuar con nuestro aparato  lo primero que interesa es poder ver datos y para ello nada mejor que un display LCD. (si no tienes ningún display siempre podrás usar el puerto serie que lleva el propio soft de Arduino).


   Este es el esquema del archiconocido display Hitachi HD44780. aunque implícitamente no lo ponga casi todos se basan en él, así que es posible que tengas uno y el conexionado sea idéntico.


 

 
 
 
Pin description
PIN NUMBERSYMBOLFUNCTION
1VssGND
2Vdd  + 3V or + 5V
3Vo Contrast Adjustment
4 RSH/L Register Select Signal
5R/WH/L Read/Write Signal
6E   H → L Enable Signal
7 DB0H/L Data Bus Line
8 DB1H/L Data Bus Line
9 DB2H/L Data Bus Line
10 DB3H/L Data Bus Line
11 DB4H/L Data Bus Line
12 DB5H/L Data Bus Line
13 DB6H/L Data Bus Line
14 DB7H/L Data Bus Line
15A/Vee+ 3.5V for LED/Negative Voltage Output
16KK Power Supply for B/L (OV)
 
 
    Si vas a probar una que hayas reciclado de otro proyecto y quieras hacerla funcionar no olvides poner una resistencia variable de 10 kΩ  para el control del contraste:
 
 
 
   Pero si no quieres grandes quebraderos de cabeza por menos de 4 Euros tienes una que se pincha directamente sobre Arduino y tiene hasta botones para hacer un "hipotético menú":
 

 
 
 
 
   Para el código y los pines:
 
 
 
 
/*
 Metemos un texto fijo y la columna de abajo seleccionamos con teclas

 */
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int adc_key_val[5] = {50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
boolean luzEncendida=true;
boolean cursorActivo=false;
unsigned long time;
int x=0;
char caracterActual = 'A';

void setup()
{
  lcd.clear();
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Hello World !!!");
  time = millis();
  //  pinMode(10, OUTPUT);
}

void loop()
{
  if (millis()-time > 10000) {  // Si han pasado mas de 10 segundos apagamos la luz
    pinMode(10, OUTPUT);
    digitalWrite(10, LOW);
    luzEncendida=false;
  }
  if (millis()-time > 5000) {  // Si han pasado mas de 5 segundos apagamos el cursor
    lcd.noBlink();
    cursorActivo=false;
  }

  adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
  key = get_key(adc_key_in);    // Obtenemos el boton pulsado

  if (key != oldkey)   // if keypress is detected
  {
    delay(50);  // Espera para evitar los rebotes de las pulsaciones
    adc_key_in = analogRead(0);    // Leemos el valor de la pulsacion
    key = get_key(adc_key_in);    // Obtenemos el boton pulsado
    if (key != oldkey)   
    {
      time = millis();  // TODO: falta la comprobacion de si se ha desbordado el tiempo
      if (!luzEncendida) {  // Al pulsar cualquier tecla encendemos la pantalla
        pinMode(10, INPUT);
        luzEncendida=true;
      }
      else {  // si la pantalla esta encendida seguimos funcionando normalmente
        lcd.setCursor(x, 1);
        oldkey = key;
        if (key >=0){  // Si se ha pulsado cualquier tecla
          lcd.blink();  // Mostramos el cursor parpadeando
          cursorActivo=true;
        }
        if (key == 0){  // Se ha pulsado la tecla derecha
          x++;
          if (x>15) x=15;
          caracterActual='A';
        }
        if (key == 1) {  // Se ha pulsado la tecla arriba
          caracterActual++;
          if (caracterActual > 'Z') caracterActual='Z';
          lcd.write(caracterActual);
        }
        if (key == 2) {  // Se ha pulsado la tecla abajo
          caracterActual--;
          if (caracterActual < 'A') caracterActual='A';
          lcd.write(caracterActual);
        }
        if (key == 3) {  // Se ha pulsado la tecla izquierda
          x--;
          if (x<0) x=0;
          caracterActual='A';
        }
        if (key == 4){  // Se ha pulsado la tecla de seleccion
        }
        lcd.setCursor(x, 1);
      }
    }
  }
  delay(100);
}

// Convertimos el valor leido en analogico en un numero de boton pulsado
int get_key(unsigned int input)
{
  int k;

  for (k = 0; k < NUM_KEYS; k++)
  {
    if (input < adc_key_val[k])
    {
      return k;
    }
  }

  if (k >= NUM_KEYS)k = -1;  // Error en la lectura
  return k;
}



-----------------------------------------------------------O-------------------------------------------------------

Enlace al fichero: Descarga el ejemplo:


 -----------------------------------------------------------O-------------------------------------------------------
 
Recuerda:
 
- Si cargas otro ejemplo lo importante es decirle en el programa  donde están las patillas:
 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

- Cambia si es necesario el número de líneas y longitud de caracteres de tu LCD:

lcd.begin(16, 2);          16 caracteres y dos líneas

lcd.begin(20, 4);          20 caracteres y 4 líneas

 
 
  -----------------------------------------------------------O-------------------------------------------------------

 
 

Esquema que uso yo con todos los LCD´s para que sean compatibles:

 
 

 

Arduino


    Dentro del mundo de la electrónica, hace unos años este aparato supuso una revolución. Básicamente es una plataforma que consta de un microprocesador  y numerosos pins de entradas y salidas, tanto analógicas como digitales, que nos permiten programar ese microprocesador con un software, que instalamos en nuestro pc y que lleva un compilador, que introduce los datos en el micro y otras características como que todo se hace por puerto usb, el cual incluso lo alimenta. En fin sencillito, cargar y listo.





    Otra ventaja que tiene es que se van fabricando pequeños circuitos que se conectan a Arduino, todo ello para hacer todo tipo de cosas: LCD, controladores de motores, placas de relés, wifi, Ethernet, etc... Últimamente proliferan multitud de clones de circuitos, encontrar los patillajes y pins a veces no es sencillo, porque van saliendo versiones nuevas y cambian de una otras pero si los que tu tienes son como los que yo he probado,  todo debería ser pinchar y listo.

Y eso es en el fondo lo que pretende esta página dar esquemas y sencillos ejemplos que para profundizar más siempre podrás usar un buscador y encontrarás miles de ejemplos.








20 mayo 2006

Inicio

Sirva esto como inicio, como una especie de presentación. No se si a alguien le interesará en algo lo que yo aqui ponga, quiza lo ponga para mi. Ya veremos.