DLR1414 display

Has anyone tried interfacing these to arduino, it seems straightforward since I had sourced them at £2 each I thought they where worth a try!

You need 10 pins to connect this up. Put the data on the six data pins, the address on the two address pins and strobe the WR line (that is take it from high to low and back to high again.

As it uses so many pins you might want to connect it to a shift register.

At £2.00 that is a good price where did you get them from. I have paid £18.00 for these in the past.

Yes, I've done it. I have a lot of similar devices. They are pin thieves since they are designed for a different bus style. The BEST interface I've seen is here: Arduino: Using Ancient Litronix DL-1414 LED Displays – The Smell of Molten Projects in the Morning

I have also paid quite a lot also... these devices are quite complex... especially considering when they were made.

Many years ago (1994) I used two of these to display the pointing position of a telescope. Here is the schematic of what I used:-
http://www.doc.mmu.ac.uk/STAFF/A.Wiseman/Acorn/BodyBuild/BB_94/BBC125.TIFF

Farnell have them at £33.36
http://uk.farnell.com/osram/dlr1414/led-display-alphanumeric/dp/1212733

I got them on e-bay, they just arrived 5 minutes ago, look in good condition!

Struggling now!

I wired up the data bus to a 74HC595 which is parallel on all 3 displays, which should save 7 lines!

I was wondering if I could attach the Address and write pins to the other 595, but I will leave that until I get a basic display!

the Write Select pins of each are connected to digital pins 2,3,4 and the Address pins are connected to pins 5 and 6.

Not quite having any experience with timing diagrams, I a guessing I need to do the following :-

Set the address bus (pins 5/6)
set the write enable of the display(s) i want to write to to low
Set the 595 to the ascii code of the character
Set the write enable of the display(s) back to high

which is what I set up, but I get no change on the displays any Ideas?

Here is my test code :-

#define latchPin  8 //Pin connected to Pin 12 of 74HC595 (Latch)
#define clockPin 12 //Pin connected to Pin 11 of 74HC595 (Clock)
#define dataPin  11  //Pin connected to Pin 14 of 74HC595 (Data)

void setup() {
  //set pins to output 
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
  pinMode(2, OUTPUT); // Display 3
  pinMode(3, OUTPUT); // Display 2
  pinMode(4, OUTPUT); // Display 1
   pinMode(5, OUTPUT); // A0
    pinMode(6, OUTPUT); // A1
    
        
  // loop through all displays and all codes
  for (int i = 0; i <3; i++) {
    for (int j = 0; j <2; j++) {
     for (int k =0 ; k<127 ; k++) {
       
      DisplayChar(j,i,k) ;
    }
  }
  }
   
}
void loop() {}
void DisplayChar(int Display,int Digit,int Char) {
 
       digitalWrite(6,(Digit / 2) & 1) ;  // set high bit of digit address
   digitalWrite(5,Digit & 1) ;// set low bit of digit address

    digitalWrite(2+Display,LOW) ; // select enable write for display 0-2
   
    shiftOut(Char,Char) ;        // send character to 595
   
    digitalWrite(2+Display,HIGH) ; // Disable write for display 0-2
    
    
}
// writes 2 bytes out to 2 shift registers

void shiftOut(int Byte1,int Byte2) {
  // Shift out 8 bits LSB first, 
  // on rising edge of clock

  boolean pinState;
  long dataOut = Byte1+256*Byte2 ;

  //clear shift register read for sending data
  digitalWrite(dataPin, LOW);
  digitalWrite(clockPin, LOW);

for(int x=0; x<2; x++) {
  // for each bit in dataOut send out a bit
  for (int i=0; i<=15; i++)  {
      //set clockPin to LOW prior to sending bit
    digitalWrite(clockPin, LOW);

    // if the value of DataOut and (logical AND) a bitmask
    // are true, set pinState to 1 (HIGH)
    if ( dataOut & (1<<i) ) {
      pinState = HIGH;
    }
    else {      
      pinState = LOW;
    }

    //sets dataPin to HIGH or LOW depending on pinState
    digitalWrite(dataPin, pinState);
    //send bit out on rising edge of clock 
    digitalWrite(clockPin, HIGH);
    digitalWrite(dataPin, LOW);
  }
}
  //stop shifting

  digitalWrite(clockPin, LOW);
}

I wired up the data bus to a 74HC595 which is parallel on all 3 displays,

best to start with just one display

I would do things in this order:-
setup:-
set the write enable of all the displays to high;

access the display:-
Set the 595 to the ascii code of the character
Set the address bus (pins 5/6)
set the write enable of the display(s) i want to write to to low
Set the write enable of the display(s) back to high

Ok, I started from basics and set up 1 display direct to the Arduino which works!

I now have all 3 connected to the Arduino which works!

Now to try and get this working VIA 1/2 595's!

Here is the code it assumes pins 13-7 are D6-D0 respectively pins 6,5 are the address and pins 2,3,4 are the displays (I have 3).

Apologies for my coding but I am new to C/Java!

Any improvements on the code would be welcome, especially on the string handling side, as far as substrings!

int WriteLatch1 = 2 ;
int WriteLatch2 = 3 ;
int WriteLatch3 = 4 ;

int Address0 = 6 ;
int Address1 = 5 ;

int Data0 = 7 ;
int Data1 = 8 ;
int Data2 = 9 ;
int Data3 = 10 ;
int Data4 = 11 ;
int Data5 = 12 ;
int Data6 = 13 ;


void setup() {
  
  for(int j=2; j<13 ; j++) {
    pinMode(j,OUTPUT) ;
  }
  
    digitalWrite(WriteLatch1,HIGH) ;
  digitalWrite(WriteLatch2,HIGH);
   digitalWrite(WriteLatch3,HIGH);
 
 
}
void loop() {
printLongString("This is a string") ;
delay(1000) ; // avoids Strobing
}
// print a string across displays up to 12 characters
void printLongString(char string[]) {
  for (int j = 0; j<12; j++) {
    printChar(string[j],(j % 4)+1,j / 4) ;
  }
}

// print a 4 character string to a specific display 
void printString(char string[],int Display) {
  
  for(int j=0; j<4 ;j++) {
     printChar(string[j],j+1,Display);
  }  
}


// print an individual character at selected positon
void printChar(int CharCode, int Digit,int Display) {
   digitalWrite(Address1,(4-Digit ) & 1) ;  
  digitalWrite(Address0,((4-Digit ) >> 1) & 1) ;
  setData(CharCode,Display) ;
  
}
// Write data to a specific display
void setData(int CharCode,int Display) {
  
  digitalWrite(WriteLatch1+Display,LOW) ;
  
  digitalWrite(7,CharCode & 1) ;
  digitalWrite(8,(CharCode >> 1) & 1) ;
  digitalWrite(9,(CharCode >> 2) & 1) ;
  digitalWrite(10,(CharCode >> 3) & 1) ;
  digitalWrite(11,(CharCode >> 4) & 1) ;
  digitalWrite(12,(CharCode >> 5) & 1) ;
  digitalWrite(13,(CharCode >> 6) & 1) ;
  digitalWrite(WriteLatch1+Display,HIGH) ;
  
  
}

I am not sure what you are asking. Does this code work?
Are you wanting to know how to replace the last function with one that writes to a shift register?

Ok, I solved all the problems eventually, I now have 3 displays all controlled by 4 Wires, and can address characters individually or write a string to it.

I will post the code here, D6-D0 are connected to the first 595 pins 1-7, and A0-A1 to pins 6 and 7 on the second, the latches on each display are connected to pins 5,4,3 on the second 595. (which means I could have 3 more displays with this setup).

here is the code I came up with, again I apologise for style but C is not my language!

// ************************************************************
// Arduino DLR1414 Interface using Dual 74HC595
//

int controlLatch = 3 ;  //Pin connected to Pin 14 of 74HC595 (Data) Linked together on both 595's
int charLatch = 2 ;     //Pin connected to Pin 14 of 74HC595 (Data) Linked together on both 595's

int clockPin = 5 ;       //Pin connected to Pin 11 of 74HC595 (Clock)  BOTH
int  dataPin  = 4;       //Pin connected to Pin 14 of 74HC595 (Data)   BOTH

void setup() {
  
 pinMode(controlLatch, OUTPUT);
  pinMode(charLatch, OUTPUT);
  pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
   
  digitalWrite(controlLatch,HIGH) ;
  digitalWrite(charLatch,HIGH) ;
  
 printLongString("            ") ;
 delay(5000) ;
}
void loop() {
   
printLongString("ABCDEFGHIJKL") ;
delay(1000) ;
printLongString("            ") ;
delay(1000) ;

}
// print a string across displays up to 12 characters
void printLongString(char string[]) {
  for (int j = 0; j<12; j++) {
    printChar(string[j],(j % 4),j / 4) ;
  }
}

// print a 4 character string to a specific display 
void printString(char string[],int Display) {
  
  for(int j=0; j<4 ;j++) {
     printChar(string[j],j+1,Display);
  }  
}

// print an individual character at selected positon
void printChar(int CharCode, int Digit,int Display) {
   
  setData(CharCode,Digit,Display) ;
  
}
// Write data to a specific display
void setData(int charCode,int Digit,int Display) {
  
  int displaySelect = B00011100 &(~(1 << (Display + 2))) ; // turn off the bit for the display selected
  
  
  digitalWrite(controlLatch, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST,displaySelect | (3-Digit) ) ; // swap the order so left is 0..3 at the right and enable write to that display
  digitalWrite(controlLatch, HIGH);
  
  digitalWrite(charLatch, LOW);                       // output Data for char to display
  shiftOut(dataPin, clockPin, LSBFIRST, charCode) ;
  digitalWrite(charLatch, HIGH);
  
  digitalWrite(controlLatch, LOW);                    // turn off the write enable 
   shiftOut(dataPin, clockPin, LSBFIRST,  B00011100) ;
  digitalWrite(controlLatch, HIGH);
  
     
}

Thanks for your input, I hope this helps others!