PICマイコンで作るPhotoフレーム
<PICで作るデジタルフォトフレーム>
SPI接続の480x320ピクセルのTFT LCDの安いものが無いかと探していると、中華製で760円で売りに出ているのを発見。1500円以上購入すると送料無料とのことで、ついでに320x240のLCDと半田吸い取り網線2巻をまとめて1520円でゲット。
2024年に作成した320x240ピクセルのLCDにSDカードに保存したBMP画像を表示する基板をジャンク箱から探し出し、今回購入した480x320ピクセルのLCDへ改造する事にしました。
上がTS1931Wという品番の480x320ピクセルのLCDです。使っているLCDドライバーICはST7796S。PICとのインターフェースはパラレルとシリアルを選択できますが、デフォルトは4線式SPIに設定されていました。
ドライバーICの変更に伴い、ソースファイルを手直しする事1日。 簡単にBMP画像を表示出来るようになりました。
左のスクリーンコピーがヘッダーファイルとソースファイルの全てです。 ファイル名は2024年に試作した時と同じ名前になっていますが、ソースファイルの一部が変更されています。
これらの全てのファイルはzipファイルでダウンロードできます。
SDカードにセーブされるBMPファイルは、縦型で水平方向のピクセルは320ピタリでなければなりません。縦方向は480ピクセルですが、こちらは480以上有っても480を超えたラインは切り捨てられます。画像描写はBMP画像の下から上へスィープしますので、画像の上部が切り取られる事になります。 目安としては最大490ピクセルくらいです。
また、SDカード内のBMPファイルのファイル名はFAT32のロングファイル名を使う事ができますが、PIC側が日本語対応していないので、英文に限られます。 SDカード内のファイル名はDIRキーでLCD上に表示できますが、この時の表示はMS-DOSの8+3式の大文字の表示に限られます。ファイル名が8文字を超える場合、8文字目が数字になってファイルの識別をおこないますので、ロングファイル名がOKと言っても、SDカード内のファイル名も8文字以内に制限していた方が無難です。
下の写真はデバッグ中のバラック回路と480x320ピクセルで表示したLCDです。 フォトフレームとして使える様にケースを探す事にします。
TFT LCDにBMPファイルを表示する基本機能が出来上がりましたので、次は、これをケースに収納し、曲りなりにも、写真を飾れるようにします。 しかし、市販されている1万円を超えるような仕上がりには程遠く、写真を飾ると言うより、プログラムのデバッグを楽しむというレベルにしかならないようです。
まず、ケースですが、ダイソーのブリキの箱で、以前周波数カウンターを送信機の中に内蔵するとき、高周波の妨害を防ぐ為のシールドBOX用に買ってあったのですが、サイズが大きすぎて、未使用となっていたのを流用します。このLCDを収納するにはちょうど良さそうです。
このデバッグ中に、カメラや素材のサイズの縦横比がまちまちの為、PCでBMPファイルのサイズを320x480ピクセルサイズにサイズ変更するのが、以外と大変でした。 そこで、BMPファイルのピクセルサイズは、320x480に近づける必要はありますが、縦横比の少々の違いや、LCDのサイズより多少大きくても、画像の中心をほぼ維持した上で、LCDサイズよりはみ出す部分があっても、画像が斜めに流れなくしたり、LCDサイズより小さな画像も画面のほぼ中央に持ってくるような処理も追加しました。 PCで簡単に出来る、画面の縮小や拡大はPICではほぼ無理なので、高望みしない事にします。
電源は5V出力のACアダプターを使用しますが、電源ON時、前回まで表示していた画像を継続表示するよう、ラストメモリー機能付きにしました。
使用できるSDCカードはSD HCのみです。 DIRで呼び出せるファイル数は最大30までです。SDカード内にファイルを追加する場合、30以内になるよう不要のファイルを削除必要です。
しばらくは、使い勝手の改善のためにデバッグが続きそうです。
LCDドライバーIC ST7796SのLCD向きは縦長オンリーで、通常横長の写真が多い中、作成するBMP画像は常に縦長の状態でSDカードへ記録する必要があります。 また、ファイル名の表示も縦長しかできません。
また、BMPファイルの詳細解析を行っていませんので、短い方のピクセル数が320以外のとき、時々、画面が流れたり、カラーが白黒になります。このような場合、オリジナルの画像の縦横比を変更せずに、短い方のピクセルを320に合わせると、うまく表示できます。
現在表示出来るBMP画像の総数は最大64枚ですが、確認は28枚しかやっていません。
PICのBMP画像表示プログラム BMP_display_480x320_091.cをダウンロード
SDカードアクセスプログラム SD_main_091.cをダウンロード
上の2点のみは、zipファイルに含まれるプログラムより更新されています。ファイルの中でGIFという文字が沢山出てきますが、これは本来BMPに変更しなければならなかったのですが、それを上記ふたつのファイルで行うと、コンパイルエラーが続出し、修正を諦めました。 多分、ソースプログラムだけでなく、ヘッダーファイルの中にもGIFの文字があるのでしょう。
2026年7月30日
このフォトフレームはこれで完成ではなく、スライドショーが可能になるまでやります。
一応、スライドショーが可能になり、かつ扱えるBMPファイルの数も256までとなりました。 ただし、まだ28枚以上の画像をSDカードに記録していないので、もし、バグが出たら都度公開します。
MPLAB Xの中のファイルもいくつか修正がはいりましたので、ファイルリストを左に示します。
以前のコンパイル状態から、修正が有ったファイルのみ名前を変更してあります。 名前が変更になったファイルは個別にダウンロードできるようにします。
スライドショーのON/OFFは新たに追加したスライドSWで切り替えます。スライド間隔の最小時間を当初15秒に設定したのですが、画像の描画速度が遅く、描画完了と同時に次の画像描画の動作になりますので、ゆっくりみられません。従い、最小時間間隔は20秒とし、30,60秒、2,3,5,10,20分と選択できるようにしました。DIRキーとUP/DOWNキーで選択できます。 画像の表示順序はSDカードに記録された順序のままで、変更はできません。
電源OFFのときラストメモリー機能がありますので、次に立ち上げた時は、その画像を最初に表示します。
以下のファイルをダウンロードできます。
BMP_display_480x320_092.cをダウンロード
BMP_display_system_092.hをダウンロード
上はスライドショーモードで画面が切り替わる途中のショットです。






















































































