人気ブログランキング | 話題のタグを見る

ボードコンピュータの液晶制御が高速処理のピークな理由 (7/11)

arduino や Raspberry Pi などのボードコンピュータが液晶の表示を性能のリトマス試験紙としているのはなぜかわからなかった。
より高性能なCPUにしたりクロック数を上げたりして高精細液晶画面を制御しているのを競っているのが、なぜPCから画像データを液晶へ直接送信せずにわざわざボードコンピュータに送って(または書換可能メモリに保存して)表示させるのか、今の高速なPCならどんな大きいデータでも簡単に液晶に送れてすいすい画像を書き換えられるのだと思っていた。

ところでPCから外部にデータを送信するためには現在はシリアル通信であるUSBやRS-232C、バスであるPCI Express、表示と音声データに特化したHDMIがある。
これらで、ユーザが直接制御出来るのはUSBやRS-232Cであり、それ以外はドライバやOSのライブラリを介して間接制御するしかない。

ボードコンピュータは液晶を制御できるのだから、PCだってUSB2.0や3.1などの高速な通信を使えば軽々液晶を書き換えられる(例えばマスクやグラフィック描画)のではないか。

USBはなかなか難しいので市販のUSB制御ボードを使うとすると、以下のようなものがある。

これのソフト仕様を調べる(ヘルプファイル参照)と、1ビット書き換えに10000回/2500msecぐらいの時間がかかる。8ビット(1バイト)でも10000回/5000msecぐらい。
これはデジタルポートをON/OFFする速度と仮定すると、10000/2.5秒=4000Hz、10000/5秒=2000Hzで書き換え出来る。
USB2.0が480Mbps(1.0が12Mbps)なので、480M/10ビット(8n1)=48Mバイト/sec。プロトコルなので上のON/OFFに変換するとざっくりだが48000000バイト:2000バイトをどうにかできるとして2万4千分の1のデータ効率。

赤外線 搬送波が37kHz程度なのだが、これが上の制御ボードでは全然間に合わない。
でも赤外線のコントロールは昨今のボードコンピュータでは当たり前に出来ている。

USBシリアル変換ケーブルなどを使って、RS-232Cの最大速度115200bpsだと、約1万バイト/sec。8ビット送信できるとして80kHz程度(もう単位とか転送速度とかぐちゃぐちゃだが)は処理できるとしてギリギリ赤外線の制御が出来るかなという所。

USB2.0でハードディスクへのデータ転送が可能になったのだから相当速いのかと思ったが、プロトコル負荷によって赤外線の制御程度がやっとなのか。

PCからUSBで画像データを液晶に直接転送しても4000Hzだと8x8マトリクスLEDのON/OFFでさえも64個のLEDをせいぜい1個当たり4000/64=62.5Hzでしか書き換えられない。秒間62回だ。24fpsが秒間24コマなのに、こっちはLEDをON/OFFするだけにこんなにかかってたら、1コマの画像転送なんてとんでもない。

PCから高精細液晶を制御するのはUSBでは夢物語なのか。USBケーブルのサブモニタは差分データ送信でうまくやってるのかな。

USB2.0 480Mbps=0.48Gbps(ざっくり)
USB3.0 10Gbps
PC Express 3.0 8Gbps
HDMI 2.0 18Gbps

HDMIを直接PCが制御する訳では無くWindowsならDirectXでコマンドをGPUが受け取って膨大なピクセルをCPUコアが書き換えている。

ボードコンピュータが液晶を書き換えられるのは、PCのUSBのプロトコル負荷で通信スピードが上がらないという部分が無いから現実に出来るのであり、ボードコンピュータじゃなければユーザは直接液晶を操作できないのだ。HDMIの転送速度を生かして表示を制御するにはGPUのコマンドをプログラムすればいいが、そこに力を入れるのはちょっと違う気がする。少し前にCUDAとかで流行ったけど。

という事で、PCから外部にデータを高速転送する手段がないため、大量のデータである液晶(表示)書換は、今の所PCからは無理で、そのため液晶を自分でコントロールする気になるためには、ボードコンピュータに制御させるのが手っ取り早いのだ。で、高負荷なのでボードコンピュータはどんどん高性能になって行く。でも痛し痒しでどうしても「ボードコンピュータ」というワンクッションが入ってくる。

ああ、液晶(表示)制御を高精細で極めようとするとPCでは現在のインターフェースでは無理(OSもRTOSにならないと)で、ボードコンピュータでも高性能なちょっと敷居の高い事になってしまうのだ。

やっぱり「表示器」はPC上で行ない、ボードコンピュータはリアルタイムでは表示機能を持たないのが最善手(単体のボードコンピュータはそれはそれで完結していてもいいが)だな。つまりボードコンピュータのネット上での役割はセンサーと物理制御(サーボ出力、リレーON/OFF)だ。

備忘録、備忘録。

すぐボードコンピュータに液晶をつなごうとしてしまうが、単体で完結するもの(ゲームコンソールやなんらかの指標器)を作るとき以外は上の事を思い出して、踏みとどまろう。
まあ、もう128x48のグラフィック液晶買ってきちゃったんだけどね。


by k1segawa | 2017-07-11 22:15 | arduino, AVR | Comments(0)