Inicio > Electrónica > Controlando una IM50240 o PWB50240 pantalla LCD numérica.

Controlando una IM50240 o PWB50240 pantalla LCD numérica.


IM50240

La pantalla IM50240 de OPTREX es una sencilla LCD numérica de cuatro dígitos y dos mensajes de información (CLEAR y SECURE) que se controla mediante el envío de los bits correspondientes a cada segmento de forma serial. A continuación se explica brevemente el funcionamiento de esta pantalla y se describe un código en CodeWarrior implementado en un microcontrolador MC68HC908AP32 con el cual probar el funcionamiento de la pantalla.

IM50240.

Esta pantalla está controlada por un CI HD44100H (es posible que otras versiones de esta LCD tengan un CI diferente en cuyo caso la asignación de la trama de datos puede ser diferente, como el HD66100F) La tarjeta posee 10 pines de salida dispuestos de la siguiente manera:

Pin Función
1 DATOS
2 CL1
3 CL2
4 M
5 n/c
6 VCC
7 GND-IC
8 Botón “Clear”
9 Boton “Secure”
10 GND

DATOS: Es la entrada serial de la pantalla.

CL1: Reloj que sincroniza la entrada de datos.

CL2: Reloj que sincroniza el final de la trama de datos.

M: Es una señal cuadrada de 50% de ciclo útil que refresca los cambios de la pantalla LCD. La frecuencia de trabajo varía de entre 30 a 500 Hz. Para este ejercicio se estableció en 100 Hz operando adecuadamente.

VCC: El voltaje de operación está entre 4.5 y 11 voltios (5 voltios típicamente)

GND IC: Es la tierra del HD44100H.

CLEAR Y SECURE: La tarjeta trae ruteadas las pistas metálicas para colocar dos pulsadores que servirían de funciones para los segmentos CLEAR y SECURE que trae la LCD. Se deben conectar a un circuito con entrada pull-up, al pulsar estos puntos se conectan con la tierra del IC.

GND: Es la tierra de la pantalla.

 Las formas de DATOS corresponden a los nuevos datos que se almacenan en los registros del IC, los cuales se establecen en el flanco de bajada de CL2. Es importante que al terminar el envío de datos la señal alterna M y CL1 caigan de forma sincrónica, ya que de no ser así se pueden producir elementos DC en las formas de onda de accionamiento del display. Estos elementos DC pueden acortar la vida útil de la pantalla si los datos mostrados cambian con frecuencia (por ejemplo, visualización de las horas, los minutos y segundos de un reloj). La tasa de bits de la entrada de datos depende del IC que controla la LCD siendo no mayor a 1 MHz. En la figura se muestra el diagrama de tiempos de las entradas.

IM50240 formas de onda

La estructura de la trama de datos para esta pantalla es la siguiente; los 30 segmentos (4 dígitos más CLEAR y SECURE) se refrescan con una trama de 35 bits que debe ingresarse en el siguiente orden:

Estructura Trama de datos

Donde C es CLEAR y S SECURE. Los bits marcados en verde son datos que no se utilizan pero que facilitan el manejo de los datos de los display 7 segmentos como bytes. En la figura siguiente se muestra el orden de cada uno de los segmentos dentro de la pantalla.

IM50240 Asignación de segmentos

PROGRAMA.

Inicialmente se estableció el manejo de los dígitos como bytes dejando libre el último bit (más significativo). La siguiente tabla muestra los valores de los segmentos y su correspondencia en HEX y decimal.

Con estos datos se puede elaborar una función que tome el valor de un dígito o letra y lo convierta en un byte que se incluirá posteriormente dentro de la trama de datos que se enviará al display. La conexión de pines entre el microcontrolador usado (MC68HC908AP32) y la pantalla se estableció de la siguiente manera:

Pin LCD Función Pin micro

Puerto

1 DATOS 4 PTB7
2 CL1 2 PTD1
3 CL2 3 PTD0
4 M 1 PTD2
8 “Clear” 6 PTB6
9 “Secure” 8 PTB5

 Para la configuración de reloj del microcontrolador se utilizó un cristal de 4.9152 MHz. Se estableció un timer en 5 ms para la oscilación de M y como elemento de prueba un ADC de 10 bits con entrada en PTA7 (pin 26) un segundo timer se estableció en 1 segundo que será el tiempo de refresco de la medición del ADC. El programa lee el ADC, luego toma el valor de 10 bits y lo convierte en 4 bytes correspondientes a la asignación de segmentos para la visualización (del valor decimal del ADC) que se almacenan en un arreglo de memoria llamado ALPMDISP, posteriormente una función lee el valor de las entradas de CLEAR y SECURE y las incluye en el inicio de la trama de datos, deja un bit en cero (bit 3 de la secuencia) e inicia el envío de los 4 bytes correspondientes a los dígitos. Al finalizar el envío de datos activa un bit de control (ktr_pantalla) y pone CL1 en ALTO, el bit de control le indicará a la función que controla el timer de M que debe poner a CL1 en BAJO cuando M esté en el flanco de bajada, garantizando que M y CL1 bajen simultáneamente.

El segmento del programa que hace esto es el siguiente:


#include "Cpu.h"
#include "Events.h"
#include "TIMM.h"
#include "M.h"
#include "CL1.h"
#include "CL2.h"
#include "DATA.h"
#include "AD1.h"
#include "CWlib.h"
#include "lib.h"

TWREG ADC_resultH;
TWREG ADC_result[NUMADC]=0;    // Variable donde se almacena la medición del ADC
byte ALPMDISP[NUMDISPLAY]={0x01,0x00,0x00,0x00};
  byte disp;
  byte seg;
  byte mask;
  byte lmsg;
volatile _Control_8   _control;     //variable de control edefinida en LCD_code.c
/*
** ===================================================================
**     Función     : pausasm
===================================================================
*/
void pausasm(void){
    asm { nop}
}
/*
** ===================================================================
**     Función     : Arreglo_DISP
===================================================================
*/
byte Arreglo_DISP(byte num){
   if(num==0) return 0x7E;  // 0
   if(num==1) return 0x30;  // 1
   if(num==2) return 0x6D;  // 2
   if(num==3) return 0x79;  // 3
   if(num==4) return 0x33;  // 4
   if(num==5) return 0x5B;  // 5
   if(num==6) return 0x5F;  // 6
   if(num==7) return 0x70;  // 7
   if(num==8) return 0x7F;  // 8
   if(num==9) return 0x7B;  // 9
   if(num==10)return 0x77;  // A
   if(num==11)return 0x1F;  // b
   if(num==12)return 0x4E;  // C
   if(num==13)return 0x3D;  // d
   if(num==14)return 0x4F;  // E
   if(num==15)return 0x47;  // F
   if(num==16)return 0xEE;  // n   
   return 0xFF;
}
/*
** ===================================================================
**     Función     : LCD_data
===================================================================
*/
void LCD_data(int kda,bool secure, bool clear){
  for(disp=0;disp<NUMSIPLAY;disp++)
     ALPMDISP[disp]=Arreglo_DISP((byte)kda%10);  // Se visualizará el residuo de dividir por 10    
     kda=kda/10;
  }
  CL1_ClrVal();  CL2_SetVal();     
  DATA_PutVal(secure);
  CL2_ClrVal();
  pausasm();
  CL2_SetVal();
  DATA_PutVal(clear);
  CL2_ClrVal();
  pausasm();
  CL2_SetVal();
  DATA_PutVal(0);
  CL2_ClrVal();
  pausasm();
  for(disp=0;disp<NUMDISPLAY;dips++){   
    mask=0x01;

    for(seg=0;seg<8;seg++){
      CL2_SetVal();
      DATA_PutVal((bool)(mask&ALPMDISP[disp])>>(seg));
      mask=mask<<1;
      CL2_ClrVal();
    }
    pausasm();    
  }
  ktr_pantalla=1;
  CL1_SetVal();
}
/*
** ===================================================================
**     Función     : principal
===================================================================
*/
void principal(void){
  ktr_ciclo=1;
  ktr_convert=0;
  ktr_pantalla=0;
  for(;;){
    if(ktr_ciclo==1){
      ktr_ciclo=0;
      (void)AD1_Start();
      while(ktr_convert==0){}                  // Bucle de espera de fin de conversión
      ktr_convert=0;                           // Seteo bit de control de fin de conversión
      LCD_data((int)ADC_result[0].w,SECURE_GetVal(),CLEAR_GetVal());
    }      
  }

El programa completo se puede descargar aquí.

 Finalmente se muestra una imagen del sencillo montaje efectuado con la pantalla en operación.

Montaje con AP32

About these ads
  1. 3 febrero, 2013 en 11:24

    muy buen dato lo pondre en practica Gracias

  2. 10 septiembre, 2012 en 22:48

    Que chévere viejo Gerard, no conocía su blog de wordpress, ¿piensa migrar las historias que tenía en my space??

    • 11 septiembre, 2012 en 6:16

      De hecho están aquí mismo en las categorías Cuento y Ensayo, un saludo compa y gracias por escribir!

      • Olecram
        7 octubre, 2013 en 16:56

        Interesante el trabajo, ha ver si puedes ayudar nosotros queremos poder binarizar, los datos que sale en un pantalla LCD, queremos poder transformar a información binaria lo que nos demuestra en pantalla LCD. si puedes darnos una idea o circuito te agradeceríamos..

      • 8 octubre, 2013 en 12:37

        Olecram:

        A ver si entiendo tu caso, tienes una pantalla LCD en donde estás viendo unos datos (numéricos? caracteres?) y lo que requieres es pasar esos valores a otro circuito? si es así, el circuito que controla la pantalla es de nuestro diseño? es decir, podemos modificar sus programación? porque si es así los datos lo podemos obtener del mismo circuito que controla la pantalla. Si lo que tenemos es un circuito que no controlamos (que nos conocemos ni podemos modificar su programación) entonces el asunto es mucho más complejo. Dependiendo del tipo de pantalla y de la forma como se le muestran los datos dependerá la forma que que logremos recuperar la información que se muestra. En todo caso es necesaria más información la que describes para poderte colaborar. Un saludo.

      • Olecram
        8 octubre, 2013 en 23:30

        Agradezco su atención, gracias por el tiempo cedido, para mayor datos, Se requiere poder binarizar los datos presentados en una pantalla LCD, la cual esta presentando datos numéricos, el circuito No lo controlamos, y se trata de que los datos presentados en la pantalla LCD se puedan binarizar y con ello poder utilizar esos datos en otro programa, la pantalla LCD presenta 5 dígitos cada uno de los dígitos están representados por 7 segmentos, casi parecida al de la imagen de mas arriba , al tratar de abrir una pantalla LCD la rompí, así que ese no es el camino eso quedo muy claro., espero que pueda colaborar.

      • 9 octubre, 2013 en 1:37

        Olecram.

        Se trata de la misma pantalla (Im50240) o de alguna otra semejante? si es así no es necesario manipular nada en las conexiones de la LCD, ya que los datos provienen de algún otro IC que está conectado al controlador HD44100H o alguno semejante, lo que se debe hacer es identificar primeramente cuál es el IC que controla la visualización. Una vez identificado, buscar su hoja de datos para determinar el modo de funcionamiento, buscando específicamente los pines que correspondan a la recepción de datos. Si es una LCD como la del artículo, entonces ya están identificados los datos de entrada como se explica más arriba. Como es un circuito que no controlamos debemos investigar a que frecuencia se hace el envío de los datos (osciloscopio o similar) el resto es hacer un programa que nos interprete los datos hacia atrás, es decir, coger la secuencia de pulsos y convertirlos en valores numéricos. Un saludo.

  1. No trackbacks yet.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: