These display panels were lying around for quite some time now, waiting for an hypothetical interest. I decided to gave them a bit more focus after the interest shown on the dittohead's page : https://hackaday.io/page/3002-giant-nixie-panel-from-ussr The challenge here is in several parts. - Finding documentations and translate them. - Driving the elements with >360 volts. - Find a solution to drive the 128 inputs from few microcontroller GPIO - Ultimately make it controllable with I2C/SPI/serial
There is different kind of these panels, some in a green dot 32x32 matrix, others are alternating green/orange 64x64, or even an alternating Red/Green/Blue 64x64 matrix.
I'm not sure if the light is emitted from a phosphore as the VFDs or by a gas as the Nixie tubes.
A large part of the scanning process can be achieved with logic components, such as counters and latches. However the high voltage boards are kept simple and are only enabled with a 8 bits tri-state buffer. They are controlled by a PIC18F87K90, and connected as the following:
And the signals generated by the micro controller are:
I have a MPU-9250 IMU and a raspberry-pi zero. However I need to adapt the code for this accelerometer, and send the data to the screen with the serial port. I'm more comfortable with Java than C or python, then I translate the code from https://github.com/adafruit/Adafruit_PixelDust in Java.
It's a mix between what is yet accomplished and what remains to do...
Half of the screen is cabled, it is yet at the level of the 32x32 kind of these displays.
The PIC18F89K90 program seems functional, so I wrote a tiny Java program to send to it some images. It grabs a screenshot of the 64x64 pixels surrounding the mouse cursor, converts it to green-orange pixels and sends the data to the serial port every seconds.
Despite some remaining artifacts, it start to be useful. I suspect the resistor that puts the cathodes to the bias voltage in order to inhibit it is a bit too high.
I'm quite advanced now with the soldering of the boards. However I'd like to test the multiplexing of them.
First I start to think how mount everything on the screen back :
It fits very sharp on the diagonal.
I decided to switch to a smaller micro controller, one of the PIC I already have and used for the LCD big_clock. With it I can easily scan the boards and pins plus enable serial interface. It have plenty enough of RAM as well.
Then I cabled 2 boards for 16x16 pixels drive :
And well, it start to be more and more likely this strategy could work !
The perfect OSHPark PCBs arrived today, fedex instead of usps this time.
So it's time to test ! Nope, first warm this soldering iron... There are 92 components per board... However it is always a pleasure to work on these purple boards, they are really accurate and well made.
I noticed I made small mistakes on the numbering, such as labeling the inputs from 1 to 8, but the outputs from 0 to 7...
But... it's working :)
The voltage source is 180v and correctly multiplied by two for the anodes. I still have some artifacts during animation: some pixels take some time to switch off. That's why I let separated on the circuit the voltage source for the anodes and the bias voltage for the cathodes. Maybe some better parameters can be found.
The next steps now are the following. Solder 7 more boards. Make a quick micro-controller program to scan correctly the 32 inputs (8 anodes data, 8 anode board select, 8 cathodes select and 8 cathode board select). Mount everything together. Send data from a computer or raspberry pi to the uC with the serial port.
Usually dot matrix displays use shift register, demux, counters to scan the column while driving the rows. In the most multiplexed option, only 2/3 timing and one data lines are needed. A frame sync, a column clock and a pixel clock. Then the pixel data is synced one by one. Resulting a rather high frequency toggling on the data line.
I would like to try to send the data 8 by 8, so for a 100Hz refresh rate, instead of 409.6KHz, it gives 51.2KHz. Doing so will reduce the logic components needed as well.
Before going further, I would like to test driving the anodes 8 by 8. The circuit to generate the 360V pulse need to charge a small capacitor, and my little power supply had to handle the current peak to charge them 8 by 8.
So I cabled 8 anode drivers on the breadboard but had to use the FMMTA42 SMD transistor for 4 cathodes as I didn't have enough MPSA42 transistors. I tried the timing parameters as if the all screen is driven. To summaries, the cathodes are switched one after the other at a 156us rate (100Hz * 64), then wait 10ms as if the screen is at 100Hz. And the 8 anodes are charged during a 8th of that time as there will be 8 block of 8 pixel to drive per cathode.
I think it needs some adjustments, mostly because I forgot here to introduce a small pause between the cathode switch. It results that some pixels are flipped with a small delay. However, it seems to be promising for more pixel driving.
The brightness could be improved by increasing the refresh rate, but I faced unstable pixel ignition. It is maybe due to a too short time to charge the capacitors.
Besides, the brightness is correct, below is in a room with the direct sun luminosity (3:00pm):
And then the same with two light bulb:
I spent few hours to draw a small PCB to drive 8 anodes and 8 cathodes. I've just put a logic buffer in order to have a 'chip select' line. That way I can quickly drive a full screen with 32 GPIO. It's a lot but doable with a microcontroller. The aim is to check rather easily if this driving strategy is valid before continuing. If it's working I can keep the 8x8 driver PCB and think about a more efficient logic.
In the view of making a PCB to hold the 64 anode drivers plus the 64 cathode ones, it is time to test some SMD components in order to make it as compact as possible.
For the transistor, there is apparently a equivalent from Diodes inc, the FMMTA42, 0.03€ in 250 quantity. The high voltage diode can be a bit expensive in smd format. However NXP has the BAS21VD, which is 3 diodes in a SOT package, 0.06€ in quantity of 100.
I would like to take some margin with the passive components regarding the max voltage rate. It appears resistor and capacitors are more easy to find in 1206 format than 0805 for a >200v grade.
Fortunately I have convenient adapter board to make some test on a breadboard to ensure the components works:
Here the second anode is driven with the SMD components while the others with the previous ones. No difference is visible, so maybe it's time to start KiCad. And start to think about some shift registers and demux to drive these circuits without the need of 128 GPIO!
Even before receiving the panel from ebay, I sought information on internet about how to use these displays. There is of course a short datasheet supplied with it, but no clear schematics for a driving circuit. The datasheet is shown in the dittohead's page.
I found someone managed to display a space invader on the 32x32 version and made a video of it :
I tried to extract a schematics from the video, but the type of the transistors and some values of resistor and capacitors are unreadable.
I deduced the following circuit, where the 360v needed to ignite the elements are produced by switching in serial with a 180v source a capacitor charged at the same 180v.
So I started to reproduce on a breadboard the circuit for one anode, and put one cathode to the ground. I used a 'nixie' high voltage power supply (by lumos.sk, nicely done by the way), some stupid guesses for the resistor and capacitor values, small diodes, and MPSA42 transistors.
I got the 360v short pulse when I put the transistor Q2 base to 5v.
And it lights up.
But a bit too bright, in the sens of I'm damaging the elements. It is clear too much current is drawn, or the pulse is too long. After few minutes of running the pixel got dark, event not powered, the burn is visible.