Help interfacing a multiplex VFD display

Go To Last Post
32 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I have a Futaba NA202MD13AA vacuum fluorescent display. It is a nice 20x2 display module with 2x Oki MSC1162A chips and one MSC1164 chip. They are available very cheaply at Prime Electronics.

These displays were apparently custom made for NCR, and I can find no programming information for the module as a whole, except for what is at this site.

Between that very high-level information and the datasheet on the (MS)C1162A, I've written some code for my Arduino (ATmega168), but I cannot get the the display to work. Nothing shows up. I'm pretty sure the display itself is functional because occasionally when I interrupt the microcontroller, I get some pixels lit on the display...just got lucky with spurious signals.

The module has a 10-pin socket, with the lines duplicated. According to the OVC site linked above the lines are Vcc, Gnd, Clock, Data, and Enable.

It appears that you need to clock in the raw bits for each column...there is no high level interface.

Does anybody have experience with writing code to interface with a similar display? I've pulled out what little hair remains, but I cannot figure out what I'm doing wrong!

I'd really appreciate some help from the hive mind.

Thanks.

-Pete

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

The component spec for the MSC1162A you provided a link to seems pretty straightforward. I'd expect that the modules you've bought use one of the 1162As to drive the 35 anode pixel rows, and the other 1162A to drive the 40 "digit drive enable" grids. Have you tried setting that "CHG" pin high to see if the display's alive (it should make every blessed pixel turn on at once)?

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Funny, I was working on this two weeks ago and just fired up AVR Studio to have another crack at it! I was having trouble displaying much at all but I was able to get some garbled patterns to show up. The write-up at that OVC site was very, very sparse. The controller on the display is pretty spartan, we have to display a single column at a time and rapidly scan through the columns to display all the characters.

I ended up reversing the PCB and came up with the attached schematic. The labels and pins of all of the parts in the schematic are as they appear on the PCB. The perplexing thing about it is the shift register and the unknown transistor Q1. If Q1 is an enhancement NMOS, then it would seem the shift register is always clearing some of the shifted-in bits with a hard short to ground. Q1 isn't a BJT, at least from testing for diodes across the pins. The 1KMµ markings suggest it is perhaps a Toshiba 2SK2009 enhancement NMOS or a ON Semi MMBT6428LT1 NPN BJT. Still, the markings for those transistors aren't exact matches.

I have notes somewhere about the clock polarity, idle state, and all that jazz somewhere but I can't seem to find them right now.

I join Peter in calling for help. Any ideas about what that fangled shift register does? Also, how did the OVC specs conclude 2 zero bits between the character bits?

-Jevin

Edit: For testing, I found it is useful to clock out a constant stream of alternating 1's and 0's for a nice checker-box pattern.

Edit 2: What is with the weird pullups and pulldowns on all of the input lines?

Edit 3: I'm on a roll! I just wanted to note that Q1 on my schematic is just my guess as to what it really is. I'm not sure! What the pins connect to, however, is depicted correctly in the schematic.

Attachment(s): 

Math is cool.
jevinskie.com

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

It is possible to get them to work--I got one displaying simple chartacters a few months ago, though they seemed "upside down" & not in the position I expected. I had to put it all aside,but thought with "just a few more" hours I could get it finished off. I'll dig around and see if I can find my most meager code.

Hoyt

When in the dark remember-the future looks brighter than ever.   I look forward to being able to predict the future!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I got a Noritake 132x48 VFD to work despite the fact that the datasheet was written in the most obscure translation of English I've ever tried to parse. We got the raw glass with the row and column drivers, but no controller. It takes most of the AVRs time refreshing the display often enough to make the flicker smooth out.

Imagecraft compiler user

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

In fact, Noritake use AVRs on their newer graphic VFD modules ;)

(modules like the GU144x40D-K610A4)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Just what I was going to suggest! Plunk a 2313 down somewhere, and give it the job of refreshing the display hardware, under commands received via UART

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

They use mega16 and mega32, depending on the size of the display. For the 144x40 display you need 720 bytes of RAM; a 2313 won't do ;)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Ok, glad to see some response! I had begun to despair that I was the only person on the planet (or at least on the internet) who was trying to make one of these things go!

I hooked my lashup to my 16500C logic analyzer, and as far as I can tell, I'm making the lines jump at the right times (clock low, data high, clock high, data low, etc), but still nada.

The OVC site mentions pulsing the enable line before sending the data, and again at the end of the 92 bit sequence. Looking at the timing diagram on the datasheet, I can see the "end of data stream" pulse on the LS pin, but I don't see a corresponding one for the start of the sequence. I'm wondering if the issue I'm having is simply not sending the correct "wakeup" or reset/init sequence to the display.

Any thoughts?

Also, as best I can figure, the "enable" pin on the header maps to the LS pin on the MSC1162A. Is that what you all are going with? Am I looking at the wrong line on the timing diagram?

Thanks!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Pete,

Check out the schematic I posted. It has all of the relevant connections on all of the ICs.

-Jevin

Math is cool.
jevinskie.com

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Ah, looks like it is tied to both LS and CL. Hmmm. I'm feeling pretty under the weather now, which isn't helping the 'ol noodle work...I'm still not seeing my error. :-(

I'll circle back and look at all this stuff again this weekend when hopefully I'm more functional.

Thanks.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Ok, with some help on another forum, I got it to display! The code below is very simple, and unoptimized, but it is a starting point.

Still need to make a lookup table for ASCII so I can talk to it with something other than bitmaps. :-)

// Arduino VFD Driver Library
// Author: Peter Loron, peterl at standingwave.org
//
// v0.2 - 04 OCT 2008
//
// Developed for the Futaba NA202MD13AA VFD
//
// Information gathered from http://wiki.ovccorp.com/index.php?pagename=Futaba%20NA202MD13AA
//

//define IO pins
int pin_data = 2; // TP-4
int pin_clock = 3; //TP-6
int pin_enable = 4; //TP-8
boolean enableLow;
boolean E [] = {1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,1,1,1};


void setup() 
{ 
  //setup control pins
  pinMode(pin_data, OUTPUT);
  pinMode(pin_clock, OUTPUT);
  pinMode(pin_enable, OUTPUT);

  digitalWrite(pin_clock, LOW);
  digitalWrite(pin_enable, HIGH);
  digitalWrite(pin_data, LOW);

  enableLow = false;
}

///////////////////////////////////////////////////////////////

void loop() 
{ 
  //display 3 columns of capital E characters
  sendColumn(1, E);
  sendColumn(9, E);
  sendColumn(19, E);

  delay(10); //fiddle with this for brightness adjust
}

//writes out a column
void sendColumn(int col, boolean character[]) {
  boolean lastBit = 0;

  //char 1
  for(int i = 0; i < 35; i++) {
    if(i==0) {
      writeToDisplay(character[i],false);
    } 
    else {
      writeToDisplay(character[i],false);
    }
  }

  //char 2
  for(int i = 0; i < 35; i++) {
    writeToDisplay(character[i],false);
  }

  //zero bits
  writeToDisplay(0);
  writeToDisplay(0);

  //column select
  for(int i = 0; i < 20; i++) {
    if(i == 19) { 
      lastBit = true; 
    }
    if(col == i) {
      writeToDisplay(1,lastBit);
    } 
    else {
      writeToDisplay(0,lastBit);
    }
  }
} 



//writes a bit to the display
void writeToDisplay(boolean val) {
  writeToDisplay(val,false); 
}

void writeToDisplay(boolean val, boolean trigger) {

  //start the clock cycle
  digitalWrite(pin_clock, HIGH);

  //raise the enable pin if we dropped it up the last time around
  if(enableLow) {
    digitalWrite(pin_enable, HIGH);
    enableLow = false;
  }

  //write out the data bit
  if(val == 0) {
    digitalWrite(pin_data, LOW);
  } 
  else {
    digitalWrite(pin_data, HIGH);
  }

  //finish the clock pulse
  digitalWrite(pin_clock, LOW);

  //finish the data pulse
  digitalWrite(pin_data, LOW);

  //if this is the last bit, trigger the shift by lowering the enable pin
  if(trigger) {
    digitalWrite(pin_enable, LOW);
    enableLow = true;
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

This bit of assembly code (written for GCC) will loop up an ASCII character in a font array that consists of five bytes that hold the 35-bits of the character. The MSB of the first byte is clocked out first, but I'm not sure if thats how it is on the hardware. The font generation or the loop can always be changed to accommodate that. The code below just sets the data pin and doesn't yet clock out the bit. That part is left as an exercise to the reader. I haven't tested the code yet because I wasn't sure about the specs of the VFD but it looks like that has been solved now! I look forward to trying this out later this week!

-Jevin

#include 

#define DATA_PORT PORTB
#define DATA_BIT  PB0
#define CLK_PORT  PORTB
#define CLK_BIT   PB1

.extern  font

   .text
.global  send_char
   .type send_char, @function

; character passed in r24
send_char:
   #if __AVR_HAVE_MUL__
   ; get offset into font array
   ldi r18, 5      ; 5 bytes per character
   mul r18, r24    ; offset = 5 * index of character
   
   ; find character address
   movw ZL, r0            ; move result of mul into Z
   subi ZL, lo8(-(font))  ; add low byte of font array address to offset
   sbci ZH, hi8(-(font))  ; add high byte of font array address
   
   ; we clobbered the zero register when using mul
   clr r1
   
   #else
   ; get offset into font array
   ; we don't have mul so shift left twice and add to multiply by 5
   clr r31        ; prepare r19 for carry shift in
   mov r30, r24   ; don't clobber the original character
   lsl r30        ; r31:r30 * 2
   rol r31        ; take care of carry out
   lsl r30        ; r31:r30 * 2
   rol r31        ; take care of carry out
   add r30, r24   ; r31:r30 + r24
   adc r31, r1    ; take care of carry out
   
   ; find character address
   subi ZL, lo8(-(font))  ; add low byte of font array address to offset
   sbci ZH, hi8(-(font))  ; add high byte of font array address
   
   #endif
   
   ; loop over the 35 bits in the character
   ldi r18, 35    ; r18 is the counter register
   loop:
      ; load r19 with the byte of the character
      lpm r19, Z+
      
      ; loop over all the bits in the character byte
      ldi r20, 8  ; shift out 8 bits
      loop2:
         dec r18
         bre done
         ; clear the data bit
         cbi _SFR_IO_ADDR(DATA_PORT), DATA_BIT
         ; set the data bit if the 7th bit in the character byte is set
         sbrc r19, 7
         sbi _SFR_IO_ADDR(DATA_PORT), DATA_BIT
         ; also need to clock the bit out in here
         
         ; rotate the 7th bit out of the character byte
         lsl r19
         dec r20
         brne loop2
   rjmp loop

done:
   ret
   .size	send_char, .-send_char

Math is cool.
jevinskie.com

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Cool! I will try to make time later this week to roll your code into my project and come up with a more general purpose character -> display system.

I also am going to try and set my code up to run on an interrupt, rather than in the main loop.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Here is some "TRASH" experimenting code that might be of some use...I was just messing around & trying to get something to show---I did have some luck in displaying characters....but had to stop to do real work. There are no comments, but the general sequence of events might be of some use.

I think I converted the 5x7 charset into data (column) bytes, though I found out each 5 byte set needed reversed to show properly.

.include "m88def.inc"


.def temp=r18
.def data=r19
.def random=r20
.def bitcount=r21
.def chbits=r22
.def vcolm=r23
.def bytecnt=r24
.def cnum=r25


.equ vclk=pd0
.equ vdata=pd1
.equ vload=pd2

 .org 0x0000

		rjmp	RESET		;main program starts here
		rjmp	EXT_INT0	;not used IRQ0 handler
		rjmp 	EXT_INT1	;not used IRQ1 handler
		rjmp	PCINT0H		;not used PCINT0 handler
		rjmp	PCINT1H		;not used PCINT1 handler
		rjmp	PCINT2H		;not used PCINT2 handler
		rjmp	WDT			;not used watchdog timer handler
		rjmp	TIM2_COMPA	;use to generate timer delays
		rjmp	TIM2_COMPB	;not used Timer2 compare B handler
		rjmp	TIM2_OVF	;not used Timer2 overflow handler
		rjmp	TIM1_CAPT	;not used Timer1 capture handler
		rjmp	TIM1_COMPA	;not used Timer1 compare A handler
		rjmp	TIM1_COMPB	;not used Timer2 compare B handler
		rjmp	TIM1_OVF	;not used Timer1 overflow handler
		rjmp	TIM0_COMPA	;not used Timer0 compare A handler
		rjmp	TIM0_COMPB	;not used Timer0 compare B handler
 		rjmp	TIM0_OVF	;not used Timer0 overflow handler
		rjmp	SPI_STC		;not used SPI transfer complete handler
		rjmp	USART_RXC	;UART Data receivded handler 
		rjmp	USART_UDRE	;not used UART UDR empty handler
		rjmp	USART_TXC	;not used UART TX complete handler		
		rjmp	ADC_DONE	;not used ADC conversion complete handler
		rjmp	EE_RDY		;not used EEPROM ready handler
		rjmp	ANA_COMP	;not used Analog comparator handler
		rjmp	TWI			;not used 2-wire serial handler
		rjmp	SPM_RDY		;not used Store Program memory ready
	;ANY UNSED INTERRUPT WILL GENERATE AN INTENTIONAL ENDLESS LOOP
EXT_INT0: 	
EXT_INT1: 	
PCINT0H:  
PCINT1H:	
PCINT2H:	
WDT:
tim2_compa:	
TIM2_COMPB:	
TIM2_OVF:   
TIM1_CAPT:
TIM1_COMPA:	
TIM1_COMPB:	
TIM1_OVF:	
TIM0_COMPA:	
TIM0_COMPB: 
TIM0_OVF:	
SPI_STC:
usart_rxc:	
USART_UDRE:	
USART_TXC:	
ADC_DONE:	
EE_RDY:		
ANA_COMP:
TWI:	
SPM_RDY:	rjmp spm_rdy


RESET:		ldi	temp, high(RAMEND)	;Main program begins here
			out SPH, temp			;set stack pointer high byte
			ldi temp, low(RAMEND)	;set high & low bytes
			out SPL, temp
			
			ser temp
			out ddrd , temp

			ser temp
			out ddrc, temp

			ser temp
			out portc, temp

		 
			cbi portd, vdata
			cbi portd, vclk
			cbi portd, vload
			
			
			sbi portd, vload
			nop
			cbi portd, vload

main:		ldi cnum,1*5  ;8
			rcall spitchar
			ldi cnum,0*5  ;5
			rcall spitchar   ;WORKS

		
			;=======================
			sbi portd, vdata
			nop

			sbi portd,vclk  ;1st zero
			nop
			cbi portd,vclk

			nop

			sbi portd,vclk   ;2nd zero
			nop
			cbi portd,vclk
			nop
	
			;=========select column

			cbi portd,vdata
			nop

			sbi portd,vclk
			nop
			cbi portd,vclk


			sbi portd,vdata
			nop

			sbi portd,vclk
			nop
			cbi portd,vclk
		

			ldi temp, 18

loop19:		cbi portd,vdata
			sbi portd,vclk
			nop
			cbi portd,vclk
			dec temp
			brne loop19

			cbi portd, vload
			rcall delay
			sbi portd, vload

;==================================

;================================
			
			rjmp main

delay:		push random
			ldi random, 2
rloop:		rcall ggg
			dec random
			brne rloop
			pop random
			ret


ggg:		push temp
			clr temp
dloop:		nop
			nop
			nop
			inc temp
			brne dloop
			pop temp
			ret


spitchar:	ldi zh, high(font*2)
			ldi zl,  low(font*2)
			add zl,cnum
			clr temp
			adc zh,temp

			ldi bytecnt ,5
nxtchbyt:	lpm chbits, z+

			ldi temp, 8
spit8:		cbi portd,vdata
			lsl chbits
			brcc clkit
			sbi portd, vdata
			nop			
clkit:		sbi portd,vclk
			nop
			cbi portd,vclk
			dec temp	
			brne spit8
			dec bytecnt
			brne nxtchbyt
			ret
			
font:	.db 3,152,177,98,167,\
			255,255,255,255,255
	;		3,105,50,100,182,56
			
		

;these need reversed order??
.db 0	,	192	,	19	,	0	,	0	,\
128	,	3	,	224	,	0	,	0	,\
148	,	63	,	229	,	79	,	1	,\
36	,	213	,	95	,	37	,	1	,\
163	,	9	,	130	,	44	,	6	,\
182	,	100	,	85	,	4	,	5	,\
128	,	194	,	0	,	0	,	0	,\
0	,	142	,	40	,	8	,	0	,\
128	,	160	,	136	,	3	,	0	,\
20	,	132	,	15	,	65	,	1	,\
8	,	132	,	15	,	129	,	0	,\
0	,	40	,	12	,	0	,	0	,\
8	,	4	,	2	,	129	,	0	,\
0	,	48	,	24	,	0	,	0	,\
32	,	8	,	130	,	32	,	0	,\
190	,	104	,	178	,	232	,	3	,\
0	,	225	,	31	,	8	,	0	,\
194	,	112	,	52	,	105	,	4	,\
161	,	96	,	113	,	25	,	3	,\
24	,	138	,	228	,	15	,	1	,\
167	,	98	,	177	,	152	,	3	,\
60	,	101	,	50	,	9	,	3	,\
129	,	120	,	162	,	48	,	0	,\
182	,	100	,	50	,	105	,	3	,\
134	,	100	,	50	,	229	,	1	,\
0	,	155	,	13	,	0	,	0	,\
0	,	171	,	13	,	0	,	0	,\
8	,	138	,	40	,	8	,	0	,\
20	,	10	,	133	,	66	,	1	,\
128	,	160	,	136	,	130	,	0	,\
130	,	64	,	52	,	97	,	0	,\
178	,	100	,	62	,	232	,	3	,\
254	,	68	,	34	,	225	,	7	,\
255	,	100	,	50	,	105	,	3	,\
190	,	96	,	48	,	40	,	2	,\
255	,	96	,	80	,	196	,	1	,\
255	,	100	,	50	,	25	,	4	,\
255	,	68	,	34	,	17	,	0	,\
190	,	96	,	50	,	169	,	3	,\
127	,	4	,	2	,	241	,	7	,\
193	,	224	,	63	,	24	,	4	,\
32	,	96	,	240	,	23	,	0	,\
127	,	4	,	69	,	20	,	4	,\
127	,	32	,	16	,	8	,	4	,\
127	,	1	,	67	,	240	,	7	,\
127	,	2	,	2	,	242	,	7	,\
190	,	96	,	48	,	232	,	3	,\
255	,	68	,	34	,	97	,	0	,\
190	,	96	,	52	,	228	,	5	,\
255	,	68	,	38	,	101	,	4	,\
198	,	100	,	50	,	25	,	3	,\
129	,	192	,	63	,	16	,	0	,\
63	,	32	,	16	,	248	,	3	,\
31	,	16	,	16	,	244	,	1	,\
63	,	32	,	12	,	248	,	3	,\
99	,	10	,	130	,	50	,	6	,\
7	,	4	,	28	,	113	,	0	,\
225	,	104	,	178	,	56	,	4	,\
128	,	127	,	48	,	8	,	0	,\
2	,	2	,	2	,	2	,	2	,\
128	,	96	,	240	,	15	,	0	,\
4	,	65	,	64	,	64	,	0	,\
64	,	32	,	16	,	8	,	4	,\
128	,	128	,	128	,	0	,	0	,\
32	,	42	,	149	,	138	,	7	,\
127	,	36	,	18	,	9	,	3	,\
56	,	34	,	145	,	72	,	4	,\
48	,	36	,	18	,	249	,	7	,\
56	,	42	,	149	,	138	,	5	,\
0	,	132	,	63	,	33	,	0	,\
72	,	42	,	149	,	202	,	3	,\
127	,	4	,	2	,	1	,	7	,\
0	,	128	,	30	,	0	,	0	,\
32	,	32	,	176	,	7	,	0	,\
128	,	63	,	4	,	69	,	4	,\
128	,	224	,	31	,	8	,	0	,\
124	,	2	,	142	,	192	,	7	,\
124	,	4	,	129	,	128	,	7	,\
56	,	34	,	145	,	136	,	3	,\
124	,	10	,	133	,	130	,	0	,\
8	,	10	,	133	,	194	,	7	,\
124	,	4	,	129	,	128	,	0	,\
72	,	42	,	149	,	74	,	2	,\
4	,	194	,	143	,	72	,	2	,\
60	,	32	,	16	,	200	,	3	,\
28	,	16	,	16	,	196	,	1	,\
60	,	32	,	12	,	200	,	3	,\
68	,	20	,	4	,	69	,	4	,\
4	,	36	,	12	,	65	,	0	,\
68	,	50	,	149	,	73	,	4	,\
0	,	132	,	45	,	24	,	4	,\
0	,	192	,	29	,	0	,	0	,\
193	,	160	,	13	,	1	,	0	,\
4	,	129	,	64	,	16	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
28	,	17	,	5	,	97	,	3	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
4	,	62	,	129	,	79	,	4	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
193	,	113	,	53	,	25	,	4	,\
92	,	177	,	64	,	204	,	5	,\
42	,	149	,	74	,	165	,	2	,\
34	,	10	,	130	,	34	,	2	,\
8	,	132	,	10	,	129	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
80	,	44	,	85	,	26	,	5	,\
81	,	41	,	21	,	11	,	5	,\
84	,	26	,	199	,	82	,	1	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
32	,	160	,	47	,	32	,	0	,\
0	,	0	,	0	,	0	,	0	,\
96	,	248	,	79	,	192	,	1	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
28	,	209	,	95	,	4	,	0	,\
0	,	0	,	0	,	0	,	0	,\
93	,	145	,	72	,	212	,	5	,\
0	,	0	,	0	,	0	,	0	,\
0	,	192	,	29	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
128	,	0	,	32	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
8	,	138	,	170	,	42	,	2	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
129	,	64	,	32	,	16	,	0	,\
128	,	67	,	225	,	0	,	0	,\
68	,	226	,	151	,	72	,	4	,\
0	,	73	,	166	,	34	,	1	,\
128	,	74	,	197	,	1	,	0	,\
0	,	130	,	32	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	4	,	2	,	1	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	201	,	7	,	2	,	0	,\
128	,	75	,	229	,	2	,	0	,\
162	,	170	,	138	,	130	,	0	,\
15	,	16	,	12	,	69	,	7	,\
15	,	0	,	146	,	140	,	5	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
62	,	145	,	72	,	228	,	3	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
0	,	0	,	0	,	0	,	0	,\
135	,	194	,	1	,	0	,	0	,\
255	,	100	,	50	,	249	,	7	,\
4	,	6	,	135	,	65	,	0	,\
0	,	31	,	7	,	1	,	0	,\
16	,	12	,	7	,	3	,	1	,\
0	,	4	,	199	,	7	,	0	,\
128	,	63	,	224	,	15	,	0	,\
127	,	192	,	31	,	240	,	7	,\
0	,	192	,	31	,	0	,	0	,\
127	,	0	,	0	,	240	,	7	,\
131	,	1	,	159	,	66	,	0	,\
131	,	25	,	18	,	137	,	4	,\
8	,	2	,	2	,	130	,	0	,\
28	,	159	,	207	,	199	,	1	,\
28	,	145	,	72	,	196	,	1	,\
8	,	142	,	143	,	131	,	0	,\
8	,	138	,	136	,	130	,	0	,\
127	,	0	,	0	,	0	,	0	,\
255	,	63	,	0	,	0	,	0	,\
255	,	255	,	31	,	0	,	0	,\
255	,	255	,	255	,	15	,	0	,\
0	,	0	,	0	,	240	,	7	,\
0	,	0	,	224	,	255	,	7	,\
0	,	192	,	255	,	255	,	7	,\
128	,	255	,	255	,	255	,	7	,\
255	,	255	,	255	,	255	,	7	,\
16	,	208	,	31	,	4	,	1	,\
8	,	132	,	138	,	131	,	0	,\
4	,	193	,	95	,	64	,	0	,\
8	,	142	,	10	,	129	,	0	,\
85	,	85	,	85	,	85	,	5	,\
170	,	170	,	170	,	170	,	2	,\
255	,	255	,	255	,	255	,	7	

When in the dark remember-the future looks brighter than ever.   I look forward to being able to predict the future!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Thanks for the post. I still haven't had time to get back to that project, but I'll be sure to check your code out.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Fantastic! I got my VFD working tonight. Now I just need to verify that the USI on the ATtiny is working and I will be done! Well, then it is time to make a PCB for the VFD backpack. :?

Math is cool.
jevinskie.com

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

It is amazing to see how far you all came in working with this display. I have been stuck on this for weeks and unable to find anything on the net that helps. Is there by chance a final schematic that includes the package pin out available? For example, it would help a great deal to know which of the VFD 10 pins map to the C1162(s) and the C1164. I would very much appreciate any detail you would be willing to share.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Ah..never mind the request. I figured it out. The pins are numbered in reverse. That is what thew me. For others that might need the info, here is the pinout of the connector block:

[10 9 8 7 6 5 4 3 2 1]

Pin 2 = TP2 = +5v 1amp
Pin 4 = TP4 = DATA
Pin 6 = TP6 = Clock
Pin 8 = TP8 = Enable/Load
Pin 10 = TP10 = Ground

Hope this helps.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I have located a quantity of a VFD display at a clearance house in Orlando, FL USA. It looks similar to the one you've been talking about. I posted a picture to our Yahoo group -

http://groups.yahoo.com/group/147120_projects/photos/album/1267965610/pic/1859667173/view?picmode=&mode=tn&order=ordinal&start=1&count=20&dir=asc

There are two OKI chips and a Mitsubishi controller on it. The datasheet for the controller is available online, and also in the files section of the above group.

The markings on the board are
NCR1999
PROC-230-0145502A
CU20028SCPB-T22C
LOT 1E21L

The Mitsubishi chip is
M38002M4-479FP

The unit has a similar 10 line connector.

Is there anyone familiar with this display? Does it look like one could bypass the controller onboard and drive the display through the OKI chips like the board you have been working on? Does it look like a tempting waste of time?

There's only about a hundred of them there but they're cheap.

Thanks!
Tracy

.[/url]

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Yo Tracy... You from Orlando? Find this gizmo at Skycraft?

Imagecraft compiler user

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

You got it!! They have a box of what looks to be about 50 to 100 of them in the first isle to the left as you walk in the door ...

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Did you take a look? I didn't have the courage to brave the one at SkyCraft. It has a 9 pin connector and neither NCR nor Futaba seem to have any info on it. I ordered the one from Prime.

I want to run this from my NGW100 somehow. I'll lurk a bunch of forums and when I have real questions I'll ask.

Mind if I PM you an invitation to our local tech group?

.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Scott posted a high res photo of the back of this mystery VFD -

http://www.swharden.com/blog/images/vfd.jpg

Note his unit has some broken parts on it and won't light up the display. But it's clear that it already has a serial interface. We posted the datasheet for the Mitsubishi processor that's on the board.

Clearly a serial display for more than one model of Cash Register!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Nice to see this thread still going! I thought that I'd share a video of what ended up being the near-final result of our project. Don't mind the giddy laughing and excitement - my teammates and I had been up for hours working on the display after scrapping our original FFT plan two days before it was due. Anything that remotely worked was enough to send us over the edge!

-Jevin

Math is cool.
jevinskie.com

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Actually I've been watching your video over and over with great interest!

I ordered one of the Prime displays and I have it in my hand. I also found a similar one at a surplus place called SkyCraft here in Orlando. It has a Missubish uC on it, there's a datasheet on the 147120_ projects group on yahoo.

Last night I hooked 12v to it (after realizing 5v did nothing ...) and VIOLA! It lights up!

The microprocessor lights up all the segments in a self test, then displays the model number that is on the back of the board then goes blank, apparently waiting for data. Now it's time to mess with sending some serial data to it (there's a '232 chip on it ...) and see if something will display.

I'm most interested in what you did with the Prime display. We'll probably use an Arduino to drive it but I'm going to make a stab at driving it with my NGW100 as well. Should be easy enough?

I'm way new to VFD's and LCD's. Anything you can throw my way to get mine going would be greatly appreciated!

Did you ever find a way to get those marvelous arrows at the bottom to light up?

..

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

The Prime displays work great. In fact, I bought 200 of these to use in small-scale automation controller. I will point out that the sample C code earlier in this post is inaccurate. The display is very simple to drive. The logic for the Prime display is basically:

* Display is 5V 1amp
* There are 20 columns and 2 rows
* Print each column, including both rows + 2 bits + 20 bits to indicate the column at once

Mux Logic:

//Clocks a raw bit to the display bit stream
static void clockBit(bool bitVal){
  VFD_DATA_PORT |= _BV(VFD_CLOCK_PIN); //clock high
  

  if (bitVal == 0){
  	VFD_DATA_PORT &= ~(_BV(VFD_DATA_PIN)); //data low
  }
  else{
    VFD_DATA_PORT |= _BV(VFD_DATA_PIN); //data high
  } 
  //_delay_ms(1);
  

  VFD_DATA_PORT &= ~(_BV(VFD_CLOCK_PIN)); //clock low
}

//Prints a vfd char to the display
static void printVFDChar(DotMatrix5x7 vfdChar){
	//Write out the five bytes that make up the VFD font
	uint8_t fontByte=0x0;
	for (int i=0;i<5;i++){
		fontByte=vfdChar[i];
		clockVFDChar(fontByte);
	}
}

//Prints the current buffer to the VFD
//Note: With multplexed VFDs, the entire column must be written at 
//one time
void printVFDBuffer(){

	DotMatrix5x7 *vfdChar0=NULL;
	#if (VFD_NUM_ROWS > 1)
		DotMatrix5x7 *vfdChar1=NULL;
	#endif

	for (int i=0;i 1)
			vfdChar1=getBufferCharOffset(i,1);
		#endif
		//enable high
		VFD_DATA_PORT |= _BV(VFD_ENABLE_PIN);

		//Clock Char 0
		printVFDChar(*vfdChar0);
		#if (VFD_NUM_ROWS > 1)
			//Clock Char 1
			printVFDChar(*vfdChar1);
		#endif
		//write two zero bits per column
		clockBit(0);
		clockBit(0);
		//write column select bits
		clockColumnSelectBits(i);
		//enable low
		VFD_DATA_PORT &= ~(_BV(VFD_ENABLE_PIN));
	}
	
}

Here is a picture:

Notice how every expense was spared by using a hardware store C-clamp to hold it up? :) I have a pretty cool library for this I will release under GPL soon.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Totally sweet!!

I can't wait to see if we can get 'em going as well.

Where are your latest notes, schematics, etc., if I may ask? I'm not sure really where to begin with the Prime display. We've got our Surplus unit powering up - it's running off 12v not 5 but 270 mA with all the segments lit. (The onboard uP does a self test and displays the part number that is also on the back of the board, then goes blank, apparently waiting for serial data ...)

We're a bunch of Amateur Radio guys who think this display might be a great display for radios.

200 of 'em? I guess that means that Prime has plenty?

Thanks it's great to see success!
Tracy (N4LGH)

..

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

technicavolous wrote:
Totally sweet!!

I can't wait to see if we can get 'em going as well.

Where are your latest notes, schematics, etc., if I may ask? I'm not sure really where to begin with the Prime display. We've got our Surplus unit powering up - it's running off 12v not 5 but 270 mA with all the segments lit. (The onboard uP does a self test and displays the part number that is also on the back of the board, then goes blank, apparently waiting for serial data ...)

We're a bunch of Amateur Radio guys who think this display might be a great display for radios.

200 of 'em? I guess that means that Prime has plenty?

Thanks it's great to see success!
Tracy (N4LGH)

..

Tracy,

It sounds like your surplus display is very different than the Prime type I am using. Your surplus display has a built-in logic controller where as the Prime type do not. Most likely, your display uses a HD4470 compatible controller that accepts a character as input and displays the value just like a LCD screen would.

On the opposite end, the Prime type displays have no logic controller or any intelligence at all. In fact, I had to design my own font from scratch. Plus, the Prime display must be multiplexed by the microprocessor itself. This means that applying power alone to the Prime display will do nothing at all.

If you intend to just display text, the display with a built-in logic controller is the way to go. Alternatively, if you want to be able to create your own fonts or interface, then the Prime display would better suited.

I will GPL the library and post it as soon as I get a chance. If you have displays in hand and need the code now, message me and I will send it to you. Still, I caution that the Prime displays are a bit towards the advanced side. If you are just getting started with AVRs and displays, I would stick with displays that have built-in controllers.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

> It sounds like your surplus display is very
> different than the Prime type I am using.

The 'display' is almost the same but the board has a Mitsubishi uP on it. The guys here have figured out the serial connection and indeed it takes simple serial data and displays it. NICE!! For $4.50, can't beat it with two sticks. We've discovered the control codes and posted them on our yahoo group.

The issue is they're from a surplus place and will be gone shortly, never, EVER to be found again.

The Prime display seems to be something we'll be able to get for a while. That makes it attractive.

> If you are just getting started with AVRs and
> displays, I would stick with displays that have
> built-in controllers.

Not new at all, just haven't posted much ;] PLUS, we have a fairly large group here locally that really gets into this kind of stuff. We're into the NGW100's, Arduinos, etc. Take a look at our yahoo group '147120_projects' - a bunch of high tech ham radio experimenters that like to share data.

So your stuff definitely got our attention. We hate digging into something that we can't do again - the surplus displays are serial, easy and cheap, but projects based on the Prime displays and Arduinos will be reproducible.

I figure the Prime display, and Arduino controller, an NGW100 and an Analog Devices ADF-7020-1 eval board on it and we've got a cool VHF/UHF digital transceiver.

Fun, thanks for the data and when you get that library GPL'd let us know!

..

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

technicavolous wrote:
> It sounds like your surplus display is very
> different than the Prime type I am using.

The 'display' is almost the same but the board has a Mitsubishi uP on it. The guys here have figured out the serial connection and indeed it takes simple serial data and displays it. NICE!! For $4.50, can't beat it with two sticks. We've discovered the control codes and posted them on our yahoo group.

The issue is they're from a surplus place and will be gone shortly, never, EVER to be found again.


I am afraid this is the same case with the NCR Futaba NA202MD13AA displays as well. Prime has 393 left and they are gone for good too. That is the down side of surplus parts. This is also why I bought 200. At $3.99, that is just an amazing deal.

Quote:

Not new at all, just haven't posted much ;] PLUS, we have a fairly large group here locally that really gets into this kind of stuff. We're into the NGW100's, Arduinos, etc. Take a look at our yahoo group '147120_projects' - a bunch of high tech ham radio experimenters that like to share data.

So your stuff definitely got our attention. We hate digging into something that we can't do again - the surplus displays are serial, easy and cheap, but projects based on the Prime displays and Arduinos will be reproducible.


Hmm..the one main complexity about VFD and this display in particular is the very high power requirements. The
NA202MD13AA draws 1A which I am afraid is more than the 450-600ma the Arduino can power. If you wish to use an Arduino, then you would need an external power circuit for the display itself.

1A at 5V is a tough one too. You can use a linear regulator, but then you will need a massive heatsink and be willing to live with the inefficient power usage. I really recommend stepping up to a DC-DC buck regulator. The problem is that this circuit would cost more than the display itself.

I know it is not VFD, but Prime also has a great deal on a large LCD:'

http://www.primelec.com/Electron...

This LCD is really large, nice, and works great on an Arduino with no additional power supply required. There is a little trick to this display in that it uses two separate controllers. However, I have GPL'ed an AVR and Arduino library for it on my web site. If you want quick, simple, and cheap, I highly recommend taking a look at this LCD as well.

Quote:

I figure the Prime display, and Arduino controller, an NGW100 and an Analog Devices ADF-7020-1 eval board on it and we've got a cool VHF/UHF digital transceiver.

Fun, thanks for the data and when you get that library GPL'd let us know!

..

Sure, I have an alpha quality driver done now that left scrolls. I created a basic 5x7 font for it loaded to FLASH as well. I will post the lib this week in the state it is in. Most of my schematics are written for much larger projects, but I will see I cannot pull out a copy of just the display and power supply options for you. Viva la hobbyists. :)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

This is an old thread, but I recently created an Arduino library for the Prime display. It can probably be used without the Arduino framework with little or no modification. The library mimics the ubiquitous HD44780 LCD module.

http://arduino.cc/playground/Mai...

The manual refreshing makes it not ideal for all situations but otherwise it is a pretty nice VFD, especially for the price. Well, they are cheap if you ignore the rather steep shipping cost. I have a Skycraft VFD also which by comparison cost more, has smaller characters, a larger board and I ended up gluing the commonly broken inductor. Not to say that a fine VFD collection should not have samples of both.