PIC32MX HARMONY(21)
更新日:2024年9月16日

SPI接続液晶モジュール(80x160)をテストする
今まで色んな製作に80x160ドットの液晶モジュールを使ってきました。それはマジカギアというおもちゃから摘出したものでした。パラレル接続なので、超高速の制御が出来ていて、結構重宝しておりました。しかし、接続用のコネクタのはんだ付けが難しく結構苦労していました。また対象のおもちゃもそろそろ終わりを迎えるようでここで思い切って切り換えを考えます。
そこで白羽の矢が立ったのが、Amazonで購入出来る液晶モジュールです。
(80x160ドット、SPI接続液晶モジュール)
そうです、これです。Amazonで80x160ドットの液晶モジュールと検索すると、サクッと出て来るモジュールです。思わず4個もクリックしてしまいました。
(すぐに届いた液晶モジュール)
ピンヘッダと一緒に製品は袋詰めされていました。液晶モジュールの大きさはマジカギアから取り出したものと同じ大きさと思いますが、SPI接続なので端子数が少なくてとても使い易くなっています。まあシリアル接続になるので、それなりの表示スピード低下は覚悟しなくてはならないと思います。
(液晶ドライバーにはST7735Sが使われています)
液晶モジュールの駆動に重要重要なのは、如何にしてモジュールを初期化するかということです。幸いにも「ST7735」「初期化」などでググると初期化のプログラムが記載されているページがありますので、そこを参考にプログラミングを行いました。今はネット上から対象のモジュールをインクルードする方法でプログラミング開発が出来るようになっていて大変便利なのですが、それでは制御の中身を理解出来ていないんじゃないかと時々疑問に思うこともあります。プログラミングには「ST7735」のチップの仕様書を前もって入手しておくことが必要と思います。ということでなんとかこのチップの液晶モジュールも初期化のプログラムを正しく組み立てることが出来ました。
(将来の基板化も考慮してマイコン回路を考えます)
そこで重要になるのが、どのマイコンで駆動するかということです。今回はPIC32MX130F064Bをチョイスしました。SOP28pinのパッケージ品でプログラムメモリ64KB、RAM16KB品です。SPI接続なので液晶モジュールへの接続本数が減りますので28pinで充分と思います。
(PIC32MX130F064B)
このマイコンはMouserさんから購入しました。在庫がある限り大概のマイコンは揃います。但し海外から送られてくるので送料はそれなりに高いです。本当はSSOPを注文したつもりだったのですがなぜかSOPが送られてきました。まあはんだ付けし易いので良しとしましょう。
(ブレッドボードで動作確認中)
液晶モジュールを取り付けるマイコン回路の基板化を考えているので、ベストコンディションが出るかの確認をしています。一旦SOPのマイコンは変換基板に載せて配線しています。液晶モジュールへの制御はSPIなので、パラレル接続に比べるとどうしても動作スピードは遅くなります。最初はSPIだけで行っていた場合、1画面の書き換えに約86msecも掛かっていました。8bitデータをシリアルで送信しているのでパラレル接続より約8倍も時間が掛かるのは仕方がないと一瞬は思いましたが、Youtubeで公開されている動画を見るともっと早く出来ているようです。これはもうDMA機能を使うしかないと考えました。
(画面を高速書き換え中)
そこでPIC32とDMAでググってみました。あまり重要な情報は見つからず、少し難儀しました。まあPIC32ということでHarmonyを使っているので、設定さえ行えば簡単にそれらの関数を生成してくれるので、その辺りを調べて、さらにググってみました。は、は〜ん、なんとか見えてきました。DMAの使い方。ということで、ソースはこのモジュールを使った製作の時に公開するとして、概要はこの後の部分で説明いたします。結論としてはSPIにDMAを使うことで1画面約21msecで書き換えることが出来ました。今の私の実力ではこれ以上のスピードは無理ですね。但しマイコンを変えればもっと早くなるとは思います。
(PIC32MXマイコンのポート割り付け)
使用可能なI/Oポートは液晶モジュールへの駆動以外をほぼ全て外部に取り出すことが出来ています。電源を含めて外部制御用のコネクタは過去の製作と同じく16pinを使用する予定です。
ここからはHarmonyの設定を簡単に説明します。
(コンポーネントの設定)
液晶モジュールを駆動するためにSPI1を取り込みます。
(I/Oポートの詳細設定)
SPIのクロック出力(SCK1)のみ使用ポートが限られています。それ以外はかなり柔軟に端子を設定出来ると思います。SPIのシリアル入力(SDI1)は使用しませんが、ポート的には設定して入力をプルダウンにしています。
(クロックの設定)
システムクロック、ペリフェラルバスクロック共、このマイコンの動作最大周波数に近い48MHzに設定します。SPI機能を使うので出来るだけ早い処理のほうが良いと思います。この辺りがパラレル接続との違いですね。パラレルだとクロック8MHzでもそれなりの表示が出来ていました。まあこれは仕方がないことです。
(SPIの設定)
SPIのクロックは24MHzに設定します。仕様書からこれ以上に設定しても24MHzにしかなりません。
(DMAの設定)
DMAはチャンネル0を使用します。出力のみの使用なのでこれで良いと思います。
(DMAのプログラム)
さてSPIのDMAをどこで使うかですが、これは画面データを液晶モジュールへ流し込む部分のみに使います。それ以外には使いません。80x160ドットの液晶モジュールには合計12800ピクセルのドットがあります。そのドット毎に16bit(2bute)を使用しますので、1画面には都度25600バイトのデータを流し込む必要があります。その部分のみにDMAを使用します。上記にソースの一部を記載していますが、2560バイトずつ10回に分けてデータを流し込んでいます。こうすることで1画面の描画を約21msecで行うことが出来るようになりました。まあこれが今の私の限界です。
今後はこの液晶モジュールを使用した製作を発表していきたいと思います。これからもよろしくお願いいたします。

「PIC32MX HARMONYの表紙」へ戻る