Armadilloフォーラム

Armadillo-640 LCD、タッチパネルの制御

sankyo_takada

2022年12月24日 5時40分

高田と申します。

Armadillo-640からLCD、タッチパネルを制御しようとしています。
LCD、タッチパネルはオプション品以外の製品になり、主な仕様は以下です。

■LCD
 サイズ:7インチ
 解像度:1024x600
 I/F:RGBパラレル

■タッチパネル
 抵抗膜方式

また、Armadillo-640とLCD、タッチパネルの間には弊社で設計した基板があり、I/Fを変換しています。

Armadillo-640でオプション以外のLCDを制御する場合、
ソフトウェアの変更で必要な作業をご教示いただけないでしょうか。
デバイスツリーおよびカーネルソースの変更が必要でしょうか。

Armadillo640のOSバージョン
「Linux armadillo 4.14-at48 #3 Wed Aug 24 13:40:52 JST 2022 armv7l GNU/Linux」

ATDEのOSバージョン
Debian GNU/Linux 10 (buster)
「atde8-amd64 v20221124」

よろしくお願いいたします。

コメント

at_shiita.ishigaki

2022年12月26日 16時02分

石垣です。

> また、Armadillo-640とLCD、タッチパネルの間には弊社で設計した基板があり、I/Fを変換しています。

Armadillo-640 と LCD の間にある基板について詳細を教えて頂けますでしょうか。
また、I/F は何に変換しているか教えて頂けるでしょうか。

> デバイスツリーおよびカーネルソースの変更が必要でしょうか。

デバイスツリーは使用する I/F に合わせて変更する必要があると思います。
カーネルにデバイスドライバーが存在する場合は、カーネルソースの変更は不要かと思われます。

高田です。

>Armadillo-640 と LCD の間にある基板について詳細を教えて頂けますでしょうか。
>また、I/F は何に変換しているか教えて頂けるでしょうか。

LCDはパラレルRGBで、LCDに合わせてピン配を変換していますので、I/Fの種類自体は変えておりません。
また、タッチパネルは4線式の抵抗膜方式で、X+、X-、Y+、Y-をArmadillo-640に入力しております。
オプションのLCDはタッチパネルのI/FがI2Cだと思いますので、4線式に対応させる手順も調査しています。

>デバイスツリーは使用する I/F に合わせて変更する必要があると思います。
>カーネルにデバイスドライバーが存在する場合は、カーネルソースの変更は不要かと思われます。

デバイスツリーを変更する場合、at-dtwebを使用する方法があると思いますが、
at-dtwebで選択できるデバイスが存在しない場合はどのようにしてデバイスツリーファイルを生成すれば良いでしょうか。
dtsiファイルをエディタで直接変更するなど?

また、カーネルコンフィグとデバイスツリーの関係(違い?)についてもご教示いただけると助かります。

初歩的な内容で恐縮ですが、よろしくお願いいたします。

at_shiita.ishigaki

2022年12月28日 17時25分

石垣です。

> また、タッチパネルは4線式の抵抗膜方式で、X+、X-、Y+、Y-をArmadillo-640に入力しております。
> オプションのLCDはタッチパネルのI/FがI2Cだと思いますので、4線式に対応させる手順も調査しています。
>
> > デバイスツリーを変更する場合、at-dtwebを使用する方法があると思いますが、
> at-dtwebで選択できるデバイスが存在しない場合はどのようにしてデバイスツリーファイルを生成すれば良いでしょうか。
> dtsiファイルをエディタで直接変更するなど?

ご使用になられている LCD は Armadillo-400 シリーズ LCD オプションセットで使用されているものに近いかと思いますので、
at-dtweb で OPTION BOARD > FG040346DSSWBG04 を使用して DeviceTree を生成してから編集して頂くのが良いかと思います。
LCD の仕様は下記 URL に記載されております。
https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…

LCD 毎にディスプレイタイミングは異なりますので、at-dtweb から DeviceTree を生成した後に、
arch/arm/boot/dts/armadillo-640-expansion-interface.dtsi の lcdif をご使用になられてる LCD に合わせて編集する必要が有ります。
ディスプレイタイミングのドキュメントはカーネルソースの以下にございます。
Documentation/devicetree/bindings/display/panel/display-timing.txt

また、生成した DeviceTree が Armadillo と LCD のピン配置と異なる場合はこちらも編集する必要が有ります。

at-dtweb で対応できない変更(今回の場合だと、LCD のタイミングやピン配置)を行う場合は DeviceTree ファイルを作成・変更する必要が有ります。
こちらは、テキストエディタ等を使う必要が有ります。

再度 at-dtweb で DeviceTree を生成すると armadillo-640-expansion-interface.dtsi は上書きされますのでご注意下さい。

編集した DeviceTree をは下記コマンドを実行することでビルドできます。
[ATDE ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- armadillo-640-at-dtweb.dtb

> また、カーネルコンフィグとデバイスツリーの関係(違い?)についてもご教示いただけると助かります。

カーネルコンフィグはカーネルをビルドするときの設定をするもので、
デバイスツリーの関係としては、どのデバイスをビルドするか等の設定を行うことができます。
今回の armadillo-640-expansion-interface.dtsi はデフォルトでビルドされる設定なので、
特にカーネルコンフィグを変更する必要はないかと思います。

何かご不明な点がございましたら、再度質問していただければと思います。

高田です。

ご丁寧に解説いただきありがとうございます。
大変参考になります。
時間がかかっておりますが、本件未だ解決に至っておらず、引き続き調査しています。
dtsiのlcdifを変更しながら試しておりますが、正しい表示が出ません。
以下の記事を参考にQtのサンプルアプリ(analogclock)を実行しております。
https://armadillo.atmark-techno.com/blog/53/3652

また、LCDの制御信号をオシロで測定しているのですが、RGBデータが正しく出力されているか判断がつかず、
例えばLCDにテストパターンを強制的に表示する方法はないでしょうか。
RGBそれぞれ単色やグラデーションで表示するイメージです。
画像データを表示するテストプログラムも作成してみたのですが、プログラムに問題がある可能性も排除できないため、
出来れば強制的に表示するようなことができないかと考えております。

よろしくお願いいたします。

at_shiita.ishigaki

2023年1月23日 13時01分

石垣です。

> 例えばLCDにテストパターンを強制的に表示する方法はないでしょうか。
以下のコマンドのように fbi コマンドを使用することで、LCD に画像を表示できます。
※ここでは例としてデバイスを /dev/fb0 、LCD の画面に表示する画像を image.png としています。

[armadillo ~]# fbi -d /dev/fb0 image.png

また、fbi コマンドは以下のコマンドを実行することで、インストールできます。

[armadillo ~]# apt install fbi

高田です。

ご回答ありがとうございます。
fbiコマンドを実行してみました。
LCDに赤一色(R:255)を表示する画像を用意して試したところ、添付写真の表示結果になり正しく表示されません。
LCD制御信号をオシロで測定したところ、RGBデータ信号の特定の信号※が常時変化しているようで、正しく表示されていない要因の一つと考えております。
※常時状態が変化している信号:CON11-14、16、18、21、23、25、28、30、32

CON11-28をオシロで測定した結果を添付します。
Armadilloの電源を投入してOSを立ち上げると周期的に常時変化しているようなのですが、この原因としては何が考えられるでしょうか。
また、参考にdtsiファイルも添付します。
at-dtwebでLCDオプションボードを選択して生成したdtsiファイルをベースに、今回使用するLCDに合わせてlcdifの定義を変更し、不要な機能をコメントアウトしました。

よろしくお願いいたします。

ファイル ファイルの説明
全面赤表示時.JPG LCD表示状態(全面赤表示)
電源投入時.JPG LCD表示状態(電源投入時)
オシロ測定結果.pdf CON11-28測定結果
armadillo-640-expansion-interface.txt dtsiファイル(拡張子を変更しています)

at_shiita.ishigaki

2023年1月30日 11時07分

石垣です。

> LCDに赤一色(R:255)を表示する画像を用意して試したところ、添付写真の表示結果になり正しく表示されません。
LCD のディスプレイタイミングを確認したいので、ご使用になられている LCD の型番を教えて頂けないでしょうか。

以上、よろしくお願いいたします。

高田です。

LCDはカスタム品になり、インターフェースのピンは添付のとおりです。
コントローラには以下を使用しているようで、「HX8282-A11」のデータシートに記載がある「TTL mode」を使用します。
・HX8282-A11
・HX8696-A01

また、LCDの解像度は1024x600になります。

よろしくお願いいたします。

ファイル ファイルの説明
インターフェース信号.png

at_shiita.ishigaki

2023年2月1日 9時34分

石垣です。

> コントローラには以下を使用しているようで、「HX8282-A11」のデータシートに記載がある「TTL mode」を使用します。
HX8282-A11 のデータシートを確認したところ、
RGB の input timing が DE mode と HV mode あるようですが、
どちらを使用されているでしょうか?

また、データシート通りに VSD, HSD, DEN の立ち下がり・立ち上がりに合わせて
データが出力されているかご確認ください。

以上、よろしくお願いいたします。

高田です。

>RGB の input timing が DE mode と HV mode あるようですが、
>どちらを使用されているでしょうか?

どちらも試してみましたが、表示結果は同じでした。
モードはMODEピンのH/Lにより設定でき、Armadillo-640のGPIOに接続していますので
各モードで試してみました。

>また、データシート通りに VSD, HSD, DEN
>の立ち下がり・立ち上がりに合わせて
>データが出力されているかご確認ください。

各信号をオシロで測定した結果と、実際の表示状態を添付します。
制御信号は一部(DEN立ち上がり直後)しか確認していませんが、問題ないように見えます。
ただ、信号のなまりが見られるので、これが影響している可能性があるでしょうか。

なお、Armadillo-640とLCDの間に変換基板を挟んでおり、RGB666⇒RGB888へ変換しています。
(LCD側の入力I/FがRGB888のため)
この変換方法(回路)にも問題が無いか確認をしているところです。

よろしくお願いいたします。

ファイル ファイルの説明
LCD制御信号測定結果.pdf
LCD表示状態.jpg

at_shiita.ishigaki

2023年2月2日 10時31分

石垣です。

> ただ、信号のなまりが見られるので、これが影響している可能性があるでしょうか。
データシートに記載されているタイミングを満たしていれば問題ないと思われます。

添付していただいた「LCD制御信号測定結果.pdf」の1枚目のオシロスコープの画像(VSD・HSD・DEN)
を見ると、HSDの信号が中途半端に変化している部分があるように見えます。
こちらは正しく電圧レベルが変化しているのでしょうか。

以上、よろしくお願いいたします。

高田です。

ご回答ありがとうございます。
電気的な仕様も確認しましたが、条件は満たしているようで今のところ問題は見つかっておりません。
本件、未だ解決には至っていないのですが、RGB666仕様のLCDに接続したところ表示できることが確認できました。
もともと接続しようとしていたRGB888仕様のLCDとの違いを確認して、原因調査を進めます。

なお、今回、LCDは縦向きで使用する予定で、表示・タッチパネルを90°回転させる必要があります。
Qt5を使用してアプリを開発しており、以下の記事を参考に環境変数QWS_DISPLAY=Transformed:Rot90と設定してみましたが、表示は横向きのままでした。
(環境変数を設定した時点でエラー等は発生せず、設定自体はできているようです)
https://armadillo.atmark-techno.com/forum/armadillo/1100

90°回転させて表示するためにはどのような変更が必要でしょうか。

よろしくお願いいたします。

at_shiita.ishigaki

2023年3月1日 10時15分

石垣です。

> Qt5を使用してアプリを開発しており、以下の記事を参考に環境変数QWS_DISPLAY=Transformed:Rot90と設定してみましたが、表示は横向きのままでした。

こちらの環境変数はおそらく Qt4 のもので、Qt5 ではサポートされていないようです。

下記記事を参考に、qt5base5-examples をインストール後に
/usr/lib/arm-linux-gnueabihf/qt5/examples/widgets/animation/animatedtiles/main.cpp を編集して、
view->rotate(90) を加えたところ LCD の画面が90度回転されることを確認しました。
https://stackoverflow.com/questions/56601993/how-to-rotate-a-qt5-applic…

/usr/lib/arm-linux-gnueabihf/qt5/examples/widgets/animation/animatedtiles/main.cpp の編集
 
    // Ui
    View *view = new View(&scene);
    view->setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Animated Tiles"));
    view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
    view->setBackgroundBrush(bgPix);
    view->setCacheMode(QGraphicsView::CacheBackground);
    view->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
 
    view->rotate(90);   //追記
    view->show();

お手元のアプリでも同様に画面を回転できるかご確認ください。
以上よろしくお願いいたします。

高田です。

ご教示いただいた方法を試したところ、画面が90度回転して表示されることを確認しました。
ご対応ありがとうございました。