トップページ 組込みソフト Linux搭載ボード Raspberryにカラー液晶(リベンジ)

Raspberryにカラー液晶(リベンジ)
 aitendoさんでL32-2PYを購入しました。こじ研(小嶋研究室)さんの記事を参考にさせていただきました。結果は、ほぼうまくいきました。しかし、不可解な不具合がありました。


しかし、問題がある。
電源をいれて最初に
sudo ./lcd
(lcdはCで作成した実行ファイル)
をやると上記のちゃんとした表示。
もう一度、
sudo ./lcd
をやると次のような画面。

なんだ、こりゃ!
同じプルグラムを実行させて1回目と2回目以後の表示がちがう。2回目以後はダメ表示。なんでだ?
結局原因不明です。
よくありそうなこと、
ソフトでいえば初期化をきちんとしていない。
たとえば、構造体の初期化であるデータを初期化し忘れたけれど、確率でほぼうまくいく。ときどき不正なデータになって不具合となる。
ハードでいえば配線し忘れたポートが不定になるがたまたまうまく動いてくれる。ただしときどき誤動作する。
などが考えられます。
現状を検証するよりもう一度作り直してしまえ!どうせならデータバス8ビットでどうなるかやってみよう。シフトレジスタを使わないでIOエクスパンダをつかったらいいかも?と思ったのですが、結局シフトレジスタの方がシンプルでデータ送信の効率が良さそうということでシフトレジスタにしました。(IOエクスパンダの方がシフトレジすらより安いのですが、残念です。)8ビットなら今までよりシフトレジスタ1個が節約できます。シフトレジスタ買ったとき300円くらいです。
自身のない人はやらないでください
データバスを8ビットにするには、チップ抵抗を付け替える改造が必要です。

この小さいR4を外してR5に付け替えます。たぶん失敗すると思いR4の抵抗値を計ってみると0オームです。つまりジャンパー線のようなものです。それならR4を紛失しても電線で繋げばOKです。案の定、抵抗を外すのに四苦八苦。外れたらどこかに行ってしまいました。予想が的中です。電線でR5をショートするだけなのですが、これまた大変。小さすぎます。とりあえずテスターでは繋がっているようですが、本当か?よくわかりません。
結果は?
うまくいきました。
前回の不具合は起きませんでした。

こんな風に完成です。

秋月さんで買ったCPUファンを付けています。気温の高いときにフリーズすることが激減しました。また、液晶の表示は自作のテストプログラムです。思ったように表示しています。

Raspberry Piの立ち上がり画面です。

小さいですが、コンピュータです。
わかったこと
 フレームバッファのデータはリトルエンデアンのようです。16ビットのときは素直にデータをSPIで送ればよかったのですが、今回は上位8ビット、下位8ビットを入れ替えて送ります。最初色がパソコンモニタとこのLCDで違っていたので、何で?と思っていましたがこれが原因でした。
LCDについて、タッチパネル付きという表現があります。よーーーく気をつけないと痛い目にあいます。
1.タッチパネルが付いているだけ
 (タッチパネルのインターフェース回路を自分で作ることになります)
2.タッチパネルインターフェース付き
 (タッチパネルのインターフェース回路が実装されています)
ちなみにこのLCDは1です。
タッチパネルの機能を簡単に使いたい人はこのLCDはやめてください。
回路図とソースファイル 2014/6/20 公開
こじ研(小嶋研究室)さんから変わっています。使いやすいようにC++で書き直します。また、回路図も結構面倒なので後日公開ということでお願いいたします。
新たに半田付けしたボードを作りました。

配線がすごくすっきりしました。

回路図は部品の実装した図面を示します。(回路図と実装図の両方描くが面倒なので実装図だけにしました。これなら実際製作するときチェックが楽です。)

ソースファイルは、
gpio.h
gpio.cpp
SPI.h
SPI.cpp
lcd.h
lcd.cpp
lcd_app.cpp
です。
クラスlcdですでに公開しているGPIO、SPIのクラスを使っています。
最初に1秒間テストパターンを表示します。
つぎに、Linuxの画面を表示します。

startx
とやればX-Windowを表示します。

インターフェースの回路を作るのは簡単だと思います。それよりこのLCDはフラットケーブルの半田付け、抵抗の付け替えがすごく大変です。半田付けの技術がそれなり必要です。
お約束の言葉:
製作は自己責任でお願いします。