Close

Code snippets

A project log for VFD NTP Clock

I wanted a "never set" clock, so I made one using a VFD and Ethernet NTP.

pyroferPyrofer 08/01/2014 at 09:231 Comment

So a few people have been asking about getting these working. I can tell you it was a nightmare as they DON'T follow the datasheet for the normal Noritake display.

They come with custom firmware to make them emulate the older controllers used on the Bell Fruit machines.

One problem is that I think they use inverted data/clock/reset etc lines compared to the datasheet specs. You will NEVER get any response if you are accidentally holding it in reset all the time :)

Here are the sendbyte and reset routines I used,

void sendbyte(uint8_t d_chr)

{

unsigned char bit_cnt;

for(bit_cnt=0; bit_cnt<8; bit_cnt++)

{

if(d_chr & 0x80) digitalWrite(VFD_Data,HIGH);

else digitalWrite(VFD_Data,LOW);

d_chr <<= 1;

digitalWrite(VFD_Clock,LOW);

digitalWrite(VFD_Clock,HIGH);

}

}

void Reset_VFD(void)

{

digitalWrite ( VFD_Reset, HIGH );

delay(10);

digitalWrite ( VFD_Clock, HIGH);

digitalWrite ( VFD_Reset, LOW );

delay(50);

}

Here are the commands I have worked out so far, these will enable almost full control of the screen. You first have to enable extended commands, then turn on the extra font. After this user defined chars and full graphics mode should work but I haven't decoded how to do these yet.

#define REVERSE_SCROLL 0xa3

#define FORWARDS_SCROLL 0xa2

#define REVERSE_NOSCROLL 0xa1

#define FORWARDS_NOSCROLL 0xa0

#define CLEAR_SCREEN 0xb1 // b3

#define FLASH_SCREEN 0xd1 // contents stay flashing new chars dont

#define FLASH_OFF 0xd2

#define FLASH_LASTCHAR 0xd8 // make last char sent flash

#define SCREEN_OFF 0x80 // Doesn't clear contents

#define SCREEN_ON 0x81 // contents re-display

#define BRIGHTNESS 0x84 // followed by brightness byte (0==full 7=lowest) needs extended commands

#define ENABLE_EXTENDED 0x85 // turn on extra commands

#define ENABLE_LOWERCASE 0xbc // turn on extended font

#define USER_DEFINED_SUMMIT 0xa8 //  (for making user defined char)

#define SCROLL_FROM_0 0xe0

#define SCROLL_FROM_1 0xe1

#define SCROLL_FROM_2 0xe2

#define SCROLL_FROM_3 0xe3

#define SCROLL_FROM_4 0xe4

#define SCROLL_FROM_5 0xe5

#define SCROLL_FROM_6 0xe6

#define SCROLL_FROM_7 0xe7

#define SCROLL_FROM_8 0xe8

#define SCROLL_FROM_9 0xe9

#define SCROLL_FROM_10 0xea

#define SCROLL_FROM_11 0xeb

#define SCROLL_FROM_12 0xec

#define SCROLL_FROM_13 0xed

#define SCROLL_FROM_14 0xee

#define SCROLL_FROM_15 0xef

#define POS_1 0x90

#define POS_2 0x91

#define POS_3 0x92

#define POS_4 0x93

#define POS_5 0x94

#define POS_6 0x95

#define POS_7 0x96

#define POS_8 0x97

#define POS_9 0x98

#define POS_10 0x99

#define POS_11 0x9a

#define POS_12 0x9b

#define POS_13 0x9c

#define POS_14 0x9d

#define POS_15 0x9e

#define POS_16 0x9f

Discussions

Technics wrote 08/01/2014 at 11:49 point
Thanks for posting this. It seems the reason I wasn't seeing much was the reset line is inverted relative to the GU96x8M-K606C1 displays I've been using (and obviously the command set differences). These displays seem to use an ATMEGA8 as a controller. I wonder if the firmware has been locked or if it would be readable. It might be worthwhile trying to extract it if the commands to load graphics prove elusive. I'll get one of these up an running shortly and if I can't get it to display graphics I'll try extracting the firmware.

  Are you sure? yes | no