# Duda con display VFD



## morenodrix (Oct 4, 2007)

Hola, éste es el segundo post que envío al foro, el anterior tuve excelente respuesta., el problema que tengo es con un display vfd de una calculadora vieja que tenía entre mis cosas, y el problema es que la quiero utilizar pero no entiendo bien cómo, entiendo que es parecido a una válvula de vacío pero no se como utilizarlas, ojalá que alguien sepa,
se agradece de antemano.


----------



## anthony123 (Oct 4, 2007)

che publica una foto o algo para saber de que se trata.


----------



## morenodrix (Oct 4, 2007)

Acá envío una foto del display, es parecido al que tengo, es cómo las pantallas de los videograbadores, bueno, lo que me interesa es saber cómo utilizarlos, voltajes y corrientes de grilla, placa y filamento, o sea todo jaja.


----------



## ivanutn (Ene 18, 2008)

Por lo que se un display VFD es cómo una válvula de calentamiento directo, o sea que el mismo filamento es el cátodo, después tenés una grilla por cada dígito, en tu caso serían 5 grillas, 4 de los dígitos y una para los 2 puntitos, y por último un ánodo por cada segmento de cada dígito.

Las patas de los extremos deben ser la de los filamentos. alimentalos con 3 V continua o alterna, no importa y pone uno de los extremos a masa, luego con una fuente de 10V polariza una grilla y anda probando después que pata corresponde a cada segmento, ahora una duda : alguien sabe de que manera se puede hacer funcionar uno de estos display con integrados para display de LED como los LM3914 o para hacerlo andar con PIC's.

Viene algún driver o algo? No tengo mucha idea sobre este tema, por favor si saben algo.


----------



## marko (Mar 11, 2008)

Saludos.. desde Perú
Aunque soy Arquitecto, también soy aficionado a la electrónica ya que deje esta carrera inconclusa en la Universidad..
espero entiendan mis imposibilidades de terminologia correcta y otros formalismos..

Al grano.. !
El problema que tengo es el como poder re-utilizar un viejo display VFD de reloj el mismo que estaba deshuesado y apenas quedaron el Integrado y el display..

los recursos que tengo son:
--Los componentes (resistencias, condensadores,.. etc) de los diagramas (los puedo comprar)
--IC LM8361
--Fuente AC(transformador) de un reloj semejante pero este pertenecía a un radio-reloj con LEDs
este tiene 18.4v(entre los cables rojos) y 9.0v(al combinarlo con el amarillo) respectivamente..

los recursos que no tengo:
-- puedo interpretar al 90% los diagramas de electrónica.. pero este.. que imagino es sencillo para uds.. para mi no.. al radicar el problema en como interpretar el tipo de fuente, tierra y los voltajes, donde conectarlos.. incluso encontré una pagina con el mismo display que tengo, el problema es el mismo..
http://www.elektroda.pl/rtvforum/topic658364.html

el IC que tengo es el sgte: LM8361 que es muy similar a la MM5387 - NTE2060 & NTE2061 y HD38991, los datasheets están en Internet, 

agradeceré cualquier ayuda..


----------



## af33musica (Jul 1, 2009)

Hola gente, soy nuevo en el grupo, y llego con una duda bastante molesta. Resulta que tengo un minicomponente Philips Modelo FW 850C, y la cuestión es que lo tuve 3 años desarmado (sin la fuente de alimentación ni amplificador), y ahora que quiero rearmarlo, funciona todo menos el display VFD. Con toda la habitación oscura, apenas se logra ver algunos razgos de luz, pero son muy débiles. Desoldé el Display y atrás del mismo dice su modelo y marca: Modelo:BJ 576GK, marca FUTABA. Algo leí de estos displays y su funcionamiento pero poco logré con el mío. Me gustaría que me digan que debería hacer o probar para repararlo, y si necesitan algún dato extra por favor escríbanlo y lo publico. Voy a publicar una foto para que lo vean luego. Gracias a todos por el apoyo!


----------



## ablanco (Jun 25, 2010)

Hola que tal, he decidido abrir este nuevo tema en el que pretendo abordar la necesidad de usar un lcd (VFD) para desplegar información del microcontrolador PIC18f4550 utilizando el compilador de microchip C18. La verdad ya investigue algo, y me di cuenta de muchas cosas, entre ellas, que los tiempos y parámetros de inicializacion no son los mismo que para un LCD, por eso no funcionan ninguna de las librerías existentes. Otra cosa que les puede resultar muy interesante es que quiero programar este VFD con un bus i80 de intel. Que es el bus i80? es un bus de comunicacion que utiliza diferentes bits de control (a diferencia del M68,  que usa el bit E, RS, y RW) en este bus, se utilizan solo 2 bits el RW  y el RS. La verdad que no hay mucha informacion o no he encontrado informacion (como una libreria o un ejemplo de comunicacion i80) y no se como se debe de inicializar, que se le  debe de mandar al VFD para que este listo para la escritura, ademas de que no se puede simular en Proteus V7.4 SP3 :S Alguien tiene informacion sobre este tema? sabe algo? me puede ayudar? de antemano muchas gracias


----------



## gonzalocg (Dic 29, 2011)

hola, les traigo una interrogante que me a acosado cada vez que me topo con este tipo de display...

el display en cuestion esta adjunto, lo que necesito de ustedes es el nombre de este tipo de displays, como lo son los LCD, LED, etc...  yaque de alguna forma se deven llamar.
el nombre de la tecnica que utilizan es muy importante, asi podre investigarlo y aprender a controlarlos, pero si ustedes pueden acer un resumen de la tecnologia que utilizan se los agradeceria, pero mi afan no es ser exigente, solo necesito algo de lo que buscar, algo que me pueda guiar a la forma de utilizar estas pantayas y no tener que sedecharlas por no saber usarlas...


----------



## juan47 (Dic 29, 2011)

Es un VFD (vacuun fluorescent display)
Encontrarás mucha información en la red, pero pocos ejemplos en su funcionamiento
te adjunto un archivo, a ver si te orienta
Un saludo


----------



## gonzalocg (Dic 29, 2011)

grasias por la informacion, haora comprendo el funcionamiento de estos displays, pero tenias razon, casi no hay diagramas de aplicaciones practicas, pero en fin, haora podre reutilizarlos, grasias


----------



## Gudino Roberto duberlin (Dic 29, 2011)

Amigo, antiguamente se presentaron al mercado con un formato similar a una valvula de vacio, conocido como tubo de "nixie".


----------



## Scooter (Dic 29, 2011)

Hasta donde se esos dislays se usan exactamente igual que sus equivalentes LCD, igual que en el LCD no se controla el display directamente sino que se envían las señales y una controladora es la que lo hace aquí igual.
Noritake tenía displays de ese tipo que eran reemplazo directo de los LCD. http://www.noritake-elec.com/


----------



## fdesergio (Dic 29, 2011)

Scooter dijo:


> Hasta donde se esos dislays se usan exactamente igual que sus equivalentes LCD, igual que en el LCD no se controla el display directamente sino que se envían las señales y una controladora es la que lo hace aquí igual.
> Noritake tenía displays de ese tipo que eran reemplazo directo de los LCD. http://www.noritake-elec.com/



Muy buen dato, lastima los precios y lo lejos que estan  pero me  uno, chauuuuuu


----------



## Alex_Sade (Abr 2, 2020)

Buenas, estoy empezando un proyecto para darle una nueva vida a un Pionner cdj800, el cual quiero controlar por MIDI. Para empezar quiero averiguar como controlar las pantallas de este. Empezando por la pantalla central (JogWhee), la cual es una pantalla VFD controlada mediante un shift register de 64bits. Hasta aqui todo correcto, para modificar estos registros voy a emplear un Arduino UNO. Por el momento he hecho un bucle para que me vaya cambiando bit a bit para ver lo que hace cada uno. Por lo que veo, los primeros 2 byte corresponden a las grid (tiene 11 grid, pero tiene bits que no hacen nada) y los restantes 6bytes corresponden a los diferentes segmentos. Ahora, modificando los bits solo consigo apagar los grid o apagar los segmentos, no he podido apagar un segmento de un grid. A ver si me explico mejor: si pongo todos los bits en '0' toda la pantalla se queda iluminada, si pongo un '1' en la primera posicion (corresponde a un grid) y un '1' en la ultima posicion (corresponde a un segmento), me apaga ambos, no me apaga el segmento de el grid seleccionado!. Espero haberme explicado bien! adjunto algo de documentacion (la foto corresponde a un '1' en la ultima posicion).


----------



## capitanp (Abr 2, 2020)

no se entendio pero quizas tenga otra función ese bit


----------



## Alex_Sade (Abr 2, 2020)

A que bit te refieres?, creo que tengo todos los bits localizados, los bits que no realizan niguna funcion corresponden a pines del shifter que quedan libres

Bueno al final he avanzado algo, este documento me a ayudado mucho por si a alguien le interesa:








						A Guide to Fundamental VFD Operation - Noritake Co., Inc. Electronics Division
					

Learn about the technology behind Noritake VFDs (Vacuum Fluorescent Display). Explore display construction, signal timings, and the grid and anode power supply.




					www.noritake-elec.com
				




No se aprecia muy bien en la imagen, pero me deja algo de sombra entre la primera "impresion" y la segunda. E intentado desfasar entre una y otra un poco y parece que mejora un poquito. Puede ser que el arduino UNO no sea lo suficiente mente rapido?


----------



## Alex_Sade (Abr 6, 2020)

Buenas a ver si podeis ayudarme estoy grabando en un shifter de 64bits, con el metodo de ShiftOut que envia de byte en byte, en eso no hay problema, el problema que tengo es el siguiente: Hay momentos en el codigo que tengo que desplazar los 6 últimos bytes y hay otros que tengo que desplazar los dos primeros (si desplazar los restantes), ahora mismo lo estoy haciendo de una manera complicada que es crear un array de 8bytes y ir modificando byte a byte, pero se hace muy tedioso, ¿hay alguna forma de separar la cadena y despues volverla a juntar o algo así?. Muchas gracias por adelantado!


----------



## Dr. Zoidberg (Abr 6, 2020)

Esto es puro C. Ajustá los tipos de datos a tu necesidad:


```
typedef union {
    char bytes[8];
    long long largo;
} de64bitsa8bytes;

....

de64bitsa8bytes dato;
dato.largo=12345667890123456789LL;

for( i=0; i<8; i++) {
    Serial.print( dato.bytes[i] );
}
...
/* juego con los bytes */
/* dato.largo ya queda listo directamente con el resultado de las modificaciones de los bytes.
   No hay que hacer nada raro para juntar los bytes por que la "union" genera el código para hacerlo. */
```


----------



## Alex_Sade (Abr 6, 2020)

Muchas gracias por a respuesta! pero me lo podrías explicar un poco? typedef union es un tipo de estructura? (no lo he utilizado nunca), si es un tipo de estructura que despues se une (imagino que es eso) estarias formando una variable de 128bits no? yo lo que quiero es añadir a una variable de 6bytes otra de 2bytes para tener los 8 bytes. Me suelo explicar muy mal lo siento! jeje


----------



## Dr. Zoidberg (Abr 6, 2020)

No es una estructura, es una *union* !!, que es "parecida" a una estructura pero *todos los miembros comparten el mismo almacenamiento en memoria*, así que solamente hay 64 bits compartidos entre el long long y los 8 char.


----------



## Alex_Sade (Abr 6, 2020)

Entonces ahi lo que haces es convertir el array de char en una unica cadena de bits no?
Lo que me gustaria hacer es más o menos esto:

```
long long a = B00000000100000000000000000000000>>1;
int b = B00001000>>1;
//Ahora quiero sustituir los primeros 2 bytes de la variable a por los de la variable b para que quede algo asi:
a = B00000100010000000000000000000000;
//He pensado en hacerlo con un OR
a = a | b;
//Pero esto me lo añadiria al final de la cadena no? y quedaria algo como esto (pienso)
a = B00000000010000000000000000000100;
```


----------



## Dr. Zoidberg (Abr 6, 2020)

Alex_Sade dijo:


> Entonces ahi lo que haces es convertir el array de char en una unica cadena de bits no?


Básicamente sí, pero la conversión es "bidireccional". 64 bits <--> arreglo de 8 bytes


----------



## Alex_Sade (Abr 6, 2020)

Estaba editando el mensaje anterior!


----------



## Dr. Zoidberg (Abr 6, 2020)

Alex_Sade dijo:


> Lo que me gustaria hacer es más o menos esto:
> 
> ```
> long long a = B00000000100000000000000000000000>>1;
> ...


y sí, está mal por que el long long y el int no tienen el mismo tamaño y la operación lógica siempre arranca en el bit menos significativo.
Usando la union podés hacer esto:

```
de64bitsa8bytes dato;
dato.largo = B00000000100000000000000000000000>>1;
dato.bytes[0] = B00001000>>1;
```
y listo, el "largo" ya tiene el MSB modificado...

Solo hay que verificar si es el bytes[0] o el bytes[8]....pero juraría que es el [0]


----------



## Alex_Sade (Abr 6, 2020)

vale... y hacer eso no seria lo mismo que hacer:

```
long long a = B00000000100000000000000000000000>>1;
long long b = B00000100000000000000000000000000>>1;

a = a | b;
```
y ocuparia el mismo espacio en memoria tambien no? por que si tienes que declarar un array de 8bytes para solo utilizar la primera posicion estas a la misma...


----------



## Dr. Zoidberg (Abr 6, 2020)

Alex_Sade dijo:


> vale... y hacer eso no seria lo mismo que hacer:
> 
> ```
> long long a = B00000000100000000000000000000000>>1;
> ...


Me parece que no estás entendiendo nada de las uniones, leíste el link que te pasé??

En tu código declarás dos variables *long long ==> gastás 16 bytes ==> 128 bits*.
En el mío solo declaro *una sola unión que ocupa SOLAMENTE 64 bits* por que el long long y el arreglo de 8 char VIVEN JUNTOS EN EL MISMO ESPACIO DE MEMORIA!!! La contraparte es que solo se puede usar uno u otro cada vez, pero en este caso viene como anillo al dedo por que uso el long long para inicializar, el arreglo para operar y el long long para usar el resultado.
Si no entendés las *union *no tiene caso seguir...


----------



## Alex_Sade (Abr 6, 2020)

Ostia vale... ahora lo entiendo! pero eso me presenta otro problema... si hago largo>>1 me correra desde la posicion 0 del array y necesito que lo haga desde la posicion 2 y modifique hasta la 7. Por que lo 2 primeros bytes no los quiero desplazar en ese momento y como es el mismo espacio de memoria si que lo hará...


----------



## Dr. Zoidberg (Abr 6, 2020)

Alex_Sade dijo:


> Por que lo 2 primeros bytes no los quiero desplazar en ese momento y como es el mismo espacio de memoria si que lo hará...


Lo probaste???
Si nó, no especulés. Escribí el código y hacelo funcionar...son 10 líneas.
El desplazamiento es sobre UN BYTE, no tiene por qué tocar los otros...

Y probá si es con bytes[0] o bytes[7], por que lo acabo de probar en mi PC (no el código Arduino, sino C ANSI sobre Intel) y es el bytes[7]...al menos usando el GCC


----------



## Alex_Sade (Abr 6, 2020)

A ver, si hago un desplazamiento sobre una posicion del array no hay problema ya me ha quedado claro, ahora el problema es si lo hago sobre la variable de los 64bits (largo), por que si me afectara a TODOS los bytes.


----------



## Dr. Zoidberg (Abr 6, 2020)

Alex_Sade dijo:


> A ver, si hago un desplazamiento sobre una posicion del array no hay problema ya me ha quedado claro, *ahora el problema es si lo hago sobre la variable de los 64bits (largo), por que si me afectara a TODOS los bytes*.


Y es así como debe ser en ese caso...
Según la teoría el long long es un tipo atómico, así que no podés esperar algo diferente si le aplicás un desplazamiento a la variable long long.


----------



## Alex_Sade (Abr 6, 2020)

entonces como puedo hacerlo?


----------



## Dr. Zoidberg (Abr 6, 2020)

Alex_Sade dijo:


> entonces como puedo hacerlo?


     
Y trabajando con los bytes individuales que están en el arreglo....
Para eso lo hemos dividido usando la "union"...


----------



## Alex_Sade (Abr 6, 2020)

Asi lo estoy haciendo ahora... Trabajo con un array de bytes, pero se vuelve muy complicado todo. A ver si alguien se le ocurre otra cosa por que nose si podre manejar dos variables de 64bits con el arduino para hacer el OR entre ellos...


----------



## Dr. Zoidberg (Abr 6, 2020)

Por que mejor no explicas claramente las operaciones que querés hacer, por que no se entiende.
Hablás de desplazar 16 bits pero solo trabajas sobre 8 o 64. Por que no posteás la secuencia de modificaciones completas??


----------



## Alex_Sade (Abr 7, 2020)

Es algo bastante complejo, tal vez deberia de crear un hilo para el proyecto, pero bueno voy a intentar explicarme: Estoy intentado hacer funcionar una pantalla VFD, esta compuesta por rejillas y segmentos. Pues bien en este caso la pantalla es de tipo circular, aqui tienes una imagen con un segmento apagado y todas las rejillas encendidas:


			https://www.forosdeelectronica.com/attachments/img20200401162521-jpg.188326/
		

Esto esta gestionado mediante un Shifter de 64bits, los primeros 2Bytes corresponde a la rejilla y los otros 6Bytes corresponden a los segmentos. Para hacer una animacion que recorra toda la circunferencia tengo que desplazar un bit a apatir del tercer byte (por que los dos anteriores corresponden a las rejillas) y en el 6º bit del Byte nº6 tiene que desplazar el Byte nº2 para cambiar de rejilla. Espero haberme explicado mejor, a ver si tengo tiempo y creo el codigo con las dos frases de 64bits como comento anteriormente para que se entienda mejor. Un saludo


----------



## Alex_Sade (Abr 22, 2020)

Bueno al fín he conseguido realizar lo que queria, al final que tenido que tratar byte por byte lo que me ha costado unas cuantas lineas de codigo pero bueno!. El siguiente problema que tengo es el ghosting. Que no encuentro manera de eliminarlo. ¿Puede ser que el arduino no tengo suficiente velocidad? o estoy haciendo alguna cosa mal?. Ahora mismo el codigo lo que hace es:
1º ilumina todo el display excepto la rejilla correspondiente a los segmentos que me interesa apagar.
2º ilumina todas las rejillas excepto los segmentos que me interesa apagar (un segmento corresponde a varias rejillas de ahí el ghosting).
Aquí teneis el video para que se entienda mejor:


----------

