LD8113 VFD(蛍光表示管)で増幅できるかやってみた

2016-08-15 20.42.31

KORG の 6P1 (Nutube) がぼちぼち流通しはじめて、一部の方は現物を入手されたりしている模様。なのですが、積極的にお出かけしないと入手できない状況なので私はまだ持っていません。この真空管は蛍光表示管と同じような構造をしています。

あれが増幅するんやったら家にある蛍光表示管でも増幅するんじゃね?的考えで LD8113 と IV-27 をひっぱりだしてきました。今回の実験は LD8113 さんに犠牲になってもらうことにしました。

2016-08-28 09.41.03

ブレッドボードに適当に組んだ回路に 100mV 入れて出力電圧を測定。アノード側で使用した電極(セグメント)は 8 の字として、真ん中の縦棒とドットは使用しないこととしました。

LD8113_50

トライ & トライで、300mV 程度取れました。

LD8113_51

裸特性もついでに撮っておきました。一応増幅していることは確認できました。バッファ付けてヘッドホン鳴らしてみたいですね。

IV-27M ゴーストの出具合をみてみた

7 セグ LED やニキシー管など複数の桁をダイナミック表示する時に発生するのがゴーストです。うちとこの Blog では IN-12B ニキシー管ダイナミック点灯のテスト、主にゴースト対策 という記事でも過去とりあげたことがあります。今回は蛍光表示管なのですが、IV-27 はダイナミック点灯で使用するのが前提なのでゴーストは出にくい印象

2014-07-19 10.18.22

蛍光表示管にかける電圧を定格の24V を 30V まであげて、ブランキングタイム無し、0.5ms ごとに桁をドライブするパターンでうっすらとゴースト出たという次第。輝度差のあるのをデジカメで撮影するの難しいのでみにくくてすいません。

2014-07-19 10.21.23-2

電圧は 30V で同じ、0.5ms ごとに桁をドライブするのも同じでブランキングタイム 100μs 入れますとかなり改善します。

ゴースト出にくくて助かります。

IV-27M 蛍光表示管を Arduino で動かしてみる。

土曜日に基本の点灯まで行いました IV-27M 蛍光表示管ですが、シフトレジスタにデータ流す順番とかの整理もかねて配線を一部やりなおしました。とりあえずブレッドボードに乗っている部品から下記の回路図を書き出しもしました。

IV-27M CLOCK01

これに、Arduino UNO を接続しまして、シリアルポートから受信した数字を表示するようにプログラムを作成。これは、仕込んでおきたかった機能で、ゴースト確認用に数文字おきに表示とかしたいときなど便利です。
24V ではブランキングタイム入れてない状態でもゴーストほとんど出てないですが、24V の電源をもう少しあげてみたらハッキリ出るかも知れないので、一応ということです。

#include <SPI.h>
#include <stdio.h>
#include <string.h>

/* ------------------------------------------------------------
 -- Grobal Variables
 ------------------------------------------------------------ */
unsigned int msCount = 0;
boolean msCountOVF;
unsigned char vfdDigit = 0;
unsigned char vfdSeg[14];
unsigned char vfdDot[14];
char str01[20];

String inputString = "";     // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete


/* ------------------------------------------------------------
 -- Interrupt hundler (every 0.5ms)
 ------------------------------------------------------------ */
ISR(TIMER2_COMPA_vect) {

  sendVfd();
  msCount++;
  if(msCount >= 2000) {  // 1seconds 
    msCount = 0;
    msCountOVF = true;
  }
  // Reset interrupt flag and counter.
  TIFR2 &= ~(1<<OCF2A);
}

/* ------------------------------------------------------------
 -- Initial Setup
 ------------------------------------------------------------ */
void setup() {

  pinMode(4, OUTPUT);  // SCLR
  pinMode(5, OUTPUT);  // RCK

  // initialize SPI
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);

  //
  Serial.begin(9600);

  // Setup TIMER2
  // a. Disable the Timer/Counter2 interrupts by clearing OCIE2x and TOIE2.
  // b. Select clock source by setting AS2 as appropriate.
  // c. Write new values to TCNT2, OCR2x, and TCCR2x.
  // d. To switch to asynchronous operation: Wait for TCN2xUB, OCR2xUB, and TCR2xUB.
  // e. Clear the Timer/Counter2 Interrupt Flags.
  // f. Enable interrupts, if needed.

  // TIMSK2 2=OCIE2B 1=OCIE2A 0=TOIE2
  // Disable interrupt enable
  TIMSK2 &= ~(1<<OCIE2B);
  TIMSK2 &= ~(1<<OCIE2A);
  TIMSK2 &= ~(1<<TOIE2);
  // ASSR – Asynchronous Status Register
  // 6=EXCLK 5=AS2 4=TCN2UB 3=OCR2AUB 2=OCR2BUB 1=TCR2AUB 0=TCR2BUB  
  // AS2=0 CLKIO,  AS2=1 TOSC1
  ASSR &= ~(1<<AS2);
  // Waveform Generation Mode set to NORMAL mode WGM22,21,20=0
  TCCR2A &= ~(1<<WGM20);
  TCCR2A |= (1<<WGM21);
  TCCR2B &= ~(1<<WGM22);
  // TCCR2B – Timer/Counter Control Register B
  // 7=FOC2A 6=FOC2B 3=WGM22 2=CS22 1=CS21 0=CS20
  // CS22 CS21 CS20 Description
  // 0    0    0    No clock source (Timer/Counter stopped).
  // 0    0    1    clkT2S/(No prescaling)
  // 0    1    0    clkT2S/8 (From prescaler)
  // 0    1    1    clkT2S/32 (From prescaler)
  // 1    0    0    clkT2S/64 (From prescaler)
  // 1    0    1    clkT2S/128 (From prescaler)
  // 1    1    0    clkT2S/256 (From prescaler)
  // 1    1    1    clkT2S/1024 (From prescaler)
  TCCR2B |= (1<<CS22);
  TCCR2B &= ~(1<<CS21);
  TCCR2B &= ~(1<<CS20);
  TCNT2 = 0;
  OCR2A = 124; // 16MHz / 64 = 4us. 4us * 125 = 0.5ms
  // Clear interrupt flag
  // TIFR2 – Timer/Counter2 Interrupt Flag Register
  // 2=OCF2B 1=OCF2A 0=TOV2
  TIFR2 &= ~(1<<OCF2A);
  // TIMSK2 2=OCIE2B 1=OCIE2A 0=TOIE2
  // Enable interrupt
  TIMSK2 |= (1<<OCIE2A);
}

/* ------------------------------------------------------------
 -- Main loop
 ------------------------------------------------------------ */
void loop() {

  int i;
  int charLen;
  // serial input done
  // 9600 bps
  // help&#91;RET&#93; -> print help message
  // HH MM SS[RET] -> set time
  //
  if (stringComplete == true) {
    //Serial.println(inputString); 
    if(inputString.equals("help\r")) {
      Serial.println("help: I'm alive");
    } 
    else {
      for(i = 0; i < 14; i++) {
        vfdSeg&#91;i&#93; = 0;
        str01&#91;i&#93; = 0;
      }
      charLen = inputString.length();
      if(charLen > 15) {
        charLen = 15;
      }
      inputString.toCharArray(str01, charLen);
      for(i = 0; i < 14; i++) {
        convVfdSeg(i);
      }
    }
    inputString = "";
    stringComplete = false;
  }

}

/* ------------------------------------------------------------
 -- sendVfd
 ------------------------------------------------------------ */
void sendVfd() {

  unsigned int vfdBit;
  unsigned char vfdBitH;
  unsigned char vfdBitL;

  // HC595 SCLR(negedge: shift register clear)
  digitalWrite(4,LOW);
  digitalWrite(4,HIGH);  

  // HC595 RCK (posedge: data latch)
  digitalWrite(5,LOW);
  digitalWrite(5,HIGH);

  // send to shift register
  vfdBit = (1 << vfdDigit);
  vfdBitL = vfdBit & 0x00FF;
  vfdBitH = (vfdBit >> 8);
  //if(vfdDot[vfdDigit] != 0) {
  //  digit |= 0x80;
  // }

  SPI.transfer(vfdBitH);
  SPI.transfer(vfdBitL);
  SPI.transfer(vfdSeg[vfdDigit]);  


  // HC595 RCK (posedge: data latch)
  digitalWrite(5,LOW);
  digitalWrite(5,HIGH);  

  vfdDigit++;
  if(vfdDigit > 13) {
    vfdDigit = 0;
  }
}

/* ------------------------------------------------------------
 -- sendVfd
 ------------------------------------------------------------ */
void convVfdSeg(int digit) {

  switch(str01[digit]) {
  case '0': 
    vfdSeg[digit] = 0xFC; 
    break;
  case '1': 
    vfdSeg[digit] = 0x60; 
    break;
  case '2': 
    vfdSeg[digit] = 0xda; 
    break;
  case '3': 
    vfdSeg[digit] = 0xf2; 
    break;
  case '4': 
    vfdSeg[digit] = 0x66; 
    break;
  case '5': 
    vfdSeg[digit] = 0xb6; 
    break;
  case '6': 
    vfdSeg[digit] = 0xbe; 
    break;
  case '7': 
    vfdSeg[digit] = 0xe0; 
    break;
  case '8': 
    vfdSeg[digit] = 0xfe; 
    break;
  case '9': 
    vfdSeg[digit] = 0xe6; 
    break;
  case '-': 
    vfdSeg[digit] = 0x02; 
    break;
  }
}


/*
  SerialEvent occurs whenever a new data comes in the
 hardware serial RX.  This routine is run between each
 time loop() runs, so using delay inside loop can delay
 response.  Multiple bytes of data may be available.
 */
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read(); 
    // add it to the inputString:
    inputString += inChar;
    Serial.write(inChar);
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\r') {
      stringComplete = true;
      Serial.write('\r');
      Serial.write('\n');
    } 
  }
}

IV-27 (ИВ-27) VFD (蛍光表示管) のピンアサインを調べた

2014-06-28 14.59.55-1

ピンアサインがわからないと使えませんので仕方なく調査開始。ブレッドボードに MC34063A を使用した 5V から 24V に昇圧するコンバーターと、パーツボックスに1個だけあった 3.3V 三端子レギュレータを配線して電源まわり完成でございます。

蛍光表示管はカソード(ヒーター)さえわかれば、ピンアサインを調べるのはなんとかなります。そしてヒーターは電線が繋っているのでテスターであたればわかります。それ以外がアノードとグリッドです(笑)
で調べた結果は以下のとおり。見直ししていないので保証はありません。すいません。

IV-27_pinAssign2

一覧に、IV-27M と IV-27 を載せてます。M サフィックスなしが古いやつです。IV-27M は比較的リード線の状態もマシなので不良はなさそうですが、届いた荷物に数個混ってた IV-27 は胡散臭い感じします。そしてピンアサインも違うので困ったものです。つか前回の記事にあげたデータシートと全然違ったので、あわてて前の記事から表消すなども困ったことです。さらに、ピンアサイン調査で既に2個不良発見というエゲツナイ状態。↓の写真のように半分しか表示されないとか、点灯しないとかです。
ヒーター電圧の確認は、電池で3V かけてみて赤くならず、電池一本追加で赤くなりました。データシートには 3.15V と 5.15V があったのですが。3Vのほうが正解だったようです。

2014-06-28 12.53.20-1

問題の無い管はヒーター以外に全部電圧かけてあげれば全部光ます。

2014-06-28 15.00.07-2

とりあえず、ピンアサインはだいたいわかったんでよしとしましょう。

IV-27 (ИВ-27) VFD (蛍光表示管) が届いた

2014-06-25 19.53.34

IV-27 ロシア製蛍光表示管が届きました。記号1桁数字13桁の合計14桁ある表示管です。買ったのはちょっとだけです。こんどの休みにヒーター電圧の確認はしておきたいなーと思うところです。この VFD より短かい IV-21 という 8桁やつはキットで売られてるのも見たことがあるのですが、この VFD って透き通っているというイメージがありました。届いた物の中(いちばん向こう側)は、古いのかして透き通ってないやつも混じっていました。これは別に取っておこうかしらと思うところ。

いつぞやの休みのときにロシア語のデータシートから写してみたものですが、キリル文字ローマ時変換で、現在使われていない文字とがたくさん出てきてたいへん苦労しました。セグメントなどは7セグ準拠におきかえています。空欄は翻訳出来ずに現物見ないとわかりせん状態であけてあります。
とにかくヒーター電圧の確認からですね。3.15V と書いているものと 5.15V と書いてあるデータシートがあるためです。ダイナミック点灯などうまくいけば、頒布品に加えられるかも知れませんがまだ先になりそうです。

事前に調べたピンアサインが全然違ったため画像は削除しました(2014.06.28)

LD8113 蛍光表示管の基板動作確認

2日に基板届きまして、部品実装と動作確認を行なっていました。

動作確認で判明した問題点は、LD8113 用のアノード、グリッド用の電圧を作る DC/DC の出力に平滑用のコンデンサ入れ忘れたことです。過去記事でブレッドボードに組んであれこれいじっていたときには付けていたのですが、回路図に起すときにモレました。ブレッドボードに物を落下させて LD8113 割ったあとに回路図書いてます。

頒布品の説明ページでは、この修正についてもお願いという形で記述です。

2013-05-03 17.39.06

LD8113 のヒーターは管あたり約 100mA 弱も食うのでヒーター用電源回路の温度は測ります。MC34063A の温度で一番高かったのは 4番ピンあたりでした。40℃手前で落ち着いているようです。基板裏はベタアースにしていますが、MC34063A のピン2本はサーマルランド経由でベタアースに接続されているので、抵抗は大きいですが多少は放熱に役立っているのかなと思います。

LD8113 蛍光表示管の基板が届きました。

2013-05-02 12.58.34

と、言いましても最初のテストなので枚数は最小限で注文しています。基板手前に「G」のようなものがありますが木材のふしなので気にしないで下さい。

2013-05-02 15.51.16

基板の大きさは 150mm x 50mm です

2013-05-02 15.48.43

で、ブレッドボードで試作していたときのプログラムを Arduino UNO に書き込みしまして表示のテスト。動いたので OK ですね。

カソード(ヒーター)は 1V ~ 1.2V あたりを目安に設定。アノード、グリッドは半固定抵抗の調整で 30V ~ 36V くらいの調整範囲になります。頒布品として準備させていただきます。

久しぶりにデジット行きましたが、 LD8113 の箱が無くなっていた

ゴールデンウィークなのに旅行にも行かず。行くのはポンバシばかりなり。

まぁ、お安い戦車プラモなどもついでにということで、キッズランドとボークス立ち寄りますも最近の戦車プラモも 5,000 円くらいするのが多い。店頭でむむ~と唸りながらも購入に至らず。ということで、いつもの電子部品屋さんへ定期巡回と。なんの書籍かはわかりませんが電子工作の記事を出しながら部品集めされている学生さんグループなど。結構混んでましたね。お会計はバラバラのタイミングで頼みますよと。

デジットさんでは、 LD8113 の箱が無くなってましたね。これで打ち切りなのか、たまたまかは確認していません。以前からずっと販売されている VFD 表示ユニットなどにおきかっわてました。

LD8113 蛍光表示管のキットはテストで基板 10 枚だけ準備中なのですが、オーダー入るようであれば追加も検討かなぁ。デジットさんところで放出された球数が少ないのでほどほどにしとかないとね。Max 50枚想定かなぁ

LD8113 VFD 6桁ボードのイメージ完成

LD8113_201304161508

LD8113 蛍光表示管用 6 桁ボードの案がほぼまとまりました。今回は面実装部品ございません。大きさは 150mm × 50mm です。ドリルホールは基板外形から 5mm 内側です。

  • LD8113 蛍光表示管用 6桁ドライブ基板です
  • 74HC595 のシフトレジスタにデータを流し込む方式です
  • AVR マイコンなどでは SPI のデータレジスタに値をストアするだけでシフトレジスタにデータを送れます
  • ダイナミック点灯のため、上記データ送出は一定のタイミングで行う必要があります
  • 電源は 5V, 2A 以上の AC アダプタをご使用下さい(10W クラスでもアダプタによっては発熱します)
  • 電源のジャックは 2.1φ センタープラスです

もうちょっとしたら基板のガーバー出して準備します。

LD8113 VFD 表示基板の概要検討

自分頭の中だけでブレスト中というステータスです。 www 意味ねぇ。

プログラミング済みマイコンチップ付けるのは面倒臭いの極みがヒシヒシ伝わってくるので、現状はシフトレジスタに流し込んで終り。でいいのではないかと思うようになってきています。LD8113 の VFD も 6 管なら 74HC595, TD62783 2セットで十分です。8本ドライブなら、シフトレジスタとドライバ一緒になってる HV5812 を乗せましょうというところです。カソードの電源も考えんといけませんが…

個人の在庫は2本割ってしまったのでね、VFD 付きのセットで10セット、基板 + 部品だけなら必要な数出しまっせ。というところですが実際問題どんだけ需要あるのかねぇ。ここの割り切りがなかなか付かないので保留。