LD8113 蛍光表示管の点灯回路試作

2013-03-18 12.17.46

先週の金、土曜日で単体での点灯をやってみまして。日曜は墓参りのためほとんど手つかず。月曜の午前中である程度まとまってきたかなという感じです。

Arduiono から SPI 通信で HC595 のシフトレジスタへ表示させるデータを送ります。蛍光管のアノードのビットと、グリッドのビットを流し込みしまして、シフトレジスタの出力が TD62783 のソースドライバに接続されます。TD62783 の先は蛍光管の各アノード、グリッドに接続。回路的には必要最低限の状態ですね。

2013-03-18 12.09.15

とりあえず、時計っぽい表示だけするプログラムを Arduino に入れまして、ダイナミック点灯させてみたというやつです。

今回は、カソードのバイアスもかけていないしドライバ側も素で接続しているだけのため、。1ms のブランキングタイムを経過した後に必要な桁を 1ms 点灯させる方法で実験しています。ブランキングタイムを設けることでゴーストは改善されます。

タイマ割り込みを 1ms でプログラムしちゃった関係で今はこれが精度の限界。タイマ割り込みを 100μs 毎にすれば、点灯させるデューティー比の設定範囲広げられるので、もうちょっとやってみましょう。

#include

/* ————————————————————
— Class instance
———————————————————— */

/* ————————————————————
— Grobal Variables
———————————————————— */
unsigned int msCount = 0;
boolean msCountOVF;
int hh = 11;
int mm = 58;
int ss = 0;
int vfdDigit = 0;
unsigned char a = 0;
unsigned char b = 0;

/* ————————————————————
— Interrupt hundler
———————————————————— */
ISR(TIMER2_COMPA_vect) {

// inclement millisecond counter
msCount++;
if(msCount >= 1000) {
msCount = 0;
msCountOVF = true;
}
// Reset interrupt flag and counter.
TCNT2 = 0;
TIFR2 &= ~(1< 5) {
vfdDigit = 0;
}
}

if(msCountOVF == true) {
ss++;
if(ss == 60) {
ss = 0;
mm++;
}
if(mm == 60) {
mm = 0;
hh++;
}
if(hh == 25) {
hh = 0;
}
msCountOVF = false;
}
}

/* ————————————————————
— Send vfd
———————————————————— */
void sendVfd(int digit, int num, int dot) {

// HC595 SCLR(shift register clear)
digitalWrite(3,LOW);
digitalWrite(3,HIGH);
// RCK positive edge data latch
digitalWrite(2,LOW);
digitalWrite(2,HIGH);
delay(1);

a = (1<

日本橋などで買い物(何回目?)

2013-02-03 13.23.45
2013-02-03 13.24.46
2013-02-03 13.27.19

デジットさんの Tweet に「懐かしいあの蛍光表示管「LD8113」が数量限定で再入荷しました!」(抜粋してます)、かのような再入荷のお知らせ。以前買ったときは10年くらい前のことでございます。ニキシー管や蛍光表示管は海外通販で買えないことはありませんが最近は地味に入手しづくなってきているのが現状です。

ということで、お小遣い奮発して1箱いただいてまいりました。これも GPS時計キットかなんかにして、数量限定でお配り出来るようになるといいですかね。と思うこのごろ

青色 LED は、IN-9 ネオン管のマウントをどうしたものかと悩み中なのですが、アクリル版にマウントしたときに LED で照らしてみてどうなるかなぁ? ということで仕入れたものです。

多機能タイマ製作

AquesTalkPico ATP3011F1, Noritake VFD モジュール、リアルタイムクロックで作りかけの多機能タイマもどきのビルディング中。これは写真撮影、天体観望などお外で使いたいと思っているものです。

基本的なモード

  • 現在時刻の表示
  • ボタン押したら時刻をしゃべる(まだボタンは未配線)

追加要素

  • ラーメンタイマ(時間間際にしゃべって知らせる)
  • デジタル一眼用インターバルタイマ(まだ未配線)

Arduino のスケッチで I2C 接続している RTC と AquesTalk Pico, シリアル接続の VFD モジュールの接続確認出来た状態でコンパイル後 5KB くらい。マイコンは32kB なので入って欲しいなぁと思いつつ。割り込み使う方法か、メインループでベタに時間見ながら処理するかが実は決まっていないというひどい状態。ここらへんはトライ アンド トライ でいきましょう。

ノリタケ伊勢電子のVFDモジュールに PowerShell からビットマップファイルを表示してみたテスト

function initializeVfd
{
    $a = [byte]0x1b, [byte]0x40
    $serialPort.write($a, 0 ,$a.Length)
}

function clearVfd
{
    $serialPort.write( [char]0x0c )
}

function displayCursorVfd
{
    $a = [byte]0x1f, [byte]0x43, [byte]1
    $serialPort.write($a,0,$a.Length)
}

function moveCursorVfd([int]$x, [int]$y)
{
    $a = [byte]0x1f, [byte]0x24, [byte]5, [byte]0, [byte]1, [byte]0
    $serialPort.write($a,0,$a.Length)

}

function drawBitmapVfd
{
    $a = [byte]0x1f, [byte]0x28, [byte]0x66, [byte]0x11, [byte]128, [byte]0, [byte]8, [byte]0, [byte]1
    $a.Length
    $serialPort.Write($a, 0, $a.Length)
    $serialPort.write($vfdimg, 0, $vfdimg.Length)
}

$serialPort = New-Object System.IO.Ports.SerialPort "COM1", 38400
$serialPort.Open()
initializeVfd
clearVfd
displayCursorVfd
#moveCursorVfd
$img = [System.Drawing.Image]::FromFile("D:\mkusunoki\Documents\i-tron128X64.bmp")
$vfdimg = New-Object byte[] ($img.Width * $img.Height / 8)
for($i = 0; $i -lt $img.Width; $i++)
{
    for($j = 0; $j -lt ($img.Height / 8); $j++)
    {
        $bb = 0
        if($img.GetPixel($i, $j * 8).G -gt 127)
        {
            $bb = 1
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 1).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 2).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 3).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 4).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 5).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 6).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 7).G -gt 127)
        {
            $bb++
        }
        $vfdimg[$i * ($img.Height / 8) + $j] = $bb
    }
}
drawBitmapVfd
# $serialPort.Write("HHHHH")
$serialPort.Close()
$serialPort.Dispose()

ということで、128×64ドットのディスプレイになんか表示しましょうということです。とりあえず、付属のCDROM に入っていたサンプルに i-tron128X64.bmp というビットマップファイルがあったのでこれを表示させてみることにしました。

今回は Windows の PowerShell というやつを使いまして、ビットマップファイルをロードして、シリアルポートに投げるというものです。まだ試行錯誤中のアプリケーションノートからロジック丸パクしたソースは以下に掲載します。あとは、ビットマップオジェクトをいじれば漢字だろうが何だろうが描画出来るので少しだけ前に進んだかな?

ノリタケ伊勢電子のVFDモジュールが出てきたので何かに使えないかなぁ

何年も前に買って、ジャンクボックス入りしていたものです。経緯は覚えてませんが何故か2個あります。ひとつは 128×32 ドットのパネルでもうひとつは 128×64 ドットです。

で、壊れてないか動作確認ですが、壊れていないようです。かつ小さいほうは漢字フォントが搭載されてたのでこれは何かに使えそうです。

んで、もうひととつの大きいほうは残念ながら漢字フォントが搭載されていない機種だったので文字化けします。表示エリアが広いのでいろいろ使い出はありそうですが、手頃なアプリケーションが思いつきません。

どちらも、シリアルポートにコマンド流せば表示出来るので、どっちかというとプログラミングを楽しむためのオモチャというところでしょうか。

小さいほうなら漢字表示出来るので、webからhttpのテキスト拾ってきて、それをたれ流しするスクリプト実行しとくとか、大きいほうはどうでしょうか、バーグラフかなぁ、.net framework で各CPUの使用率とか拾えたっけ?なら Windows power shell さわったことないのでこれを機会にちょこっと組んでみたいです。