Beaglebone BlackにTFT液晶モジュールATM0430D25を繋ぐ

BBB Rev.Cにグラフィック液晶の接続を試みたので記録に残す。
選んだLCDは秋月の1850円LCDであるTFT液晶モジュールATM0430D25。

これまではいわゆる秋月の3000円LCDであるTFT液晶モジュールATM0430D5を付けようかと長い間迷っていたが、部品代合計が5000円を超えてくる。
4DCAPE-43Tを通販で購入した方がむしろ安くなってしまうので踏ん切りが付かずにいた。
4DCAPE-43Tを買って付けるのでは面白みに欠けるが、だからといってタッチスクリーンが無くて値段が高いものを作るのも興醒めだ。
1850円のLCDならばギリギリ電子工作のモチベーションを満たせるというわけだ。

とは言え、LCD接続に関しては多くの先人が数年前に踏破しつくしている領域で、新しいことは何もない。
なのでせめて、できるだけ再現性に関して注意を払ってみようと思う。
ハンダ付けは20ピンの細ピンヘッダ2個だけであるので、簡単にカラーグラフィック液晶を試す事ができる。

回路図は以下。

部品表も一応示す。

記号キゴウ 型番カタバン 仕様シヨウ/諸元ショゲントウ 定数ジョウスウトウ 数量スウリョウ 入手ニュウシュサキ
L1 ATM0430D25 TFT液晶モジュール 1 秋月アキヅキ電子デンシ
DB1 AE-CNCONV-40P-0.5 フレキコネクタDIP化基板 1 秋月アキヅキ電子デンシ
U1 MAU104 1W級絶縁型DC-DCコンバータ 12V84mA 1 秋月アキヅキ電子デンシ
R1,R2 アキシャルリードカーボン抵抗テイコウ 33Ω 2 秋月アキヅキ電子デンシ
R3 アキシャルリードカーボン抵抗テイコウ 57KΩ 1 秋月アキヅキ電子デンシ
J1,J2 ホソピンヘッダ 20P 2 秋月アキヅキ電子デンシ
2.54mm用フラットケーブル
オス-メス※
(QIコネクタ コード付き)
40P 20cm 1 サトー電気
           

※必要に応じて切り分ける

この他にブレッドボードとブレッドボード用の配線部材が若干必要。

この作例ではRGB565の16bitカラーとなる。
BBBもATM0430D25も実はRGB888の24bitカラーをサポートする。
なのでRGB888フルカラー実装とすることも可能だと思われる。
実際BB-BONE-LCD4-01の設定を見る限りbpp=24となっているのでドライバレベルではRGB888で動作しているもののGPIO設定はRGB565分のみ
有効化されているようだ。
有効化されていないdata線をdtsファイルで有効化させ、LCDと結線すればRGB888の24bitカラー表示が可能になるものと思われるが試していない。
不足している設定は以下のPINのもの。

P8.19	mode1:lcd_data23	B0
P8.13	mode1:lcd_data22	G0
P8.14	mode1:lcd_data21	R0
P8.17	mode1:lcd_data20	B1
P8.12	mode1:lcd_data19	G1
P8.11	mode1:lcd_data18	R1
P8.16	mode1:lcd_data17	B2
P8.15	mode1:lcd_data16	R2

ちなみにAM335XにはLCD周りにSilicon Errataがあり、RGB565の場合とRGB888の場合でRとBの結線が入れ替わってしまう。
普通に考えると、RGB565の結線を選ぶならばFrame bufferもRGB565で運用した方がメモリ効率の点でも処理速度の点でもメリットがあるが、RGB565とRGB888を同じ結線にはできないのでどちらかを選ぶ必要があるわけだ。
RGB565での結線にしてしまうと将来RGB888への変更が(ハード変更無しでは)できなくなるのでメモリ効率と処理速度を犠牲にしてRGB888での結線を選択するのも一手であろう。

ATM0430D25はSYNC modeとSYNC-DE modeの二つの同期手段をサポートし、HSYNCとVSYNCをGNDに短絡させることでSYNC-DE modeにすることができる。
SYNC-DE modeはATM0430D5の制御方式とほぼ同一となり一定クロックの間DEが入らなかった場合VSYNCが発生したものとしてラスタ同期を行う仕様のようだ。
VSYNC/HSYNCが不要となり、DEだけの制御となるので簡略化される。
良く考えられたI/Fだと思う。

写真では多くのジャンパ線が飛んでいるが、フレキコネクタDIP化基板の方で端子処理を行ってしまえば、VLED+, VLED-, VDD, GND, R3~R7, G2~G7, B3~B7, PCLK, DEの22本の結線となる。
この程度ならデングラを除く信号線18本をポリウレタン線で引き回す気にもなるので工作として自由度が高いのではないだろうか。

バックライトLEDは12Vが必要なのでDC-DCコンバータMAU104で5Vから生成する。
R3はMAU104を出力無負荷にすると電圧が跳ね上がるのでLCDを繋げていない場合での負荷として入れてある。
R1/R2はダンパ抵抗。

BBBの設定としては4DCAPE-43T用のものが流用できる。
具体的にはBB-BONE-LCD4-01をcape_mgrに食べさせてやれば良い。
タッチスクリーン系の設定やボタン入力の設定等余計なものもあるが、とりあえずLCDを試すだけであれば十分だ。
ただし、BBBではデフォルトでlcd_data0~lcd_data15, lcd_vsync, lcd_hsync, lcd_pclk, lcd_ac_bias_enといった信号がHDMI出力サポートの為に使用されている。
これらの信号線を使うためにはBB-BONELT-HDMIとBB-BONELT-HDMINの二つの仮想CapeをDisableにする必要がある。
このためには/boot/uboot/uEnv.txtを編集する。
ついでにBB-BONE-LCD4-01が電源投入でenableになるようにする。

debian@beaglebone:~$ sudo -s
root@beaglebone:/home/debian# export SLOTS=/sys/devices/bone_capemgr.9/slots
root@beaglebone:/home/debian# cat $SLOTS
 0: 54:PF---
 1: 55:PF---
 2: 56:PF---
 3: 57:PF---
 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
root@beaglebone:/home/debian# cp /boot/uboot/uEnv.txt /boot/uboot/uEnv.txt.backup
root@beaglebone:/home/debian# nano -w /boot/uboot/uEnv.txt
root@beaglebone:/home/debian# diff -u /boot/uboot/uEnv.txt.backup /boot/uboot/uEnv.txt
--- /boot/uboot/uEnv.txt.backup 2014-10-26 13:18:42.000000000 +0000
+++ /boot/uboot/uEnv.txt        2016-02-07 13:48:00.000000000 +0000
@@ -12,7 +12,10 @@
 #cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,BB-BONE-EMMC-2G

 ##Disable HDMI
-#cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
+cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
+
+#Enable LCD4
+cape_enable=capemgr.enable_partno=BB-BONE-LCD4-01

 ##Audio Cape (needs HDMI Audio disabled)
 #cape_disable=capemgr.disable_partno=BB-BONELT-HDMI
root@beaglebone:/home/debian# 

再起動。

root@beaglebone:/home/debian# sync
root@beaglebone:/home/debian# sync
root@beaglebone:/home/debian# sync
root@beaglebone:/home/debian# reboot

結線が正しければLCDの左上に足の裏が黄色いペンギンが表示され、しばらくコンソール画面となり最終的に潰れたX-Windowの画面が表示されるはずだ。

この状態でもUSBキーボードとUSBマウスを繋げれば一応使うことができるが、このサイズのLCDではGUIはあまり実用的ではない。

SSHのコンソールからcapemgrでの登録状況を確認する。

debian@beaglebone:~$ sudo -s
root@beaglebone:/home/debian# export SLOTS=/sys/devices/bone_capemgr.*/slots
root@beaglebone:/home/debian# cat $SLOTS
 0: 54:PF---
 1: 55:PF---
 2: 56:PF---
 3: 57:PF---
 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
 5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
 6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
 7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-BONE-LCD4-01
root@beaglebone:/home/debian#

意図通りの設定となっている。
GUIは使わないのでXの起動を抑制する。

root@beaglebone:/home/debian# cd /etc/init.d
root@beaglebone:/etc/init.d# chmod 0 lightdm
root@beaglebone:/etc/init.d# chmod 0 x11-common
root@beaglebone:/etc/init.d# chmod 0 xrdp
root@beaglebone:/etc/init.d# 

再起動を行う。

root@beaglebone:/etc/init.d# sync
root@beaglebone:/etc/init.d# sync
root@beaglebone:/etc/init.d# sync
root@beaglebone:/etc/init.d# reboot

自動再起動後、LCD画面上ではX-Windowの起動は行われず、CUIのterminal画面のままとなる。
USBキーボードが繋がっていればこの状態でキーボードの入力がLCDに反映され、ログインすることが可能となる。

日本語表示を行わないならばこの状態でスタンドアロンPCの完成だ。
実に簡単だ。

Frame bufferは/dev/fb0として認識されている。

debian@beaglebone:~$ ls -la /dev | grep fb
crw-rw---T  1 root video    29,   0 Jan  1  2000 fb0
debian@beaglebone:~$

Frame Bufferの設定を確認する。

debian@beaglebone:~$ fbset

mode "480x272"
    geometry 480 272 480 272 24
    timings 0 0 0 0 0 0 0
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode

debian@beaglebone:~$

折角だから画像表示を試みる。
Frame Buffer用の画像ビューアとしてfbiをインストールする。

debian@beaglebone:~$ sudo apt-get install fbi
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  fbi
0 upgraded, 1 newly installed, 0 to remove and 174 not upgraded.
Need to get 57.2 kB of archives.
After this operation, 136 kB of additional disk space will be used.
Get:1 http://ftp.us.debian.org/debian/ wheezy/main fbi armhf 2.07-10 [57.2 kB]
Fetched 57.2 kB in 0s (76.2 kB/s)
Selecting previously unselected package fbi.
(Reading database ... 64717 files and directories currently installed.)
Unpacking fbi (from .../archives/fbi_2.07-10_armhf.deb) ...
Processing triggers for man-db ...
Processing triggers for mime-support ...
Setting up fbi (2.07-10) ...
debian@beaglebone:~$ fbi

This program displays images using the Linux framebuffer device.
Supported formats: PhotoCD, jpeg, ppm, gif, tiff, xwd, bmp, png.
It tries to use ImageMagick's convert for unknown file formats.

usage: fbi [ options ] file1 file2 ... fileN

    -h  -help               print this help text
    -V  -version            print fbi version number
        -store              write cmd line args to config file
    -l  -list          read image filelist from file 
    -P  -text               switch into text reading mode
    -a  -autozoom           automagically pick useful zoom factor
        -(no)autoup           like the above, but upscale only
        -(no)autodown         like the above, but downscale only
        -(no)fitwidth         use width only for autoscaling
    -v  -(no)verbose        show filenames all the time
    -u  -(no)random         show files in a random order
    -1  -(no)once           don't loop (for use with -t)
        -(no)comments       display image comments
    -e  -(no)edit           enable editing commands (see man page)
        -(no)backup           create backup files when editing
        -(no)preserve         preserve timestamps when editing
        -(no)readahead      read ahead images into cache
        -cachemem      image cache size in megabytes
        -blend         image blend time in miliseconds
    -T  -vt            start on virtual console 
    -s  -scroll        scroll image by  pixels
    -t  -timeout       load next image after  sec without user input
    -r  -resolution    pick PhotoCD resolution (1..5)
    -g  -gamma         set display gamma (doesn't work on all hardware)
    -f  -font          use font  (anything fontconfig accepts)
    -d  -device        use framebuffer device 
    -m  -mode          use video mode  (from /etc/fb.modes)

Large images can be scrolled using the cursor keys.  Zoom in/out
works with '+' and '-'.  Use ESC or 'q' to quit.  Space and PgDn
show the next, PgUp shows the previous image. Jumping to a image
works with g.  Return acts like Space but additionally
prints the filename of the currently displayed image to stdout.

debian@beaglebone:~$ 

サンプル画像をダウンロードする。

debian@beaglebone:~$ wget https://homepages.cae.wisc.edu/~ece533/images/baboon.png
--2016-02-11 13:03:25--  https://homepages.cae.wisc.edu/~ece533/images/baboon.png
Resolving homepages.cae.wisc.edu (homepages.cae.wisc.edu)... 144.92.13.84
Connecting to homepages.cae.wisc.edu (homepages.cae.wisc.edu)|144.92.13.84|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 637192 (622K) [image/png]
Saving to: `baboon.png'

100%[======================================>] 637,192      358K/s   in 1.7s

2016-02-11 13:03:32 (358 KB/s) - `baboon.png' saved [637192/637192]

debian@beaglebone:~$

直接LCD側のCUI terminalから表示を行う場合は以下の様にする。

debian@beaglebone:~$ fbi -a  baboon.png

-aオプションを付けることにより画像を画面に自動的にフィットさせる。
qをUSBキーボードから入力することにより画像表示を終了できる。

SSHからLCDに表示させる場合は以下のようにする。

debian@beaglebone:~$ sudo fbi -T 1 -a baboon.png
using "DejaVu Sans Mono-16", pixelsize=16.67 file=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf
debian@beaglebone:~$

この場合はLCD側のCUI terminalには戻れなくなる。
SSHから別の画像をLCDのFrame bufferに表示させることは可能。

何の問題も無くLCDに画像を表示させることができた。
ドライバのサポートがあるので後は普通のLCDディスプレイとして機能する。
Frame bufferに画像データを書き込むことにより任意の表示を行うことができるわけだ。

音関連もそうだが、画像関連は電子工作として非常に満足度が高い上に応用範囲が広い。
しばらく遊んでみることとする。

タイトルとURLをコピーしました