ブログの練習

ブログを書く練習です。
最近はレトロな計算機(電卓、マイコン、パソコンなど)
に関することを書き始めました。

VFDにXの画面を表示させるまでのメモ(1)

2021-03-08 15:17:03 | VFDモジュール

ラズパイにつなげたVFDにXの画面を表示させることができました。
これに至るまでには結構いろいろなことをやったので、何をやったかを備忘録として残しておきます。

(2021/3/11 追記)GitHubのドキュメントにまとめましたのでご覧ください。
OGPイメージ

ryomuk/gu3000

Library for Noritake Itron GU3000 series (GU3100 and GU3900) VFD modul...

GitHub

 


(1)レベル変換用基板の作成
VFDの信号が5Vなのに対しラズパイは3.3Vなのでレベル変換が必要です。
ラズパイ→VFDがD0~7, WR#の9本、VFD→ラズパイがRDYの1本。
VFD側はLV374とかで受けているので、3.3Vの信号でも動くような気がしますが、データシートの推奨条件から外れるので真面目に変換することにしました。
VFD→ラズパイのRDYも抵抗分圧でも良さそうですが、周波数が高いと真面目に変換した方がよさそうだったので、ワンゲートロジックを使うことにしました。
回路図はこちら。
https://github.com/ryomuk/gu3000/raw/main/hardware/schematics.pdf


(2)ライブラリの作成
8年ぶりにプログラムを書きました。
仕事ではCとperlばかりだったので、C++で書くのは実は初めてだったりします。
GitHubで公開することにしました。
OGPイメージ

ryomuk/gu3000

Library for Noritake Itron GU3000 series VFD module for Raspberry pi 4...

GitHub

 


(3)ラズパイのフレームバッファの設定
/boot/config.txtに下記を記述。
これだとHDMIと共存出来ないような気がしますが、使っていないのでとりあえずこれで済ませました。

framebuffer_height=128
framebuffer_width=256
hdmi_cvt=256 128 60 3 0 0 0
hdmi_group=2
hdmi_mode=87
hdmi_force_hotplug=1
framebuffer_depth=16

(2022/8/6追記:上記で、'framebuffer_depth=16'はkernel5.10で必要になったので追加しました)

depthが16bitなので、8bitにしようと
framebuffer_depth=8 

と書いたらbootしてくれなくなり、リモート接続も出来なくなってハマり。SDメモリ上の/boot/config.txtをwindows機で書き直して無事直りました。

(4)Xの設定
Xorgの設定ファイルを探したところ、/etc/X11/にxorg.confが無く、
/usr/shar/X11/xorg.conf.dがあってそれを使っているらしいことが判明。
下記内容のxorg.confを/etc/X11/xorg.confに置いてstartxを起動したら動きました。

Section "Device"
Identifier "testdevice"
Driver  "fbdev"
Option "fbdev" "/dev/fb0"
EndSection

Section "Monitor"
Identifier "testmonitor"
EndSection

Section "Screen"
Identifier "screen"
Device "testdevice"
Monitor "testmonitor"
EndSection

Section "ServerLayout"
Identifier "default"
Screen 0 "screen" 0 0
EndSection


(5)window managerの設定
ラズパイ標準のopenboxなるwindow managerは大画面が想定されていて、設定もGUIで行うことが想定されているらしく、端末接続で設定ファイルをいじる方法がわからなかったので、昔懐かしいtwmを使うことにしました。
~/.xsessionに以下を記述

#/bin/sh
xrdb -merge $HOME/.Xresources
twm &
exec xterm -geometry 40x8+0+0

(6)フレームバッファをVFDにコピーするサービスの設定
/dev/fb0をVFDに逐次表示するコマンド(showfb)を作成。
フォントの設定と上記コマンドを起動するシェルスクリプトshowfb.shを作成。内容は下記の通り。
(フォントの作成については後日書きます。)

#!/bin/bash
setfont /usr/share/consolefonts-extra/Noritake6x8.psf
exec /usr/local/bin/showfb

/usr/local/binに置く。
上記スクリプトをサービスとして起動
/etc/systemd/system/showfb.service を作成、下記を記述。

[Unit]
Description=Show /dev/fb0 on VFD module
After=console-setup.service

[Service]
ExecStart=/usr/local/bin/showfb.sh
#ExecStart=/usr/local/bin/showfb
WorkingDirectory=/tmp
#StandardOutput=null
#StandardInput=null
Restart=always

[Install]
WantedBy=multi-user.target

sudo systemctrl enable showfb.service
で、サービスを有効化。

以上で、冒頭の画像のような状態になりました。


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする