Hardware | HDSP-2000 간단 사용기

레트로 전광판 중, 아직 구할 수 있는 소자들이 있습니다. HP 에서 제조된 HDSP-2000 은 눈에 잘 띄는 제품입니다.


1. Purchase

오랜 동안 고민한 끝에, 구매를 결정 합니다. 구매를 주저했던 이유는, 딱히 쓸 곳이 없다는 것이였죠. 현재 생산되지 않고 있기 때문에, 주저하다 못 구하게 될 것 같아 중고를 구입 합니다.

* new HDSP-2000 HDSP2000 CDIP12 HDSP-2000 CWDIP-12 good quality
  - https://www.aliexpress.com/item/4000798349621.html

"New Original" 버전을 구입하면, 2만 5천원이 넘어가므로, 어느 장비에서 분리한 중고를 구입 합니다.

포장은 잘 되어서 1주일 만에 도착했습니다.

1989년도 물건이지만, 세밀하게 잘 만들어져 있습니다. 과거 HP  영광의 산물이네요.

자세히 관찰해 보니, 역시 "disassembly test" 버전인 만큼, 앞 유리 가장자리가 해먹었습니다. ㅠㅠ

Dispute 를 통해 조금 refund 를 받아야 할 정도 입니다.

뒷면에는 HP 로고와 제품 번호, 그리고 생산년도가 찍혀 있습니다. 오른쪽 밑의 큰 점은 Pin 1 을 나타냅니다. 이 위치가 중요한 것이, Vin 을 잘 못 넣어서 chip 이 타버린 케이스를 인터넷에서 본 적이 있습니다.


2. Detail

우선 spec. sheet 와 활용에 관련된 자료가 있어 공유합니다.

HDSP2000_Application.pdf

HP-Displays-HDSP-2010.pdf

접사를 통해 chip 내부를 자세히 찍어 봤습니다. 발광부 옆에 신호를 control 하는 회로가 내재되어 있는 것이 보입니다.

발광부는 XY 배열이 되어 있고, 신호가 만나는 지점을 통전하는 matrix 방식으로 컨트롤 하는 것 같습니다. Gold wire bonding 이 이쁘네요.

뒷 면 마커 printing 부분 입니다. 신기하게도 정품들은 이 마커들이 잘 벗겨지지 않더군요. 1989년도 18주차 생산분 같습니다.


3. Connectivity

Arduino Nano 를 가지고 컨트롤 하는 source 를 찾았습니다. 그대로 따라해 봅니다.

* HDSP-2000 (Hewlett Packard) - ctvrtky.info
  - https://www.ctvrtky.info/hdsp-2000-hewlett-packard/

아래는 Arduino 와 연결 정보 입니다.


+-------------------------------------+
| HDSP-2000 | Pin Name | Arduino Nano |
+-------------------------------------+
|     1     |    C1    |      D12     |
|     2     |    C2    |      D11     |
|     3     |    C3    |      D10     |
|     4     |    C4    |      D9      |
|     5     |    C5    |      D8      |
|     6     |    -     |      -       |
|     7     | Data OUT |      -       |
|     8     |    Vb    |      -       |
|     9     |    Vcc   |      5V      |
|     10    |    Clk   |      D6      |
|     11    |    GND   |      GND     |
|     12    | Data IN  |      D7      |
+-------------------------------------+


대충 그려보면 아래와 같은 연결이 됩니다. Clock 과 Data IN 을 통해 조정이 되고, 각 column 을 조정하는 핀으로 구성됩니다.

전원을 Arduino 에서 따다 쓰면, 전류량이 충분하지 않아 정상동작 하지 않습니다. 꼭 외부 전원이 필요합니다. 참고로 열도 꽤 납니다. 역시 옛날 제품.


4. Source

아래는 Arduino 에 올리는 sketch 원본 입니다. "font.h" 헤더가 잘 인식되어야 하므로, Libraries 폴더에 직접 파일을 올려놔야 합니다.

HDSP-2000 sketch

아래는 source 입니다. "font.h" 파일도 동일 폴더 레벨에 존재해야 합니다.



#include "font.h"
int column[] = {12, 11, 10, 9, 8}; 
int data = 7;   
int clock = 6;
int brightness = 2000; 
const int cntDisplays = 1;
int txtData[cntDisplays * 4 * 5]; // this is the array that store's what on the displays. 4 digits per display and 5 columns per digit.

void setup() {
  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() {
  char PROGMEM scroll[]  = "HDSP-2000 DEMO";
  scrollText(scroll, 30);
}

void writeDigit(int position, int ascii) {
  for (int i = 0; i < 5; i++) {
    txtData[(cntDisplays * 4 - position) * 5 + i] = ascii_5x7[ascii * 5 + i];
  }
}

void scrollText(String txt, long howSlow) {
  int leng = txt.length();
  for (int u = -cntDisplays * 4; u < leng; u++) { 
    for (int v = 0; v < cntDisplays * 4; v++) {
      if (( (u + v) >= 0 ) && ((u + v) < leng)) { 
        char oneChar = txt.charAt(u + v);
        writeDigit(v + 1, oneChar); 
      }
      else {
        writeDigit(v + 1, 32); 
      }
    }
    for (long teller = 0; teller < howSlow; teller++) {
      draw();
    }
  }
}

void writeText(String txtShow) {
  int tl = txtShow.length();
  int spacesNeeded = 4 * cntDisplays - tl;
  if (spacesNeeded < 0) {
    tl = 4 * cntDisplays;
  }
  else {
    for (int u = 0; u < spacesNeeded; u++) {
      txtShow.concat(" ");
    }
    tl = 4 * cntDisplays;
  }
  char txtShow_[tl];
  for (int vv = 0; vv < tl; vv++) {
    char tt = txtShow.charAt(tl - vv - 1);
    for (int i = 0; i < 5; i++) {
    }
  }
}

void draw() {
  for (int columnDisp = 0; columnDisp < 5; columnDisp++) { 
    for (int displayNr = 0; displayNr < cntDisplays; displayNr++) { 
      for (int digitNr = 0; digitNr < 4; digitNr++) { 
        for (int diodeNr = 0; diodeNr < 7; diodeNr++) { 
          digitalWrite(clock, HIGH);
          digitalWrite(data, txtData[columnDisp + 5 * (displayNr * 4 + digitNr) ] & (2 << diodeNr)); 
          digitalWrite(clock, LOW);
        }
      }
    }
    digitalWrite(column[columnDisp], HIGH);
    delayMicroseconds(brightness);
    digitalWrite(column[columnDisp], LOW);
  }
}


Sketch upload 하고, 동작시키면 잘 동작 합니다. 원본 Source 가 잘 되어 있어서, 특별히 제가 한 것은 없습니다.


5. Ilumination

요즘 LED 와는 비교도 안될 정도로 전류량도 많고, Pin 수도 많아 번거롭지만, 이런 점을 상쇄시킬만 한 "아름다움" 이 있습니다. 요즘 LED 로는 느끼기 힘든 "구현" 감성이 있습니다.

접사로 발광하는 부분을 찍어 봤습니다.

동영상으로도 찍어 봅니다.

FIN

추가로 한 개 더 구매하여, Counter 나 시계를 만들어 보고 싶네요.


댓글