sábado, 6 de octubre de 2018

Uso de un viejo display VFD de comunicación serial UART para usarlo con IDE Arduino

Tengo muy poco tiempo estudiando el tema de los microcontroladores y como muchos he empezado con Arduino. Después de realizar algunos tutoriales básicos, me interesó más el tema y seguí investigando con los microcontroladores AVR con el cual está fundamentado el Arduino Uno. Hasta el momento he invertido tiempo y dinero en algunas placas de desarrollo AVR, PIC, ARM y Espressif. 

No siempre voy a tener todos los recursos para manejar ciertos periféricos o hardware como pasa en todos los tutoriales de Arduino donde generalmente te venden el hardware con un link de una librería lista para usarla en la IDE hasta con ejemplos. Y esto fue lo que me pasó cuando me conseguí al despiezar un Pedalboard de efectos de guitarra el cual tiene un Display del tipo VFD. Este tipo de displays son los más usados en nuestros dispositivos electrónicos caseros como lo son los equipos de sonidos, microondas, etc.

El display en cuestión es el Futaba M202SD01. Googleando conseguí el datasheet. Para poder comprender las conexiones y saber qué tipo de comunicación disponía. Revisando en pinout observo que dispone de comunicación paralela y serial. Pero ninguna de ellas era parecida a las que me conocía con el display 16x2 que normalmente usamos en los tutoriales. En ese momento empieza el trabajo duro de investigar cómo podía utilizar mi viejo VFD con el Arduino. Me pareció muy complicado usar la comunicación paralela (y aparte de que usa más pines y recursos de mi placa) así que decidí enfocarme en la comunicación serial y no “no es I2C” usa comunicación serial UART un standard de comunicación serial asincrónica. (TX , RX) En el datasheet indica que se puede comunicar a una velocidad de 9600 baudios o 1200 baudios. 

En las primeras pruebas conecté el pin RX en la salida TX de mi placa Arduino y usando la función de monitor serie a 9600 pude imprimir caracteres en el display. (Ya me estoy acercando).
Ya que Arduino ofrece muchos recursos indagué en la parte de comunicación UART y conseguí una librería que me sirve para comunicarse con dispositivos de comunicación serial UART y esta es la librería "SoftwareSerial".
Ya lograda la comunicación me faltaba generar las funciones en el IDE Arduino con la información del fabricante, como se muestra a continuación:
En el datasheet que dejo para que descarguen sale la información completa.

Codigo y datasheet VFD Futaba



Simple alimentación a 5 V y el conector de datos UART

                                                           Algunos usos que les pude dar                                                         
Reloj
Muestra temperatura y Humedad
Medidor de distancias

Siguenos en twitter @e_SmartLabs



Las funciones quedaron así:

/////////////////////////////////////////////////////////////////////////////////////////////
// Funciones para la operación del VFD Futaba M202SD01LJ //
///////////////////////////////////////////////////////////////////////////////////////////

void VFDreset() // Todos los caracteres que se muestran se borran,
//luego la posición de escritura se establecerá en el dígito más significativo de la primera fila.
//El estado de visualización es el mismo que el reinicio de encendido,
//y el modo de cursor está configurado para el modo de iluminación, el nivel de Dimmer se establece en 100%.
{
  VFD.write(0x1F);
}

void VFDclear() // Todos los caracteres mostrados se borran,
//La posición de escritura se mueve al dígito más significativo de la primera fila.
//Pero el nivel de Dimmer y el modo de cursor se mantienen.
{
  VFD.write(0x0D); // clear display
}

void VFDdimmer(int amount) // El brillo se puede controlar en seis niveles usando esta función.
//Después de escribir 04H, se escriben los siguientes datos de atenuación para cambiar la corrección de salida.
//porcentaje de brillo de 0 hasta 255
{
  VFD.write(0x04);
  VFD.write(amount);

  switch (amount)
  {

    case 20:
      VFD.write(0x04); // clear
      VFD.write(0x20); // 20% Dimmer
      break;
    case 40:
      VFD.write(0x04); // clear
      VFD.write(0x40); // 40% Dimmer
      break;
    case 60:
      VFD.write(0x04); // clear
      VFD.write(0x60); // 60% Dimmer
      break;
    case 80:
      VFD.write(0x04); // clear
      VFD.write(0x80); // 80% Dimmer
      break;
    case 100:
      VFD.write(0x04); // clear
      VFD.write(0xFF); // 100% Dimmer
      }
}

void VFDchars() // Corren los carateceres UFO desde el 21 hasta el 255 descritos en el datasheet
{
  for (int i = 21 ; i < 256; i++)
  {
    VFD.write(i);
    delay(30);
  }
}

void setCursor(byte position) // Esta funcion permite mover el cursor del display desde 0  al 19
//y en la fila de abajo desde el 20 al 39
{
  VFD.write(0x10); // move cursor
  VFD.write(position); // location
}

void VFDbackspace ()
{
  VFD.write (0x08);
  //La posición de escritura se desplaza al dígito izquierdo y se borrará el carácter mostrado anteriormente en el dígito.
}

void VFDhorizontaltab()// la posicion de escritura se desplaza hacia la derecha
{
  VFD.write (0x09);
}

void cursormode (int amount ) // El cursor siempre se muestra en la posición de escritura.
//El cursor está formado por los 5 puntos ubicados en la parte inferior de la fuente de caracteres de matriz de puntos de 5 × 7.
// VFD cursor mode - FF Lighting/  88 Blinking/    00 No Lighting
{
  VFD.write(0x17);
  VFD.write(amount);
  switch (amount)
  {
    case 255: // fijo iluminad0
      VFD.write(0x17); // clear
      VFD.write(0xFF); // Lighting
      break;
    case 88: // Parpadeando
      VFD.write(0x17); // clear
      VFD.write(0x88); // Blinking
      break;
  }
}

void VFDall()  //Se ilumina toda la pantalla
{
  VFD.write (0x0F); // luego de usar la función hay que resetear el VFD
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Si les interesa descarguen el código .ino
Si tiene alguna duda estamos aquí para ayudarnos de igual modo si pueden ayudar a mejorarlo "bienvenido sea" por los momentos no creí necesario crear una librería porque realmente no creo hayan muchas unidades por allí ya que ese display es de 1998.

Si se dieron cuenta use una versión de Arduino Uno DIY, de eso no haré tutorial les paso el link de Instructables  Homemade Arduino

El Datsheet al parecer no esta revisado hay algunas diferencias de los caracteres de dice el datasheet y los que muestra realmente con los comandos específicos de la ultima pagina. Por esta razón también desistí de la función Define Character (caracteres personalizados) intenté de varias maneras sin resultados satisfactorios.


También les informo que este es mi primer Blog que realizo oficialmente, espero ir mejorando a la medida que siga aprendiendo y publicando mas material. 







No hay comentarios:

Publicar un comentario

AVR IoT Light Sensor

La tarjeta AVR IoT cuenta con el sensor de luz ambiental TEMT6000  un foto-transistor PNP adaptado a la respuesta del ojo humano. Según el...