マイコン工作実験日記

Microcontroller を用いての工作、実験記録

CR1220とタスク構成

2024-03-20 12:16:46 | DoomPlayer

画面キャプチャ機能でSDカードに画像を保存できるようになったので、そのタイムスタンプとファイル名生成のためにRTCバックアップ用の電池としてCR1220を追加実装しました。Nucleo-U575ZIでは、ディフォルトでMCUのVBAT端子はVDDにジャンパされているのでSB50の0Ωを取り外してから、電池を装着してやります。これで、ようやくと計画していた全ての部品を実装したことになります。

RTCのカレンダー機能を使うので、日付と時刻の設定機能も必要となります。LVGLを使ってGUIとして実現するのがベストなのでしょうが、使用頻度が低い機能にわざわざGUIを用意するのも面倒です。そこでNT-Shellを導入してCLIのコマンドでdate, timeコマンドを用意しました。

せっかくNT-shellを入れたので、タスク状態を表示するpsコマンドとQSPIフラッシュ上に書き込まれているファイル情報を表示するflashコマンドも用意しました。

psコマンドで表示されている数字は、残りスタックサイズを示しています。各タスクの大まかな役割は次のとおりです。

 

タスク名 役割
defaultTask 起動時のSD, QSPI faslhの確認、スクリーンキャプチャ、タッチパネル処理を担当
guitask LVGLと画面更新処理
btstacktask BTstackとHIDホスト処理
shelltask NT-shellとコマンド処理
flacreader FLAC音楽データの読み出しと展開処理
mixplayer 音楽と効果音の合成とFFT処理

上記のコマンド実行例は、起動直後の状態を示しています。この後、Bluetoothでコントローラを接続して音楽を再生したりしているとスタックが消費され、DOOMのゲームを開始すると新たにdoomTaskが開始されます。


STM32H7R/S

2024-03-12 22:45:48 | Weblog

来週の発表になるのかもしれませんが、STM32H7R/Sシリーズが新たに出るようです。正式発表の前ですがYouTubeにDiscovery kitが紹介されています。

STのサイトで検索してみるとこんな資料が見つかりました。内蔵メモリを抑えて価格を抑えているようです。


画面キャプチャ

2024-03-06 20:13:47 | DoomPlayer

作業中のNucleo0U575ZI版のDoomPlayerにもようやくと画面のキャプチャ機能を用意しました。青いUSERスイッチを押すことで、SDカード上に画面キャプチャを保存します。今回は、16ビットのパラレル接続LCDを使っていますので、画面情報はLCDのコントローラであるILI9488が持つGRAMから読み出すことにしました。

書き込みの際にはMomory Writeコマンドを使ってRGB565形式の画素データを16ビットで書き込むことができますが、Memory Readコマンドを使っての読み出しの際には常にRGB888形式になるんですね。知らなかった。そのため、画面データ量は480x320x3 = 460,800バイトとなります。STM32H7B3を使っていた時は、JPEGエンコーダを使って圧縮した画像データをSDカードに保存していましたが、STM32U575ZIにはJPEGエンコーダは備わっていません。LibJPEGを使ってソフトで圧縮しようかとも思いましたが、作業領域のSRAMも必要になるので、今回はRGB888形式のままで保存することにしました。ちょっと手間ではありますが、PC側でImageMagickのconvertをつかてJPEG/PNGに変換しています。

画面データの読み出しは、LVGLの画面更新やDOOMの画面更新作業と競合しないように配慮しています。また、SDカードへの書き込み動作は、音楽再生のための読み出し動作とSDカードアクセスが競合するので、一時的に音楽再生を止めてから読み出しを行うことにしています。

DualShock4やDualSense, 8bitdo Zero2をつなげた時には、480x320に拡大して画面表示をしますが、コントローラが接続されていない場合には、320x200で表示することにしてみました。

LVGLを使って作成した画面上のボタンを押すことで操作可能になってはいますが、画面タッチでの操作はかなりキツイ。画面表示も小さくてみづらいし、実用的ではありませんでした。