Vacuum Fluorescent Display

Hi,

I've been trying to use a Vacuum Fluorescent Display (VFD) with my Arduino. It comes from a credit card reader that I found in a dumpster. The driver for the display is the MM58248V by National Semiconductor. The thing that confuses me about this is that there are two chips used to drive the display. I have no idea where to start to use this with my Arduino.

The data sheet for the MM58248V:

The data sheet for the MM58241V:

The driver chips (MM58248V on the right, MM58241V on the left):

The front of the display:

The image links aren't image links. They are the same file as above.

Oops! I fixed it.

Looks nifty. I don't know what to say except to as if there are any open pins or sockets on the board, as in, anything that looks as if something was meant to plug into them?

There are two 20 pin headers that connect the pcb to the main pcb. The pcb with the screen also has the keypad and a connector for the magnetic card reader. I'm guessing that most of the pins on the headers are for the key pad and card reader. Is is possible to just solder a few wires (power, ground, data) to the chips and use the display that way?

I was wrong in saying that both driver chips are the same. The chip on the left is actually an MM58241V.

After poking around with my multimeter for a while, I found that the MM58241V is connected to one of the 20 pin headers. Here are the pins and their functions:

The other pins are connected to the controller for the magnetic card reader.

Here's some info that should be of help:

http://www.national.com/an/AN/AN-440.pd

This app note basically describes exactly the command flow necessary to use this board. It uses an MM58341 and MM58348---these are the same as the two ICs you have, except they only ouput up to 35V (your two can go as high as 60V).

What these two ICs don't drive, however, is the filament of the VFD. This can be either an AC or DC voltage, the magnitude of which varies with the display. DC voltages are generally only supposed to be for small displays on like car audio systems, but I've used DC to filaments meant for AC. The only issues with this are that large DC voltages may potentially damage the display filament (or so Ive heard), but more noticeably, that the resistance of the filament causes a voltage drop along the length of the display that causes a distinct difference in brightness from one side to the other. Basically, you'll have to try and see. Check this for a little more info:

The hardest part of this will be writing characters to this. Each 5X7 character will needed to be stored in a look up table on the arduino (i'm sure there is some code written for graphic LCDs that you can reuse for this).

If you don't know anything about VFDs, they work like this: a voltage is applied to the filament sufficient to heat it to the necessary temperature. Another voltaqe is then simultaneously applied to one or more grid connections, and one or more anode connections (in this case, dot connections). Each dot and/or symbol (for displays that dont use dots) that share those one of the grids and one of the anodes driven lights up. Usually, it's most useful to "strobe" one of the two, so that you can control each dot/segment/symbol individually. I've never used a dot matrix VFD, so I assume that each grid covers a different digit, and the anodes correspond to the 35 pixels of each digit.

Basically, to get this to work, you need the right voltages, a software serial library to shift the data out with (NewSoftSerial seems to be recommended nowadays), and, most importantly, to read the first pdf I linked, since it describes exactly what you are doing.

Your information was very helpful in helping me understand how these displays work. I am new at programming for Arduino so I am not exactly sure how to implement this. I've done some basic things like the blinking led, taking input from various sensors, etc. but that's it. If someone could throw together some pseudo code to help me along that would be great.
Thanks!

On the first PDF you posted, what language is the code at the end written in? I haven't seen it before.

If you mean all that LDD, JMP etc. stuff then that's assembly language that gets turned (by an assembler, or in the olden days by hand) directly into machine code that a microprocessor can execute. It's about the lowest level you can program at but gives you ultimate control over the speed and size of your code.

Andrew

Specifically, it's assembly code for the COPS 424C microprocessor mentioned in the introduction.

http://eshop.engineering.uiowa.edu/NI/pdfs/00/52/DS005259.pdf

Using the comments in the code, as well as the list of assembly instructions in this PDF, you might be able to get a better idea of what exactly is going on.

Since you're interacting w/ the controllers for the VFD display via a serial interface (and some other control/enable lines), you should be able to write the interface code in the arduino enviroment, or w/ a separate bit of C. If this were a parallel interface, that would be too slow, but you should be ok here.

The only issue you need to be concerned with is that since the VFD has to be written to continually, your main loop() can't be too long. That, or you'd need a timer interrupt setup that keeps writing to the VFD from a buffer, but that's too much work. If the code is too slow, the duty cycle to the VFD characters will be low enough that the display would probably dim (same idea as using PWM to control LED brightness), since the phosphors in the display are of the kind that fade quickly, to prevent image ghosting.