HakoHiro が 2021年02月08日08時08分41秒 に編集
説明追記
本文の変更
# 概要 レトロに光る 蛍光表示管(Vacuum Fluorescent Display)IV-18を使って時計を作ります。更に時計を木の枝に組込んでみました。 ニキシー管とは異なり、青緑色の表示で結構気に入っています。 ただ、これも既にディスコン品です。なにかディスコン品で時計ばかり作っていますね。(バブルLED,ニキシー管、VFD・・・)そろそろディスコン品の作成、投稿は打ち止めにしたいと思っています。 # VFD管とは 蛍光表示管(Vacuum Fluorescent Display)のことで、1966年に伊勢電子工業(現在のノリタケ伊勢電子)の発明です。ノリタケ伊勢電子さん自体はVFD管を継続生産していますが、今回使用する IV-18は、ソビエト製(ロシアではないよ!)で、20世紀末に製造中止です。 VFD管の動作原理等については、ノリタケ伊勢電子さんのHPを参照ください。https://www.noritake-itron.jp/cs/appnote_vfd/1 1. IV-18 Amazon 等で結構販売しています。1,300円/1本程度。 ![IV−18外観](https://camo.elchika.com/2ef1aa097ff4ac4472d702201f4c37109d16b8ca/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f30613966386665352d653239642d346261662d623864392d393838613132303062626631/) ![IV−18 後ろが透けて見えます](https://camo.elchika.com/10f4b9a36a3de717b278a7ec5004ed764aa32bdb/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f64643537333039642d323134642d346231392d613032382d396234346265363337323937/) ![IV−18背面 内部の太い棒がPin1 Filamentです](https://camo.elchika.com/beaaa984d09f1ce19b64ec875ff708925c952de8/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f31353163643334612d396237342d343331382d616362392d373031366661613031636132/) 資料は Dieter's Nixie Tube Data ArchiveのPDFファイルが参考になりました。 https://pdfslide.tips/documents/dieters-nixie-tube-data-nixie-tube-data-archive-document-in-this-file.html 1. ピンアサイン 上記の資料からの抜粋です。 ![Bottom Viewです](https://camo.elchika.com/160ecce9252e19c9cf2b781445a9957ef681b6fc/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f66386631306666352d633863642d343335362d626262392d613164353766656334383631/) 1. ピン位置の確認方法 ピン位置の確認が大変なのですが、最初の確認方法がおすすめです。 - 6,7,8PinがTube内でどこにも繋がっていない で判断するのが楽です。 - 1Pin Filamentが 背面の太い線に繋がっている - 22Pinのワイヤーがわずかに短い 1. 予備点灯確認 Filament間(Pin1-Pin13)に 5V、Anodeに20-30V加えると発光します。 ![ピンアサイン確認も兼ねて、また古い素子なので欠陥確認の為](https://camo.elchika.com/706d1e0ac59c96d520dae6e16e94e633630576e6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f61646461353830662d343235362d343034332d623433392d323863623862373966383333/) # 概略ブロック ![概略ブロック図](https://camo.elchika.com/4bf0ad65995071ef7839310df2ce1afbed65ec68/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f38306534613563652d653332652d343965382d623834612d303034663562326436626132/) IV-18の駆動は HV5812 ICで直接24Vをスイッチングします。 IV-18のフィラメントとHV5812のコントロールに5V を必要としますので、DC-DCレギュレータで 24Vから5Vを作成。 時計のコントロールは、M5Atom liteを使用します。M5Atomは、NTPサーバーから時刻を取得し、内部タイマーをセットします。そのタイマーで時刻データを生成し、3.3V SPIで出力します。それを 4bit Level変換素子で 5V SPIに変換し、HV5812を通して IV-18に表示します。 1. 部品一覧(金額は概略です) - M5 Atom lite: スイッチサイエンス 980円 - HV5812: Mouser 300円 - レベル変換:秋月電子通商 200円 4ビット双方向ロジックレベル変換モジュール AE-LCNV4-MOSFET - DC/DCレギュレータ:秋月電子通商 240円 三端子DC/DCレギュレータ 5V BP5293-50 - DCジャック:秋月電子通商 1. M5Atom lite ![キャプションを入力できます](https://camo.elchika.com/a1eb818f0905567e6365c7911143d79572a43b41/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f33656239626133392d653764362d343736362d616537612d646237386438313937383731/) 小さい、安い、でもI/O端子が多い、更にWiFi,Bluetoothが使える。言うことはありません。RTCのついているM5Stick-Cを使おうとも考えたのですが、どうせ時刻合わせをしなければならないなら、Atom liteで充分と考えました。 1. HV5812 Microchip社の”20-Channel Serial-Input Vacuum Fluorescent Display Driver for Anode or Grid”です。 SPI信号で、20-80Vの20本の信号線を直接スイッチング出来ます。ICのタイトルにもあるようにVFD用のICです。 ニキシー管でも、HV5522と言うICがあり、こちらは200VをSPIでスイッチング出来ます。これらの石を使うことにより、少ない信号線で、高電圧をスイッチング出来、配線を削減できます。(精神健康上、高圧の引き回しが少ないだけで大分違います) 1. ブレッドボード内配置 ![動作確認したのでユニバーサルにします](https://camo.elchika.com/7c35b8ef8fb66f905ee9fcee83f620da17747ca1/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f66343935333032312d333238302d343939622d393963362d396631383661623765333264/) # 筐体(木の枝) 筐体(これでも筐体と呼んでいいものかしら?)には、イチイの木の枝を使います。北海道ではオンコと呼んでいる木です。アララギという別名もあります。樹皮を剥いて生地を出しても白くて美しいのですが、剥くのはいつでもできるので樹皮を残して彫り込みを入れます。オンコの木は削っていて気持ちよく、いつまでも彫り込んでいたくなります。 ところで、オンコの実を食べたことはありますか?甘くて美味しいですが、種子にはアルカロイドの毒があります。還暦すぎるまで、種子に毒があることは知りませんでした。子供の頃はよく食べたのですがね。 ![筐体にVFD用の彫込](https://camo.elchika.com/7315f38d86073a76e559dd8a627ebbf498c64d15/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f66663433323130612d623362652d343236382d623433642d643138333338303830626435/) IV-18のワイヤーにケーブルをはんだ付け、ワイヤーは熱収縮チューブで保護。 ![VFDを設置、配線引き出し](https://camo.elchika.com/8dc53aa59c7203396283cef674bd6c4b707701ad/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38333537363361302d393332382d343665392d383165622d3234323436633435373839342f39396263323130352d626535352d343737652d616231352d616463623537323034326637/) あとは、所定の位置にケーブルを差し込めばOKのはず。 # プログラム MacでVS-Code+PlatformIOを使用して開発。Arduinoライブラリを使用。 内容は主に、HV5812を駆動する SPI制御と、NTPサーバーから時間を取得する制御になる。SPIの方は、前のニキシー管で経験があったのであっさり出来てしまい、ほんとにこれがベストかどうかが良く分からない状態です。 NTPサーバーの方は、「ESP32/ESP8266でインターネット時刻と同期する」の記事を参考にこれもあっさりと片付いた。 https://programresource.net/2020/02/17/2852.html そして、動作確認完了の直後であり、あまりエラー処理等真面目にやっていませんが、ソースを以下に記載します。 ```arduino:VFDIV−18時計 /* Atom lite * using VSPI and control HV5812 * SCLK #19 * MOSI #33 * MISO ----- * CS(SS) #23 * Blanking #22 //用意したけど使っていない * * //Timer部分は「ESP32/ESP8266でインターネット時刻と同期する」 からコピー */ #include "M5Atom.h" #include <SPI.h> #include <WiFi.h> #include <time.h> // wifiの設定 const char* ssid = "xxxxxxxxxxxxxxxx"; // WiFiのSSID const char* password = "xxxxxxxxxxxx"; // WiFiのパスワード unsigned long last_timer; #define JST 3600*9 #define BLK 22 // Blanking byte font[10]; // 数字Font 0-9 unsigned int digit[8]; // VFD の左端の桁がindex0 unsigned int timeData[6]; // 2byte hh mm ss void getTimeAndMakeData(void); void setup() { // --------------------------------------- // WiFiを通して NTPサーバーと同期 WiFi.mode(WIFI_STA); if (String(WiFi.SSID()) != String(ssid)) { WiFi.begin(ssid, password); } while (WiFi.status() != WL_CONNECTED) { delay(500); } configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); Serial.print("Sync time."); time_t t; do { t = time(NULL); delay(100); }while (t == 0); // Timer設定処理 End // --------------------------------------- pinMode(BLK,OUTPUT); digitalWrite(BLK,0); font[0] = 0x7e; font[1] = 0x0c; font[2] = 0xb6; font[3] = 0x9e; font[4] = 0xcc; font[5] = 0xda; font[6] = 0xfa; font[7] = 0x0e; font[8] = 0xfe; font[9] = 0xce; // 桁位置定義 シフト演算でも良いのだけれど・・ digit[0] = 0x8000; digit[1] = 0x4000; digit[2] = 0x2000; digit[3] = 0x1000; digit[4] = 0x0800; digit[5] = 0x0400; digit[6] = 0x0200; digit[7] = 0x0100; M5.begin(true,false,false); delay(50); M5.dis.drawpix(0, 0xf00000); // Green 起動確認用 SPI.begin(19,-1,33,23); //sclk=#19,MISO=Non,MOSI=#33,SS=CS=#23 SPI.setFrequency(70000); SPI.setDataMode(SPI_MODE2); // MODE2で動いちゃったから細かい検討なし } void loop() { getTimeAndMakeData(); // 内部タイマーから表示時間Dataを作成 // hh mm ssを表示 for (int i=0; i < 6; i++) { SPI.setHwCs(true); SPI.write16(timeData[i]); //HV5812は20bit、Dataは16bitと合っていないが //不足分は0となるみたい //ちなみに write32でも動く SPI.setHwCs(false); delay(1); // delay無しでいける?未確認 } } void getTimeAndMakeData() { time_t t; struct tm *tm; t = time(NULL); tm = localtime(&t); int indexNum[6]; indexNum[0] = tm->tm_hour / 10; indexNum[1] = tm->tm_hour % 10; indexNum[2] = tm->tm_min / 10; indexNum[3] = tm->tm_min % 10; indexNum[4] = tm->tm_sec / 10; indexNum[5] = tm->tm_sec % 10; // 時計表示の場合は、hh mm ss として空白桁を2,5桁とする timeData[0] = digit[0] + font[indexNum[0]]; timeData[1] = digit[1] + font[indexNum[1]]; timeData[2] = digit[3] + font[indexNum[2]]; timeData[3] = digit[4] + font[indexNum[3]]; timeData[4] = digit[6] + font[indexNum[4]]; timeData[5] = digit[7] + font[indexNum[5]]; } ``` ## platformio.ini ```arduino:platformio.ini [env:m5stick-c] platform = espressif32 board = m5stick-c framework = arduino upload_speed = 115200 monitor_speed = 115200 lib_deps = m5stack/M5Atom@^0.0.1 fastled/FastLED@^3.4.0 ``` platformio.ini はプロジェクトのライブラリ等の設定ファイルです。 upload_speed と monitor_speed それと、lib_depsにM5Atomライブラリを登録しています。 FastLEDのライブラリは、Atom本体のボタンのLEDの為に必ず必要となります。(いつまでかわかりませんが・・・) # 動作状況 Youtube動画で動作状況を御覧ください。 @[youtube](https://www.youtube.com/watch?v=ae8jYAQnY_Q)
写真、動画で見ると表示がちょっとちらついていますね。目視では全然気にならないのですが、SPIがあんまりあっさり動いてしまったので速度パラメーターを全然調整していませんでした。
# 感想 1. HV5812 とにかく、VFDとかニキシー管を制御するときは、このたぐいのSPIで高圧をスイッチングするICを使うべきだと思います。特にニキシー管の場合、ディスコンのSN74141Nを使う例が多いのですが、入手困難な上、所詮高圧のBCDデコーダーですから、配線量はそんなに減りません。 1. M5Atom lite 小さくて、安くて、I/Oが多くて さらに通信もついているので、非常に使いやすい。当方がこれから制作するハードウェアの大部分はこれか、Atom matrixになっていきます。 1. IV-18 蛍光表示管 この 青緑色の表示は落ち着きますね。蛍光表示管では、IV-21というこれよりも1回りくらい小さい管もあるのですが、老眼の目ではちょっと離れると時間識別不可能となってしまいます。 これ以外にも、いろんな蛍光表示管がありますので、調べてみてはどうでしょう。 # 今後の課題 - ブレッドボードからユニバーサルへの変更
流石に24Hr継続して通電するものにブレットボードはいただけないので、早めにユニバーサル基板に移すつもりです。
流石に24Hr継続して通電するものにブレットボードはいただけないので、早めにユニバーサル基板に移すつもりです。同時にSPI速度パラメーターの調整。
- 標示の工夫 IV-18は、8桁+符号が表示可能なのに、6桁しか使っていない。表示を流すとかして、もう少し派手目にしたい、また日付、温度、湿度とかも表示したい。この投稿で秋月電子通商様の賞品をGetしたら、追加センサーを考えてみようと思います。 - 枝の皮むき(どうしようかな?) オンコの木は、樹皮を剥くときれいな白色なのですが、この皮付きもなかなかいけるので迷っています。