
おお~!
PICマイコンでSPI通信を使って液晶表示できた。
ワテ設計のPIC32マイコン汎用実験基板を使ってLCDパネルにドットを表示することが出来た。
この機能を使えば任意の文字や図形を描くことが可能だ。
前回記事はこちら⤵️
当記事はワテ設計のPIC32MK1024GPK064マイコンを使った汎用実験基板の紹介記事の第4回目。
| 第1回目 | 【ワレコの電子工作】PIC32マイコン用の汎用実験基板を自作【KiCad設計編】 |
| 第2回目 | 【ワレコの電子工作】PIC32マイコン用の汎用実験基板がPCBWayから到着【半田付け編】 |
| 第3回目 | 【ワレコの電子工作】PIC32マイコン用の汎用実験基板でLEDチカチカ成功【動作確認編】 |
| 第4回目 | 【ワレコの電子工作】PIC32マイコン用の汎用実験基板で液晶表示成功【SPI通信】 |
では本題に入ろう。
液晶ディスプレイの固定台座を3Dプリンタで印刷
ワテが採用したのが下写真の液晶ディスプレイだ。秋月電子で購入した。

写真 ILI9341搭載2.8インチSPI制御タッチパネル付TFT液晶 MSP2807
■主な仕様
・種別:グラフィック
・電源電圧min.:3.3V
・電源電圧max.:5V
・バックライト:有
・バックライト色:白
・ドット数X:320
・ドット数Y:240
・インターフェイス:4-wire_SPI
・長辺:86mm
・短辺:50mm
類似の液晶ディスプレイはアマゾンなどにも売っている。
さて、この液晶ディスプレイの視認性を良くするために、下図に示す台座を作成することにした。

図 Fusion360で設計した液晶ディスプレイ台座(スタンド)
Fusion360で液晶ディスプレイの台座を設計する
Fusion360のような高性能な3D CADを無料で利用できるのは、大変有り難い。
30分も掛からずに下図のような形状の台座を設計した。ワテは意外にも3D CADの操作が得意なのだ。
![]() |
![]() |
図 Fusion360で設計した液晶ディスプレイ台座(スタンド)
上図の3Dデータをstlファイル形式でエクスポートする。
そのstlファイルを3DスライサーソフトUltimaker Curaに読み込んだ(下図)。

図 stlファイルを3DスライサーソフトUltimaker Curaに読み込んだ
下図のようにスライサーを実行して、3D印刷のシミュレーション結果を表示してみた。

図 3DスライサーソフトUltimaker Curaで表示した印刷シミュレーション結果
実際に3Dプリンタで印刷してみた(下図)。

写真 Anycubic Mega-X 3Dプリンタで印刷した液晶ディスプレイ台座
久し振りの3D印刷だが、上写真のように一発で成功した。
ワテが使っているAnycubic社の3Dプリンタは数年間使っているが故障も無いし、安定性も良く、いい感じで印刷出来る。この3Dプリンタはオートレベルリング機能は付いていないので手動レベル調整が必要だ。
下写真の製品は最新機種なので自動レベル調整機能が装備されている。
3Dプリンタのレベル調整とは、印刷ステージの四隅や中央に対して、印刷ヘッドにあるノズルとの隙間を0.1mm程度の紙一枚くらいの距離に調整する機能だ。
距離が近すぎると印刷ノズルがステージを引っ掻いてしまう。
距離が遠すぎると印刷途中で各レイヤーの積み上げが上手く行かずにバラバラになるなどの失敗が起きやすい。
ワテが使っているAnycubic Mega-Xの場合なら、手動調整でステージと印刷ノズルとの距離を紙一枚の厚さに微調整するが、一度やれば数ヶ月くらいは調整がずれることも無い。
で、下写真のように約4時間27分で印刷完了した。

写真 約4時間27分で印刷完了した
下写真が印刷した液晶ディスプレイの台座(スタンド)だ。

写真 印刷した液晶ディスプレイの台座(スタンド)
下写真に示すように、多数の円錐形の構造物が並んでいて、その上にディスプレイ台座が載っている。
![]() |
![]() |
写真 多数の円錐形の構造物の上にディスプレイ台座が載っている
このように印刷ステージと隙間があるような構造物を印刷する場合には、多数の円錐形のサポートと呼ばれる構造物を印刷してから、本番の部品形状が印刷される。
それらの円錐形サポートを除去したのが下写真の状態だ。
![]() |
![]() |
写真 3D印刷したディスプレイスタンド
ネジ穴はΦ3.2mmで設計していたのだが、3D印刷では穴形状の場合には例えばΦ3.2mmで設計していても、溶けたフィラメントを積層させる熱堆積法の3Dプリンタでは、印刷された穴の直径はΦ3.2mmよりかなり小さくなる。
その理由は、溶けたフィラメントが穴にはみ出すから、穴径が狙ったΦ3.2ではなくΦ3.0やそれ以下くらいになるのだ。
なので、下写真のようにボール盤にΦ3.3のドリルを装着して穴の追加工をやっておいた。

写真 ボール盤にΦ3.3のドリルを装着して穴の追加工を実施した
下写真では印刷したスタンドを液晶ディスプレイにネジ固定した様子を示す。
![]() |
![]() |
写真 印刷したスタンドを液晶ディスプレイにネジ固定した
では、いよいよPIC32MKマイコンのSPI通信機能を使って液晶ディスプレイのピクセルにドットを打ってみる。
SPI通信で液晶ディスプレイのピクセルに出力成功
さっそくChatGPTさんやGoogle検索の力を借りながら、SPI通信機能を使って液晶ディスプレイの任意の座標に10×10ピクセルの正方形を描く実験をやった。
SPI通信の配線ミスを修正した
ところがChatGPTさんに何度も質問してサンプルコードを生成して貰っても、全く液晶ディスプレイが光る気配すら無い。

写真 ChatGPT生成のサンプルコードを使って実験中(全く液晶ディスプレイが光らない)
ワテはインサーキットデバッガ/プログラムライターは上写真のPICKIT5を使っている。
上手く行かない時には何か原因があるのだ。
詳細に調査したらワテ設計基板で液晶ディスプレイとSPI通信をやる部分の配線に間違いがあった。
そこで下写真のように基板の銅線パターンをカッターナイフで切断して、銅線で配線ミスを修正した。
![]() |
![]() |
写真 基板の銅線パターンをカッターナイフで切断して、銅線で配線ミスを修正
さらに下写真に示すように黄色の電線を追加して配線ミスを修正した。

写真 SPI制御信号の配線ミスを修正した
液晶ディスプレイにドット表示成功
その結果、下写真のように液晶ディスプレイに赤い正方形■を描画する事に成功した!
![]() |
![]() |
写真 液晶ディスプレイに赤い正方形■を描画する事に成功
上写真では液晶ディスプレイ(320×240)の四隅に10×10ピクセルの正方形を4つ描いている。
でも実は、配線ミスを修正しても液晶ディスプレイには何も表示されず、数時間に渡り悪戦苦闘というか試行錯誤を繰り返してようやく出力に成功したのだ。
SPI通信機能はMPLABのHarmony機能を利用した
PIC32マイコンを使うのも初めて、SPI通信なんてのを使うのも初めてのワテにとって頼りになるのはChatGPTさんだけだ。
液晶ディスプレイとPICはSPIと言う通信方式で制御が行われるのだが、MPLABにあるHarmonyと言う機能を使うと良いと、ChatGPTさんが教えてくれた。
Harmonyを使うとSPI通信だけでなくPIC32MKマイコンで出来る各種の制御を、ユーザーがプログラムを書かなくても、ほぼ全自動で制御に必要なライブラリ(ソースコードやヘッダーファイル)を自動生成してくれるのだ。
前回記事でもHarmonyを使ってLEDチカチカに成功している。

写真 PIC32MK汎用実験基板に液晶ディスプレイ装着した様子
液晶ディスプレイの任意のピクセルにRGBで色指定してドットを打つ事が出来るようになったので、その機能を応用すれば任意の座標に文字でも図形でも描画出来る目処が立った。
素晴らしい。
Harmony Legato(Graphics)機能を使う予定
しかしながら、文字出力ライブラリとか図形描画ライブラリみたいなのを自作するのは時間の無駄だ。自分で作るよりも有るものを利用するほうが効率的だし。
で、PICマイコンの場合には、同じくHarmonyの中にLegato(レガート)と言うグラフィックライブラリがあるのをChatGPTさんに教えて貰った。
このLegatoは、ワテの理解では、各種の部品(ボタン、ウインドウ、ラベル、チェックボックス、、)を描画キャンバスに配置してGUI作成して表示させるなどの機能を持った高性能な開発環境&ライブラリなのだ。
Legatoはウインドウや部品の上下関係や再描画処理も管理してくれるようなので、Windows OSのような画面管理機能を簡単に実装出来る(らしい)。
要するに、Legatoは何らかの制御機器の操作パネルGUIを設計するなどの用途に使うツールなのだ。具体的には、例えばカーナビの画面設計をするとか。
なのでHarmony Legatoを使えばメーカー製の製品のような完成度の高い画面設計が出来るのだが、ワテの場合はそこまでは必要ない。あくまで任意の座標に文字出力したり、図形を描画する程度の機能で十分なのだ。
それにHarmony Legatoを使うとプログラムコードがかなり大きなサイズになるので、メモリが足りなくなる可能性もある。
今回採用したPIC32MK1024GPK064の場合、利用出来るメモリは以下の通り。
| メモリ | 容量 | 用途 |
|---|---|---|
| フラッシュ(Flash ROM) | 1024 KB = 1 MB | プログラムコード(C言語で書いた関数・変数の初期化済みデータなど) |
| SRAM | 256 KB | 実行時に使用する変数やスタック、LCDバッファなどの一時データ |
表 PIC32MK1024GPK064で利用出来るメモリ容量と用途
でもまあ何事も経験なので、取り敢えずはこの高性能なグラフィックライブラリHarmony Legatoを試す予定だ。
それと並行して、軽量な文字表示ライブラリを探して組み込むなども検討している。
文字や図形出力にも成功
その後、文字や図形出力にも成功した!

写真 PIC32MKマイコンでSPI方式の液晶ディスプレイに文字や図形出力成功
ワテもやれば出来るのだ。
詳細は次回の記事で。
まとめ

ChatGPTさんに相談しながらプログラミングをすると効率が良い。
当記事では、ワテ設計のPIC32MK1024GPK064を使った汎用実験基板を使って液晶ディスプレイにピクセル単位で出力実験に成功した過程を紹介した。
延べ三日間くらい悪戦苦闘したのだが、ようやく液晶ディスプレイに表示する事が出来た。
自作ハードウェアが正常動作しない場合、色んな可能性があるので一つずつ調べていくしか無い。
今の場合だと、液晶ディスプレイ表示が出来ない理由として疑うのは以下の項目だ。
- ハードウェアの問題(SPI通信の配線間違い、制御信号の扱い方の間違いなど)
- 配線は正しいがHarmonyでSPI通信の設定間違い
- 液晶ディスプレイ表示自作プログラムの間違い(自作と言っても殆どChatGPTさん生成)
などだ。
ハードウェアの問題に関しては、PICでSPI液晶に表示する類似の例をネット検索して見比べるなどして、ワテ設計基板の配線間違いを発見した。それを修正したので、それ以降はワテのやり方に問題が無いことをほぼ確信出来た。
次にHarmonyでSPI通信の設定に関してはChatGPTさんに色々教えてもらったが、基本的にはデフォルト設定のままでも良かった。
最後に、液晶ディスプレイ表示プログラムに関しては、ChatGPTさんに生成して貰ったコードを組み込んで色々試したが、数時間悪戦苦闘しても全く表示出来そうな気配すらない。
そんな状況がこの土日もずっと続いていたのだが、最終的にはちょっとした初期化設定を忘れていて、それらを追加したらあっけなく簡単に表示出来るようになったのだ。
と言う事で、前回記事のLEDチカチカに続き、LCD液晶ディスプレイにピクセル表示出来たのは、素晴らしい進歩だ。
ChatGPTさんに相談できたので作業が捗ったが、もしChatGPTさん無しでワテが自力でやるとなると恐らく一ヶ月くらい悪戦苦闘していたかも知れない。あるいは途中で挫折して中止していた可能性すらある。
と言う事で、次はHarmony Legatoを使って文字表示に挑戦だ。
PICKIT5がを買えばPICプログラミングが可能だ。MPLABは無料ツールだし。
PIC プログラミング キットはPICKIT5よりも安いけれどMPLABでPICKIT5同様に使えるようだ。
(続く)
































コメント