August 07, 2013

Controlling vintage HDSP2000 displays with Arduino

To some there is the allure of older technology - such as nixie tubes, vacuum-fluorescent displays and old LEDs that can't be ignored... and when they turn up again the first thing to try is getting them working with an Arduino for retro-fun and reminiscing. Paul Huinink feels the same way and has spent some time to document how to use Hewlett-Packard HDSP2000 alphanumeric display units with an Arduino.

Originally released in 1975, the HDSP2000 were designed for almost any use and were popular for outdoor devices, as their Gallium-Phosphide LEDs were readable in direct sunlight. Driving them requries some constant-current sinking drivers and in his example Paul has used UDN2981s for the purpose. The circuitry isn't that complex, and provides us with the following example:

So if you come across some of these displays, or just enjoy seeing older technology at work - visit Paul's website for complete instructions. And for more, we're on twitter and Google+, so follow us for news and product updates as well.

If you're interested in text output for your Arduino projects, but don't have any vintage displays - save time and move forward with the Freetronics LCD & Keypad shield which contains a bright 16x2 character LCD and five buttons that can be read from only one analogue input pin:

 

2014/06/25

dragonet80 said:

Paul’s website ask for a user/password. Is the site offline? Do you know where can I get more info on this display? Datasheet of hdsp2000 does not have any info on the protocol used. I try to figure it out but have not at the moment.

2014/06/26

John said:

That’s a shame. We found http://bitsnbikes.blogspot.com.au/2010/05/hdsp-2000lp-arduino.html which could be useful.

2015/09/17

Paul Huinink said:

http://huinink.info/hdsp2003/

2015/09/17

Paul Huinink said:

found an old email:
Hey Patrick,

As I used UDS2981’s as a relust of meeting Navid, I did some thinking
and datasheet digging.
Thinking: How do I get the HDSP display bright?
Experience: Using 3.3 Volt (LM1117-33 on the input of the UDN2981)
gives to dim light.
Using 5 volt (LM7805) on the UDN2981 gives bright results, but
probably to high for the old displays.

Then I thought: arghh. The UDN2981 gives a voltage drop of 0,8 volts.
So using 3.3 gives me 2.5 on the columns. No wonder they were dim.

My solution: Using an LM7805 and put a N4001 diode in series. This
gives me an additional voltage drop of 0,7. The total voltage drop is
0,8 + 0,7 = 1,5. Using 5 Volts leaves 3,5 for the columns, wich works
great.
bye…

2015/09/17

Paul Huinink said:

//* HDSP200x
//
* ASCII-DEMO
//* phuinink@gmail.com
//
*

const byte ascii_5x7[] = {
// 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0×01, 0×02, 0×04, 0×08, 0×10,

0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0xF2, 0×00, 0×00, 0×00, 0xE0, 0×00, 0xE0, 0×00, 0×28, 0xFE, 0×28, 0xFE, 0×28, 0×24, 0×54, 0xFE, 0×54, 0×48, 0xC4, 0xC8, 0×10, 0×26, 0×46, 0×6C, 0×92, 0xAA, 0×44, 0×0A, 0×00, 0xA0, 0xC0, 0×00, 0×00, 0×00, 0×38, 0×44, 0×82, 0×00, 0×00, 0×82, 0×44, 0×38, 0×00, 0×28, 0×10, 0×7C, 0×10, 0×28, 0×10, 0×10, 0×7C, 0×10, 0×10, 0×00, 0×0A, 0×0C, 0×00, 0×00, 0×10, 0×10, 0×10, 0×10, 0×10, 0×00, 0×06, 0×06, 0×00, 0×00, 0×04, 0×08, 0×10, 0×20, 0×40, 0×7C, 0×8A, 0×92, 0xA2, 0×7C, 0×00, 0×42, 0xFE, 0×02, 0×00, 0×42, 0×86, 0×8A, 0×92, 0×62, 0×84, 0×82, 0xA2, 0xD2, 0×8C, 0×18, 0×28, 0×48, 0xFE, 0×08, 0xE4, 0xA2, 0xA2, 0xA2, 0×9C, 0×3C, 0×52, 0×92, 0×92, 0×0C, 0×80, 0×8E, 0×90, 0xA0, 0xC0, 0×6C, 0×92, 0×92, 0×92, 0×6C, 0×60, 0×92, 0×92, 0×94, 0×78, 0×00, 0×6C, 0×6C, 0×00, 0×00, 0×00, 0×6A, 0×6C, 0×00, 0×00, 0×10, 0×28, 0×44, 0×82, 0×00, 0×28, 0×28, 0×28, 0×28, 0×28, 0×00, 0×82, 0×44, 0×28, 0×10, 0×40, 0×80, 0×8A, 0×90, 0×60, 0×4C, 0×92, 0×9E, 0×82, 0×7C, 0×7E, 0×88, 0×88, 0×88, 0×7E, 0xFE, 0×92, 0×92, 0×92, 0×6C, 0×7C, 0×82, 0×82, 0×82, 0×44, 0xFE, 0×82, 0×82, 0×44, 0×38, 0xFE, 0×92, 0×92, 0×92, 0×82, 0xFE, 0×90, 0×90, 0×90, 0×80, 0×7C, 0×82, 0×92, 0×92, 0×5E, 0xFE, 0×10, 0×10, 0×10, 0xFE, 0×00, 0×82, 0xFE, 0×82, 0×00, 0×04, 0×02, 0×82, 0xFC, 0×80, 0xFE, 0×10, 0×28, 0×44, 0×82, 0xFE, 0×02, 0×02, 0×02, 0×02, 0xFE, 0×40, 0×30, 0×40, 0xFE, 0xFE, 0×20, 0×10, 0×08, 0xFE, 0×7C, 0×82, 0×82, 0×82, 0×7C, 0xFE, 0×90, 0×90, 0×90, 0×60, 0×7C, 0×82, 0×8A, 0×84, 0×7A, 0xFE, 0×90, 0×98, 0×94, 0×62, 0×62, 0×92, 0×92, 0×92, 0×8C, 0×80, 0×80, 0xFE, 0×80, 0×80, 0xFC, 0×02, 0×02, 0×02, 0xFC, 0xF8, 0×04, 0×02, 0×04, 0xF8, 0xFC, 0×02, 0×0C, 0×02, 0xFC, 0xC6, 0×28, 0×10, 0×28, 0xC6, 0xE0, 0×10, 0×0E, 0×10, 0xE0, 0×86, 0×8A, 0×92, 0xA2, 0xC2, 0×00, 0xFE, 0×82, 0×82, 0×00, 0×40, 0×20, 0×10, 0×08, 0×04, 0×00, 0×82, 0×82, 0xFE, 0×00, 0×20, 0×40, 0×80, 0×40, 0×20, 0×02, 0×02, 0×02, 0×02, 0×02, 0×00, 0×80, 0×40, 0×20, 0×00, 0×04, 0×2A, 0×2A, 0×2A, 0×1E, 0xFE, 0×12, 0×12, 0×12, 0×0C, 0×1C, 0×22, 0×22, 0×22, 0×22, 0×0C, 0×12, 0×12, 0×12, 0xFE, 0×1C, 0×2A, 0×2A, 0×2A, 0×1A, 0×00, 0×10, 0×7E, 0×90, 0×40, 0×12, 0×2A, 0×2A, 0×2A, 0×3C, 0xFE, 0×10, 0×10, 0×10, 0×0E, 0×00, 0×00, 0×5E, 0×00, 0×00, 0×04, 0×02, 0×02, 0xBC, 0×00, 0×00, 0xFE, 0×08, 0×14, 0×22, 0×00, 0×82, 0xFE, 0×02, 0×00, 0×3E, 0×20, 0×1C, 0×20, 0×3E, 0×3E, 0×10, 0×20, 0×20, 0×1E, 0×1C, 0×22, 0×22, 0×22, 0×1C, 0×3E, 0×28, 0×28, 0×28, 0×10, 0×10, 0×28, 0×28, 0×28, 0×3E, 0×3E, 0×10, 0×20, 0×20, 0×10, 0×12, 0×2A, 0×2A, 0×2A, 0×24, 0×20, 0×20, 0xFC, 0×22, 0×24, 0×3C, 0×02, 0×02, 0×02, 0×3C, 0×38, 0×04, 0×02, 0×04, 0×38, 0×3C, 0×02, 0×0C, 0×02, 0×3C, 0×22, 0×14, 0×08, 0×14, 0×22, 0×20, 0×12, 0×0C, 0×10, 0×20, 0×22, 0×26, 0×2A, 0×32, 0×22, 0×00, 0×10, 0×6C, 0×82, 0×82, 0×00, 0×00, 0xEE, 0×00, 0×00, 0×82, 0×82, 0×6C, 0×10, 0×00, 0×20, 0×40, 0×40, 0×40, 0×80, 0xA8, 0×68, 0×3E, 0×68, 0xA8, 0xBE, 0×2A, 0×2A, 0×2A, 0xA2, 0×00, 0×20, 0×50, 0xA0, 0×00, 0×04, 0×22, 0×7C, 0xA0, 0×40, 0×84, 0xFC, 0×04, 0×00, 0×20, 0xFE, 0×02, 0×02, 0×12, 0×02, 0×1C, 0×22, 0×14, 0×08, 0×36, 0×4E, 0×3E, 0×60, 0×40, 0×40, 0×0C, 0×12, 0×52, 0xB2, 0×1C, 0×08, 0×1C, 0×2A, 0×2A, 0×2A, 0xF8, 0×40, 0×40, 0×3C, 0×02, 0×7C, 0×92, 0×92, 0×7C, 0×00, 0×42, 0×44, 0×38, 0×04, 0×02, 0×20, 0×3E, 0×20, 0×3E, 0×22, 0×10, 0×20, 0×3C, 0×22, 0×20, 0×18, 0×24, 0×7E, 0×24, 0×18, 0×1C, 0×22, 0×0C, 0×22, 0×1C, 0×82, 0xC6, 0xAA, 0×92, 0×82, 0×3A, 0×46, 0×40, 0×46, 0×3A, 0×54, 0×54, 0×54, 0×54, 0×54, 0×44, 0×28, 0×10, 0×28, 0×44, 0×10, 0×10, 0×54, 0×10, 0×10, 0×00, 0×70, 0×88, 0×88, 0×70, 0×60, 0×90, 0×8A, 0×80, 0×40, 0xFE, 0xFE, 0×92, 0×92, 0×92, 0×0A, 0×1A, 0×2A, 0×4A, 0×8A, 0×8A, 0×4A, 0×2A, 0×1A, 0×0A, 0×28, 0×2C, 0×38, 0×68, 0×28, 0×04, 0xFE, 0×80, 0×80, 0×80, 0×4C, 0×92, 0×92, 0×7C, 0×00, 0×04, 0×02, 0×7C, 0×80, 0×40, 0×38, 0×44, 0×38, 0×44, 0×38, 0xAA, 0×54, 0xAA, 0×54, 0xAA, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0xBE, 0×00, 0×00, 0×38, 0×44, 0xFE, 0×44, 0×00, 0×12, 0×7E, 0×92, 0×92, 0×42, 0xBA, 0×44, 0×44, 0×44, 0xBA, 0xA8, 0×68, 0×3E, 0×68, 0xA8, 0×00, 0×00, 0xEE, 0×00, 0×00, 0×50, 0xAA, 0xAA, 0xAA, 0×14, 0×00, 0×80, 0×00, 0×80, 0×00, 0×7C, 0xBA, 0xAA, 0xAA, 0×7C, 0×12, 0xAA, 0xAA, 0xAA, 0×7A, 0×10, 0×28, 0×54, 0xAA, 0×44, 0×80, 0×80, 0×80, 0×80, 0xC0, 0×00, 0×00, 0×00, 0×00, 0×00, 0×7C, 0xAA, 0xBA, 0×82, 0×7C, 0×80, 0×80, 0×80, 0×80, 0×80, 0×00, 0xE0, 0xA0, 0xE0, 0×00, 0×22, 0×22, 0xFA, 0×22, 0×22, 0×00, 0×48, 0×98, 0xA8, 0×48, 0×00, 0×00, 0xA8, 0xA8, 0×70, 0×00, 0×00, 0×40, 0×80, 0×00, 0×04, 0xF8, 0×10, 0×10, 0xE0, 0×60, 0xFE, 0×80, 0xFE, 0×80, 0×00, 0×00, 0×10, 0×10, 0×00, 0×08, 0×00, 0×02, 0×04, 0×00, 0×00, 0×48, 0xF8, 0×08, 0×00, 0×00, 0xE8, 0xA8, 0xE8, 0×00, 0×44, 0xAA, 0×54, 0×28, 0×10, 0xF0, 0×04, 0×0C, 0×14, 0×2E, 0xF0, 0×00, 0×12, 0×26, 0×1A, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0×0C, 0×12, 0xA2, 0×02, 0×04, 0×1E, 0xA8, 0×68, 0×28, 0×1E, 0×1E, 0×28, 0×68, 0xA8, 0×1E, 0×1E, 0xA8, 0xA8, 0xA8, 0×1E, 0×9E, 0xA8, 0xA8, 0xA8, 0×9E, 0×9E, 0×28, 0×28, 0×28, 0×9E, 0×1E, 0×68, 0xA8, 0×68, 0×1E, 0×7E, 0×90, 0xFE, 0×92, 0×92, 0×70, 0×8A, 0×8C, 0×88, 0×88, 0×3E, 0xAA, 0×6A, 0×2A, 0×22, 0×3E, 0×2A, 0×6A, 0xAA, 0×22, 0×3E, 0xAA, 0xAA, 0xAA, 0×22, 0xBE, 0×2A, 0×2A, 0×2A, 0xA2, 0×00, 0xA2, 0×7E, 0×22, 0×00, 0×00, 0×22, 0×7E, 0xA2, 0×00, 0×00, 0xA2, 0xBE, 0xA2, 0×00, 0×00, 0xA2, 0×3E, 0xA2, 0×00, 0×10, 0xFE, 0×92, 0×82, 0×7C, 0xBE, 0×90, 0×88, 0×84, 0xBE, 0×1C, 0xA2, 0×62, 0×22, 0×1C, 0×1C, 0×22, 0×62, 0xA2, 0×1C, 0×1C, 0xA2, 0xA2, 0xA2, 0×1C, 0×9C, 0xA2, 0xA2, 0xA2, 0×9C, 0×9C, 0×22, 0×22, 0×22, 0×9C, 0×44, 0×28, 0×10, 0×28, 0×44, 0×3A, 0×4C, 0×54, 0×64, 0xB8, 0×3C, 0×82, 0×42, 0×02, 0×3C, 0×3C, 0×02, 0×42, 0×82, 0×3C, 0×3C, 0×82, 0×82, 0×82, 0×3C, 0xBC, 0×02, 0×02, 0×02, 0xBC, 0×60, 0×10, 0×4E, 0×90, 0×60, 0xFE, 0×44, 0×44, 0×44, 0×38, 0×7E, 0xA4, 0xA4, 0×58, 0×00, 0×04, 0xAA, 0×6A, 0×2A, 0×1E, 0×04, 0×2A, 0×6A, 0xAA, 0×1E, 0×04, 0xAA, 0xAA, 0xAA, 0×1E, 0×84, 0xAA, 0xAA, 0xAA, 0×9E, 0×04, 0xAA, 0×2A, 0xAA, 0×1E, 0×04, 0×6A, 0xAA, 0×6A, 0×1E, 0×2E, 0×2A, 0×1C, 0×2A, 0×3A, 0×30, 0×4A, 0×4C, 0×48, 0×00, 0×1C, 0xAA, 0×6A, 0×2A, 0×1A, 0×1C, 0×2A, 0×6A, 0xAA, 0×1A, 0×1C, 0xAA, 0xAA, 0xAA, 0×1A, 0×1C, 0xAA, 0×2A, 0xAA, 0×1A, 0×00, 0×80, 0×5E, 0×00, 0×00, 0×00, 0×00, 0×5E, 0×80, 0×00, 0×00, 0×40, 0×5E, 0×40, 0×00, 0×00, 0×40, 0×1E, 0×40, 0×00, 0×0C, 0×12, 0×52, 0xB2, 0×1C, 0xBE, 0×90, 0xA0, 0xA0, 0×9E, 0×0C, 0×92, 0×52, 0×12, 0×0C, 0×0C, 0×12, 0×52, 0×92, 0×0C, 0×0C, 0×52, 0×52, 0×52, 0×0C, 0×4C, 0×52, 0×52, 0×52, 0×4C, 0×0C, 0×52, 0×12, 0×52, 0×0C, 0×10, 0×10, 0×10, 0×54, 0×10, 0×18, 0×26, 0×3C, 0×64, 0×18, 0×1C, 0×82, 0×42, 0×02, 0×1C, 0×1C, 0×02, 0×42, 0×82, 0×1C, 0×1C, 0×42, 0×42, 0×42, 0×1C, 0×1C, 0×42, 0×02, 0×42, 0×1C, 0×20, 0×12, 0×4C, 0×90, 0×20, 0xFE, 0×48, 0×48, 0×30, 0×00, 0×20, 0×92, 0×0C, 0×90, 0×20};

int column[] = {
2, 3, 4, 5, 6};
int data = 7;
int clock =8;

void setup() {
Serial.begin(9600);
for (int i = 0; i < 5; i++) {
pinMode(column[i], OUTPUT);
}
for (int i = 0; i < 5; i++) {
digitalWrite(column[i], LOW);
}
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
}

void loop() {
schrijfTekst(" -hallo + ", 15, 2500); // alway precede with 4 spaces of ‘garbage’. These will be cut off
}

void schrijfTekst(String tekst, int snelheid, int helderheid) {
int tl = tekst.length();
int tekstDat[tl*5];
char tekst_[tl];
for (int vv = 0; vv < tl; vv++) {
char tt = tekst.charAt(vv);
for (int i =0; i< 5; i++) {
tekstDat[vv*5+i] = ascii_5x7[tt*5+i];
}
}
for (int asc = 4; asc< tl; asc++) { // all available ASCII
for (int tijd = 0; tijd < snelheid; tijd++) { // ‘snelheid’-times same display, less is faster

for (int i = 0; i < 5; i++) { // 5 columns int duur=0; for (int j = 0; j < 28; j++) { // 4 × 7 row-elements digitalWrite(clock, HIGH); digitalWrite(data, tekstDat[(-(j/7)asc)*5i] &(2<<(j%7))); // translate digitalWrite(clock, LOW); } digitalWrite(column[i], HIGH); delayMicroseconds(helderheid); digitalWrite(column[i], LOW); } } //} }

}

2015/09/17

Paul Huinink said:

schrijfTekst = write text
tekst = tekst
snelheid is speed
helderheid = brightness
Me = Dutch

Leave a comment

Comments have to be approved before showing up.