This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
vfd_driver [2016/01/27 10:57] – add vfd and hv518 kingkevin | vfd_driver [2024/01/07 17:49] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
The firefly conductor is a vacuum fluorescent display (VFD) driver/ | The firefly conductor is a vacuum fluorescent display (VFD) driver/ | ||
- | {{: | + | {{: |
Main parts: | Main parts: | ||
Line 24: | Line 24: | ||
===== VFD ===== | ===== VFD ===== | ||
- | {{ : | + | ==== introduction ==== |
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
The SER6500 VFD comes with 3 {{: | The SER6500 VFD comes with 3 {{: | ||
They each can driver 32 channels (up to 90V). | They each can driver 32 channels (up to 90V). | ||
- | The VFD segments start already to be visible at 5V, but to get them bright you need higher voltages (I use 60V). | + | The VFD segments start already to be visible at 5V, but to get them bright you need higher voltages (I use 50V). |
This is particularly important because you have to drive the digits and matrix one after each other. | This is particularly important because you have to drive the digits and matrix one after each other. | ||
If you do it fast enough, thanks to the persistence of vision they will not appear as flickering. | If you do it fast enough, thanks to the persistence of vision they will not appear as flickering. | ||
Line 43: | Line 50: | ||
That leaves us with 10+(7+3)+12+(5*5)=57 pins. | That leaves us with 10+(7+3)+12+(5*5)=57 pins. | ||
And this is also why 3 VFD drivers are need, because each can only control up to 32 channels. | And this is also why 3 VFD drivers are need, because each can only control up to 32 channels. | ||
+ | |||
+ | ==== HV518 ==== | ||
{{ : | {{ : | ||
Line 55: | Line 64: | ||
This allows to chains them and shift the 3X32 data bits using a single line (the CLK pin is shared). | This allows to chains them and shift the 3X32 data bits using a single line (the CLK pin is shared). | ||
+ | ==== pinout ==== | ||
+ | |||
+ | {{ : | ||
+ | The CN2 connector at the bottom of the SER6500 has the following pinout: | ||
+ | - GND: ground | ||
+ | - VDD: 5V to power the HV518 VFD driver | ||
+ | - VPP: <90V to drive the VFD segments | ||
+ | - DIN: to shift the data in | ||
+ | - CLK: clock to shift the data, on the clock rise | ||
+ | - #LE: enable latch on low (aka. negative LE, or NLE) | ||
+ | - STR: strobe the shifted data | ||
+ | - AUX: connected to ground when the auxiliary display is present | ||
+ | |||
+ | {{ : | ||
+ | The CN1 connector at the top of the SER6500 is used to forward the signals to the auxiliary VFD (to display the price for the customer). | ||
+ | The second VFD has 10 digits, and is a copy of the 10 digits from the main VFD (minus comma and underline). | ||
+ | |||
+ | The AUX pin of CN2 is shorted to ground when the auxiliary VFD is connected. | ||
+ | You can use the AUX pin to detect if the auxiliary VFD is present by pulling the pin up and checking if it's low (because shorted to ground). | ||
+ | You can also the use AUX pin as second ground pin (i.e. for the VPP power suply). | ||
+ | If the auxiliary VFD is not present, just short the 3rd right-most top pin with the 2nd right-most bottom pin. | ||
+ | |||
+ | ==== segments ==== | ||
+ | |||
+ | The three HV518 are chained. | ||
+ | To control all the VFD segments you just have to shift 3x32 bits. | ||
+ | |||
+ | In the following tables the left-most 32-bit word is transmitted first, with least significant bit (right-most) shift first. | ||
+ | |||
+ | {{ : | ||
+ | grid selection (for digits and dot matrix) | ||
+ | ^ hex value (3x32 bits) ^ word ^ bit ^ display type ^ grid position ^ | ||
+ | | 00000000 00000008 00000000 | 2 | 4 | matrix | 1 | | ||
+ | | 00000000 00000004 00000000 | 2 | 3 | matrix | 2 | | ||
+ | | 00000000 00000002 00000000 | 2 | 2 | matrix | 3 | | ||
+ | | 00000000 00000001 00000000 | 2 | 1 | matrix | 4 | | ||
+ | | 80000000 00000000 00000000 | 1 | 32 | matrix | 5 | | ||
+ | | 40000000 00000000 00000000 | 1 | 31 | matrix | 6 | | ||
+ | | 20000000 00000000 00000000 | 1 | 30 | matrix | 7 | | ||
+ | | 10000000 00000000 00000000 | 1 | 29 | matrix | 8 | | ||
+ | | 08000000 00000000 00000000 | 1 | 28 | matrix | 9 | | ||
+ | | 04000000 00000000 00000000 | 1 | 27 | matrix | 10 | | ||
+ | | 02000000 00000000 00000000 | 1 | 26 | matrix | 11 | | ||
+ | | 01000000 00000000 00000000 | 1 | 25 | matrix | 12 | | ||
+ | | 00000000 00002000 00000000 | 2 | 14 | digit | 1 | | ||
+ | | 00000000 00001000 00000000 | 2 | 13 | digit | 2 | | ||
+ | | 00000000 00000800 00000000 | 2 | 12 | digit | 3 | | ||
+ | | 00000000 00000400 00000000 | 2 | 11 | digit | 4 | | ||
+ | | 00000000 00000200 00000000 | 2 | 10 | digit | 5 | | ||
+ | | 00000000 00000100 00000000 | 2 | 8 | digit | 6 | | ||
+ | | 00000000 00000080 00000000 | 2 | 8 | digit | 7 | | ||
+ | | 00000000 00000040 00000000 | 2 | 7 | digit | 8 | | ||
+ | | 00000000 00000020 00000000 | 2 | 6 | digit | 9 | | ||
+ | | 00000000 00000010 00000000 | 2 | 5 | digit | 10 | | ||
+ | |||
+ | {{ : | ||
+ | grid selection (for digits and dot matrix) | ||
+ | ^ hex value (3x32 bits) ^ word ^ bit ^ segment ^ | ||
+ | | 00000000 00004000 00000000 | 2 | 15 | underline | | ||
+ | | 00000000 00008000 00000000 | 2 | 16 | dot | | ||
+ | | 00000000 00010000 00000000 | 2 | 17 | comma | | ||
+ | | 00000000 00020000 00000000 | 2 | 18 | a | | ||
+ | | 00000000 00040000 00000000 | 2 | 19 | b | | ||
+ | | 00000000 00080000 00000000 | 2 | 20 | c | | ||
+ | | 00000000 00100000 00000000 | 2 | 21 | d | | ||
+ | | 00000000 00200000 00000000 | 2 | 22 | e | | ||
+ | | 00000000 00400000 00000000 | 2 | 23 | f | | ||
+ | | 00000000 00800000 00000000 | 2 | 24 | g | | ||
+ | |||
+ | {{ : | ||
+ | grid selection (for digits and dot matrix) | ||
+ | ^ hex value (3x32 bits) ^ word ^ bit ^ column ^ row ^ | ||
+ | | 00000000 01000000 00000000 | 2 | 25| 1 | 1 | | ||
+ | | 00000000 02000000 00000000 | 2 | 26 | 1 | 2 | | ||
+ | | 00000000 04000000 00000000 | 2 | 27 | 1 | 3 | | ||
+ | | 00000000 08000000 00000000 | 2 | 28 | 1 | 4 | | ||
+ | | 00000000 10000000 00000000 | 2 | 29 | 1 | 5 | | ||
+ | | 00000000 20000000 00000000 | 2 | 30 | 1 | 6 | | ||
+ | | 00000000 40000000 00000000 | 2 | 31 | 1 | 7 | | ||
+ | | 00000000 00000000 00000001 | 3 | 1 | 2 | 1 | | ||
+ | | 00000000 00000000 00000002 | 3 | 2 | 2 | 2 | | ||
+ | | 00000000 00000000 00000004 | 3 | 3 | 2 | 3 | | ||
+ | | 00000000 00000000 00000008 | 3 | 4 | 2 | 4 | | ||
+ | | 00000000 00000000 00000010 | 3 | 5 | 2 | 5 | | ||
+ | | 00000000 00000000 00000020 | 3 | 6 | 2 | 6 | | ||
+ | | 00000000 00000000 00000070 | 3 | 7 | 2 | 7 | | ||
+ | | 00000000 00000000 00000100 | 3 | 9 | 3 | 1 | | ||
+ | | 00000000 00000000 00000200 | 3 | 10 | 3 | 2 | | ||
+ | | 00000000 00000000 00000400 | 3 | 11 | 3 | 3 | | ||
+ | | 00000000 00000000 00000800 | 3 | 12 | 3 | 4 | | ||
+ | | 00000000 00000000 00001000 | 3 | 13 | 3 | 5 | | ||
+ | | 00000000 00000000 00002000 | 3 | 14 | 3 | 6 | | ||
+ | | 00000000 00000000 00004000 | 3 | 15 | 3 | 7 | | ||
+ | | 00000000 00000000 00010000 | 3 | 17 | 4 | 1 | | ||
+ | | 00000000 00000000 00020000 | 3 | 18 | 4 | 2 | | ||
+ | | 00000000 00000000 00040000 | 3 | 19 | 4 | 3 | | ||
+ | | 00000000 00000000 00080000 | 3 | 20 | 4 | 4 | | ||
+ | | 00000000 00000000 00100000 | 3 | 21 | 4 | 5 | | ||
+ | | 00000000 00000000 00200000 | 3 | 22 | 4 | 6 | | ||
+ | | 00000000 00000000 00400000 | 3 | 23 | 4 | 7 | | ||
+ | | 00000000 00000000 01000000 | 3 | 25 | 5 | 1 | | ||
+ | | 00000000 00000000 02000000 | 3 | 26 | 5 | 2 | | ||
+ | | 00000000 00000000 04000000 | 3 | 27 | 5 | 3 | | ||
+ | | 00000000 00000000 08000000 | 3 | 28 | 5 | 4 | | ||
+ | | 00000000 00000000 10000000 | 3 | 29 | 5 | 5 | | ||
+ | | 00000000 00000000 20000000 | 3 | 30 | 5 | 6 | | ||
+ | | 00000000 00000000 40000000 | 3 | 31 | 5 | 7 | | ||
+ | |||
+ | ===== micro-controller ===== | ||
+ | |||
+ | The hardware used to control this VFD is a [[stm32f1xx# | ||
+ | |||
+ | The firmware is available [[https:// | ||
+ | It : | ||
+ | * starts by testing all segments of the VFD | ||
+ | * plays an animation | ||
+ | * and finally displays the text typed in over the USB CDC ACM or USART1 ports | ||
+ | |||
+ | The data is shifted out from the micro-controller to the drivers using SPI (this protocol fits well what the HV518 requires). | ||
+ | A timer will periodically refresh all parts of the VFD at 100 Hz. | ||
+ | |||
+ | Since the STM32 provides only 3.3V I/Os and the HV518 requires 5V signals I used a simple [[http:// | ||
+ | But actually it works fine also without, by directly connecting the HV518 to the STM32. | ||
+ | |||
+ | Connection: | ||
+ | ^ STM32 signal ^ board pin ^ VFD CN2 pin ^ HV518 signal ^ | ||
+ | | | GND | 1 | GND | | ||
+ | | | 5V | 2| VDD | | ||
+ | | | | 3 | VPP | | ||
+ | | SPI1_MOSI | PA7 | 4 | DIN | | ||
+ | | SPI1_SCK | PA5 | 5 | CLK | | ||
+ | | GPIO | PA4 | 6 | NLE | | ||
+ | | GPIO | PA6 | 7 | STR | | ||
+ | | | | 8 | AUX | | ||
+ | |||
+ | The VPP and GND pins to drive the VFD segments are provided using an external power supply. | ||
+ | I use a [[http:// |