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」
よろしくお願いいたします。
コメント
sankyo_takada
高田です。
>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
石垣です。
> また、タッチパネルは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 はデフォルトでビルドされる設定なので、
特にカーネルコンフィグを変更する必要はないかと思います。
何かご不明な点がございましたら、再度質問していただければと思います。
sankyo_takada
高田です。
ご丁寧に解説いただきありがとうございます。
大変参考になります。
時間がかかっておりますが、本件未だ解決に至っておらず、引き続き調査しています。
dtsiのlcdifを変更しながら試しておりますが、正しい表示が出ません。
以下の記事を参考にQtのサンプルアプリ(analogclock)を実行しております。
https://armadillo.atmark-techno.com/blog/53/3652
また、LCDの制御信号をオシロで測定しているのですが、RGBデータが正しく出力されているか判断がつかず、
例えばLCDにテストパターンを強制的に表示する方法はないでしょうか。
RGBそれぞれ単色やグラデーションで表示するイメージです。
画像データを表示するテストプログラムも作成してみたのですが、プログラムに問題がある可能性も排除できないため、
出来れば強制的に表示するようなことができないかと考えております。
よろしくお願いいたします。
at_shiita.ishigaki
sankyo_takada
高田です。
ご回答ありがとうございます。
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
sankyo_takada
高田です。
LCDはカスタム品になり、インターフェースのピンは添付のとおりです。
コントローラには以下を使用しているようで、「HX8282-A11」のデータシートに記載がある「TTL mode」を使用します。
・HX8282-A11
・HX8696-A01
また、LCDの解像度は1024x600になります。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
インターフェース信号.png |
at_shiita.ishigaki
sankyo_takada
高田です。
>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
sankyo_takada
高田です。
ご回答ありがとうございます。
電気的な仕様も確認しましたが、条件は満たしているようで今のところ問題は見つかっておりません。
本件、未だ解決には至っていないのですが、RGB666仕様のLCDに接続したところ表示できることが確認できました。
もともと接続しようとしていたRGB888仕様のLCDとの違いを確認して、原因調査を進めます。
なお、今回、LCDは縦向きで使用する予定で、表示・タッチパネルを90°回転させる必要があります。
Qt5を使用してアプリを開発しており、以下の記事を参考に環境変数QWS_DISPLAY=Transformed:Rot90と設定してみましたが、表示は横向きのままでした。
(環境変数を設定した時点でエラー等は発生せず、設定自体はできているようです)
https://armadillo.atmark-techno.com/forum/armadillo/1100
90°回転させて表示するためにはどのような変更が必要でしょうか。
よろしくお願いいたします。
at_shiita.ishigaki
石垣です。
> 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();
お手元のアプリでも同様に画面を回転できるかご確認ください。
以上よろしくお願いいたします。
sankyo_takada
at_shiita.ishigaki
2022年12月26日 16時02分
石垣です。
> また、Armadillo-640とLCD、タッチパネルの間には弊社で設計した基板があり、I/Fを変換しています。
Armadillo-640 と LCD の間にある基板について詳細を教えて頂けますでしょうか。
また、I/F は何に変換しているか教えて頂けるでしょうか。
> デバイスツリーおよびカーネルソースの変更が必要でしょうか。
デバイスツリーは使用する I/F に合わせて変更する必要があると思います。
カーネルにデバイスドライバーが存在する場合は、カーネルソースの変更は不要かと思われます。