Este proyecto trata de realizar un reloj de mesa, donde los dígitos son VFD (vacuum fluorescent display). Este tipo de display se usaba mucho antes, sobre todo en radios y coches. Por aquí os dejo un ejemplo:

Antiguo VFD

Sin embargo, nosotros vamos a usar unos 7-segmentos VFD que le van a dar a nuestro reloj un toque vintage y que a mí, personalmente me gusta mucho. Además, voy a intentar darle un acabado molón para que además de ser algo maker sea decorativo 🙂

Parte 1: Encendiendo los VFD

Lo primero que tenemos que hacer tras recibir los VFD’s es encenderlos! En mi caso compre los IV-6 (ИВ-6) en ebay que son unos VFDs rusos con un brillo azul verdoso. El problema para trabajar con estos dispositivos es que son muy antiguos y el datasheet está en ruso y es una foto del original…

Pero tranquilos que después de mucho tiempo y paciencia he traducido lo principal y os dejo aquí como encenderlos, qué voltajes y corrientes soportan y como se tienen que conectar.

DescripciónValor
Límites
Voltaje de los dígitos50V
Voltaje de la rejilla50V
Voltaje del cátodo/filamento1.15V
Modo estático
Voltaje de los dígitos25V
Voltaje de la rejilla25V
Voltaje del cátodo/filamento1.0V
Corriente del cátodo/filamento50mA
Esquema de pines del IV-6

Esquema de pines del IV-6

En el vídeo de más arriba tenéis una explicación de cómo funcionan, así que esa parte la pasaremos por alto. Así que lo siguiente que necesitamos, es generar nuestros voltajes para poner a funcionar nuestros VFD IV-6. En nuestro caso vamos a partir de una fuente de 9V, pero debería funcionar igual con cualquier otra fuente. Vamos a necesitar, además de nuestra fuente de 9v, un step up, para elevar el voltaje de 9v a 25v, y un step down, para bajar de los 9v hasta 1v. Os recuerdo que para optimizar las compras en Aliexpress os recomiendo pasaros por mi post sobre Como usar Aliexpress para empezar un laboratorio de electrónica

Bien, una vez que tenemos nuestros Steps Up/Down, lo que vamos a hacer es conectarlo de manera muy sencilla. Simplemente tenemos que conectar 25V a la malla y poner 1V entre las entradas del filamento. A continuación os dejo un esquema de como se tendría que conectar. Las líneas discontinuas vienen siendo cables opcionales, con esto me refiero a que no son necesarios para que funcionen, pero si no ponemos esos 25V en alguna de las patas de los dígitos, no se va a encender nada.

Detalle primera conexión

Conexión de un VFD básica

Y el resultado, si conectáis los pines: 1,2,3,4 y 10; a 25V, lo podéis ver a continuación.

Un dígito VFD funcionando

Un dígito VFD funcionando

Parte 2: Interfaz con Arduino (UDN2981)

Ya os adelanto que si intentamos trabajar con 25V y el Arduino, sin poner nada entre medias, vamos a invocar a nuestro querido magic smoke. Así, si no quieres ver como tu Arduino pasa a mejor vida, vamos a tener que hacer algún interfaz.

El objetivo del interfaz es poder controlar señales de 25V cuando la entrada es de tan solo 5V. Hay dos tipos de drivers para esta función: los sink drivers y los source drivers. Los primeros se ponen entre la carga y la tierra, mientras que los últimos se ponen entre la fuente de voltaje y la carga.

En nuestro caso vamos a usar los source drivers ya que es la única manera de poder poner a 0V o a 25V las entradas de los segmentos. Como además, necesitamos que las salidas suban hasta 25V vamos a usar el driver UDN2981 (datasheet). El UDN2981 es un chip muy sencillo de usar, y lo podemos entender fácilmente con el diagrama interno que podemos encontrar en el datasheet, que os dejo a continuación.

Recuerda que puedes apoyar este blog y su contenido si adquieres los componentes a través de nuestros enlaces, por ejemplo, si tienes pensado comprar el UDN2981 te dejo aquí el enlace compra en Aliexpress.

Esquema interno del UDN2981

Básicamente, tenemos las conexiones de entrada, que se “amplifican” hasta el nivel de Vs. Por lo que si en la entrada IN1 tenemos 5V, en la salida de “en frente” tendremos 25V. De esta manera, el circuito que nos queda sería muy sencillo, os lo dejo a continuación, pero simplemente, las entradas IN del UDN2981 se conectarían directamente a un Arduino. El resto de conexiones del VFD las dejamos como en el primer post y con las 8 salidas digitales del Arduino, ya podríamos controlar qué símbolo mostrar en el dígito.

Interfaz para Arduino con el UDN2981

Interfaz para Arduino con el UDN2981.

Demasiados cables: Serie-Paralelo

Llamadme loco de la eficiencia si queréis, pero esto de tener 8 salidas del Arduino ocupadas para esto… No me mola un pelo… Yo uso el Arduino Nano y tenerlo así me supone gastar un porcentaje muy alto de todas sus salidas. Además, que lo guay de todo esto es romperse la cabeza para hacer las cosas mejor y más elegantemente.

Para ello, lo que vamos a usar, como os ha espoileado el título, es usar un conversor serie a paralelo. Esto lo que nos va a permitir es, Sorpresa: enviar los datos en serie y obtenerlos en paralelo. Así, solo necesitaremos 2 conexiones del Arduino: una para los datos y otra para el reloj.

Funcionamiento básico

El funcionamiento de todos estos integrados es muy parecido. Todos ellos se basan en puertas lógicas Flip-Flop con 3 entradas: La primera los datos, la señal de reloj y por último el reset. Estas puertas lógicas, cuando reciben una señal de reloj, leen el valor a su entrada y lo pasan a la salida. La salida solo lee el dato de entrada cuando se recibe el pulso de reloj, y la salida cambia al recibirse el pulso de reloj, o activar el reset.

Si la salida de uno de los Flip-Flop es la entrada del siguiente, entonces podemos ir pasando los datos entre las puertas lógicas y avanzando el dato, de uno a otro, en cada ciclo de reloj.

Chips Serie-Paralelo: 74HC595 vs 74HC164

Generalmente nos podemos encontrar dos tipos de conversores serie-paralelo: los no latched y los latched. He intentado traducirlo al castellano, pero sería algo así como “con interruptor”, y me gusta más como queda en inglés. Total, que me voy por las ramas, los conversores no latched son los más sencillos, de este tipo tenemos los 74HC164 (link aliexpress).

74HC164 sin latch

Como hemos visto en la sección del funcionamiento básico, si encadenamos varias puertas lógicas, y conectamos la señal de reloj a todas ellas, podemos ir pasando el dato que esté en el primer Flip-Flop, hacia “delante” en cada ciclo. Y esto es exactamente lo que hace el 74HC164.

En el siguiente esquema tenéis el interior del 74HC164, para que podáis entender el comportamiento. Aunque este chip tiene una puerta AND en la entrada de DSA y DSB, se puede conectar una entrada a HIGH y usar solo la otra, o interconectar las dos y ya funcionaría como si no estuviese esa puerta lógica.

Puertas lógicas del 74HC164

Puertas lógicas del 74HC164

74HC595 Latched

Por otro lado tenemos el 74HC595 (link Aliexpress) que es igual que el 74HC164 solo que en este caso, las salidas del integrado no están directamente conectadas a las salidas de las puertas lógicas. Estos chips incluyen un paso de complejidad más, añadiendo una etapa de salida, con la que podemos controlar cuando vamos a sacar los datos hacia el exterior.

Puertas Lógicas Internas del 74HC595

Puertas Lógicas Internas del 74HC595

Como podemos ver en el esquema, la primera parte, es decir, la conexión de serie a paralelo básica, es igual que en el 74HC164, pero este además tiene dos entradas más de control: RCLK y nOE. RCLK es la encargada de, cuando los datos de la primera etapa están listos, los pasa a la salida. Mientras que nOE activa las salidas.

Las comparaciones son odiosas

Aunque son dos integrados muy parecidos, puede ser que uno sea o no sea útil para tu proyecto. Por eso vamos a ver cuales son las ventajas y desventajas de cada uno, y así que puedas elegir el mejor para ti. Aunque, ya te adelanto que en muchos casos, son intercambiables y ambos pueden valer para lo mismo, con cambios menores.

  • 74HC164 Gana en:
    • Interfaz más sencilla, solo se necesitan 2 salidas de Arduino.
    • Más simple y fácil de entender
  • pero…
    • Las salidas se van actualizando según los datos van pasando.
    • Además, no se pueden cortar las salidas y ponerlas en alta impedancia

 

  • 74HC595 es mejor en:
    • Capacidad de controlar mejor las salidas del integrado
    • Se puede “convertir” en algo parecido a un 74HC164 juntando las señales de reloj (esto es un poco más avanzado)
  • pero…
    • El interfaz y código son un poco más complejos
    • Se necesitan más pines del Arduino/uC para controlarlo

Añadimos el Serie-Paralelo

En nuestro caso, hemos elegido el 74HC164 por una sencilla razón, el latch lo podemos hacer con la rejilla del dígito. Es decir, si queremos que no se vaya viendo como los datos van saliendo por las salidas del integrado, podemos desactivar la malla del VFD, y así no se iluminará nada.

El circuito queda como en el siguiente esquema. En este, ya podemos manejar, con tan solo 2 pines del Arduino, todos los segmentos de nuestro display fluorescente. En nuestro caso hemos optado por poner nMR y DSA a 5V para así que nunca se borren los datos de los registros.

Aunque en el diagrama aparezca ‘Serial Data’ y ‘Serial_CLK’ no son pines de I2C o SPI del Arduino, vale con cualquier Pin digital.

Conexión Serial-Paralelo, interfaz y VFD IV-6

Conexión completa con el Serie-Paralelo, luego interfaz de alto voltaje y el VFD

El código fuente en Arduino

Para manejar los diferentes dígitos y usar el Serie-Paralelo, vamos a usar la función de arduino ‘ShiftOut’. Además vamos a poner el ejemplo de pintar un ‘2’. Mirando el diagrama del principio del post, vemos que para iluminar el ‘2’ necesitamos encender los segmentos: 2,3,4,6 y 10;

En la función ‘shiftOut’ tenemos que definir en que orden vamos a enviar el dato. Si definimos el numero como 01110110, de manera que el primer bit de la izquierda sea lo que salga por el OUT1 del serie-paralelo, necesitaremos enviar primero el LSB.

int DataPin = 8; // Serial_Data (D8)
int ClockPin = 7; // Serial_CLK (D7)


int data = 0b01110110;

void setup(){
  pinMode(DataPin, OUTPUT);
  pinMode(ClockPin, OUTPUT);
}

void loop(){
  shiftOut(DataPin, ClockPin, LSBFIRST, data);
  delay(1000);
}