先週の金、土曜日で単体での点灯をやってみまして。日曜は墓参りのためほとんど手つかず。月曜の午前中である程度まとまってきたかなという感じです。
Arduiono から SPI 通信で HC595 のシフトレジスタへ表示させるデータを送ります。蛍光管のアノードのビットと、グリッドのビットを流し込みしまして、シフトレジスタの出力が TD62783 のソースドライバに接続されます。TD62783 の先は蛍光管の各アノード、グリッドに接続。回路的には必要最低限の状態ですね。
とりあえず、時計っぽい表示だけするプログラムを 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<