2019年04月20日

Digital Video Shield 応用編

今回は以前に紹介したDigital Video Shieldの応用について紹介します。

Digital Video Shieldで使用しているビデオエンジンBT816はCo-Processorエンジンを搭載しており、コマンドで内蔵Widgetsを簡単に表示することができます。

内蔵Widgetsの種類としては、テキスト、ボタン、時計、プログレスバー、スライダー、トグルボタンなどがあります。
数行のC/C++コードの記述で任意の表示をすることができます。
なお、ボタン、スライダー等の入力イベントを使用する場合はDigital Video Shieldの基板上のピンと抵抗膜方式パネルの配線、タッチパネルキャリブレーション、入力イベント設定が必要になります。


・色を変更する場合
EveSendCmd(COLOR_RGB(180, 180, 240));

・数字を表示する場合
 文字位置、フォント、フォントオプション、数字を設定します。
EveWriteNumberData(220,200,EVE_FONT_B_size6,0,120);

・時計を表示する場合
 位置、サイズ(半径)、何時何分何秒か設定します。
EveWriteClock(120,120,100,0,10,10,20,3);

・文字列を表示する場合
 文字位置、フォント、フォントオプション、文字列
EveWriteStringData(200,350,EVE_FONT_B_size6,0,"Digital Video Shield");

・ゲージを表示する場合
 位置、サイズ(半径)、最大値、最小値、現在値等を設定します。
EveWriteGauge(400,120,100,0,80,0,10,100);

・ボタン/トグルボタンを表示する場合
 文字位置、フォント、フォントオプション、文字列
EveWriteButton(550,50,80,40,EVE_FONT_B_size4,0,"ON");
EveWriteToggle(550,120,50,EVE_FONT_B_size4,0,1,"ON");

・プログレスバー
 位置、サイズ、最大、最小、現在値等を設定します。
EveWriteProgress(550,200,50,30,0,20,100);

・スピナー(処理待ち等の表示)
 位置、オプション等を設定します。
EveWriteSpinner(700, 150, 0, 0);


実際に800x480のディスプレイに表示してみました。

img4.JPG

予めよく使う表示についてWidgetsとして内蔵しているため、数行で任意の表示をすることができます。
フォントや各WidgetsはBT816内に内蔵されているため、一般的なTFT液晶をピクセル毎に処理する場合に比べてマイコンのメモリ消費を大幅に抑えることができます。
上記サンプルはArduinoUNOで実装しています。
Githubに上がっているコードをアップデートし、内蔵Widgetsのコードを追加しました。
Digital Video Shieldを活用してArduino、センサを組み合わせてIoTディスプレイといったことも簡単に実現可能です。
posted by Crescent at 00:00| Comment(12) | 電子部品 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
初めまして、haigaと申します。

Digital Video Shieldを試していますが、HDMIに信号が出ていないように思われますので、質問させて頂きます。

ArduinoのMEGA2560に接続して、サンプルソフトのEveDemoを動作させております。ソフトの設定はディフォルトのままです。

出力先はPCで使っているCRTで、800x600設定固定にしてPCからの画面を確認した後、HDMI切替器で切り替えても「信号が無い」とCRTから表示されます。
念のため、基板からHDMI端子に接続している部分のハンダ付けを再ハンダしましたが不変です。
他で使って実績のあるmicroSDを装着してもエラーになります。但しこれはEveDemoに直接関係なさそうに見えます。(この原因は調査中です)

参考までに起動直後のシリアルモニタ表示をコピペします。(余分なスペースは除去)
Initialize Start!!
SD initialization failed!
EVE NOT Found!! :0
EVE Active!!
Hello
Demo Start
Demo End
Demo Start
Demo End

チェックすべき所がありましたらご指南ください。

Posted by 五十嵐一 at 2021年06月19日 14:18
エラー内容からSPI通信ができていないようです。ポートの設定を再度、確認してください。また、ArduinoのMEGA2560でご使用とのことですが、サンプルコードはArduino Unoターゲットにしています。こちらでMEGA2560を所有していないため、そのままコードを流用可能か分かりません。もしUnoをお持ちでしたら、そちらでも結果が同じかご確認できますでしょうか?
Posted by Crescent at 2021年06月19日 14:47
少し調べてみるとUnoとMegaではSPI通信ができるポートが異なるようです。Unoではそのまま載せて使えますが、MegaではSPI通信の割り当てピンが異なるため、そのまま載せて使うことはできないようです。ジャンパ線等でSPI通信をMegaに合わせて配線する必要があるようです。

Uno: 10(SS)、11(MOSI)、​12(MISO)、13(SCK)
Mega: 50(MISO)、51(MOSI)、52(SCK)、53(SS)
Posted by Crescent at 2021年06月19日 15:36
大変お世話になります。 haigaです。

Mega SPIポートの件、お調べいただき感謝です。
暫くぶりにMEGA2560を使ったので、SPI端子違いを忘れておりました。

ポート変更いたしましたが、HDMIに出力しない状態が続いております。

多分、SPIがOKになったのでSDのエラーは消えました。
しかし、MDMI出力はされず、シリアルモニタは以下のコメントのまま進みません。

Initialize Start!!

EVE Found!!
EVE Active!!
Hello
Demo Start

何処かでスタックしているのでしょうか?
(Arduino MEGA なので他のコントロールピンの制約があるのかもしれません)
Posted by haiga at 2021年06月19日 20:55
追伸:
どこで停止しているのかを、printfを挿入して調べてみました。

BT81X.cの59行目
while(EveReadData16(REG_CMD_WRITE) != EveReadData16(REG_CMD_READ));

ここでループになっているようです。
Posted by haiga at 2021年06月19日 21:10
度々の書き込みで恐縮です。
MEFA2560でとまってしまうので、
UNOを所有しておりませんが、同じMEGA328を搭載しているNANO(もどき)を使って、同じSPI端子接続で動作確認してみました。
やはりwhile文の同じ位置で停止してしまいます。

この中身まで解読するのは不得意です。

ご助言いただけると幸いです。

Posted by haiga at 2021年06月19日 22:09
EVE NOT FOUNDからEVE FOUNDになったため、通信は正常にできているようです。SPIのクロックが速すぎる、delay関数がUNOに比べて速いといった原因が考えられますが、申し訳ありませんが、MEGAを所有していないため、原因が分かりません。

デフォルトはloop() 内でEveDemo4()となっていますが、まずはEveDemo()を実行してください。それでもwhileで停止する場合はwhileをコメントアウトして、delay(1000)等で置き換えて動作を確認してください。
Posted by Crescent at 2021年06月19日 23:14
大変お手間と掛けてしまいスミマセン。
画面表示ができるようになりました。

1.小生が使っているCRTがソフト側解像度の設定が800x480でないと動作しない(Sheild側が止まる)と言うのが、動作しない最大の原因でした。

2.また、while部分は、usrdelay(1000)程度にすれば動作するようです。
(今のところdemo3の最終画面は崩れてますが,EveDemo,EveDemo2は表示されます)

この機器が確実に動作するようになれば、仕事の機器のLCD用に使いたいと考えております。
できれば漢字も表示したいです。
(実はファミリー機器のFT812搭載LCDで失敗しております。あれは壊れやすいです)
またご相談することがあるかもしれません。
その節はよろしくお願いいたします。
Posted by haiga at 2021年06月20日 00:50
お世話になっております。haigaです。
Digital Video Sheildを、ESP32 + riverdi-eve-arduinoライブラリで動かせるようになりましたので、仕事用ツールに(今のところ数台)使用させて頂きたいと思います。
そこで2点ほど質問させて頂ければ幸いです。
1.Arduino側から5V、3.3V電源が供給されるようになっております。メインは3.3Vのようですが5Vをどこで使用しているでしょうか?回路図では判りませんでした。また3.3Vの電源ですが、ESP32側からの供給では非力のようで、書き込み時にエラーになります。この3.3V電流はどれくらいを見込めば宜しいでしょうか?(TFP410は最大200mAらしいですが、BT816 Datasheetでは読み取れませんでした)
2.BT816で日本語フォントを使えるようにしたいのですが、英語圏の情報でもこれといったものが見つかりません。(英語に弱いこともありますが)
何か良い情報をお知りではないでしょうか?(現在は日本語文字をJPEGにしてRAM_Gに収録して使用してます)
Posted by haiga at 2021年07月02日 05:01
1.電流について
BT816は22mA程度です。データシートの49ページに記載があります。ESP側の定常電流以外に書き込み時の必要電流も合わせてご確認下さい。
https://brtchip.com/wp-content/uploads/Support/Documentation/Datasheets/ICs/EVE/DS_BT81X.pdf

2.日本語フォントについて
日本語フォント組み込み方法があるようですが、こちらで実施したことがないため、詳細不明です。直接、Bridgetechのフォーラムもしくは技術サポートにお問い合わせください。

https://brtchip.com/wp-content/uploads/Support/Documentation/Application_Notes/ICs/EVE/AN_277_FT800_Custom_Font_Implement.pdf
Posted by Crescent at 2021年07月02日 08:29
なお、5vはHDMIコネクタに使用しております。ディスプレイによっては供給しないと表示されない場合があります。
Posted by Crescent at 2021年07月02日 08:34
Crescentさま

毎々お世話になります。
1.電流の件、ありがとうございました。
 書き込み時のMD5エラーは3.3V系の電圧ダウンのようですので、Digital Video Shield用に別電源を用意しました。
2.日本語フォントの件もありがとうございました。小生も昨日AN_277を見つけまして、取り敢えずこの方法から足がかりを付ける予定です。
(取り敢えずはJPEG漢字画像で代替しました)
3.電源(5V)の件、了解いたしました。

素晴らしいDigital Video Shieldの提供有難うございました。HDMI式の堅牢なLCDが使えるので、機器選定の自由度も増え、業務用機器への適用が容易になりました。
Posted by haiga at 2021年07月03日 07:11
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。