2019年06月08日

Digital Video Shield 応用編その2

Digital Video Shieldの応用編その2を紹介します。
ここ数回、応用方法を紹介(初回その1)しましたが、今回はJPG、PNGの画像を表示させてみました。

Digital Video Shieldで使用しているビデオエンジンBT816はCo-Processorエンジンを搭載しており、LOADIMAGEコマンドを使用することでJPGやPNGの画像をデコードしてビットマップに展開する処理をBT816内で行うことができます。
BT816でデコードできるため、Arduino等の小規模のマイコンでもJPG、PNG画像を表示させることができます。

また、Digital Video ShieldにはmicroSDスロットがあるため、他の配線なしでSDカードに入った画像を読み込んで表示することができます。



JPG、PNG画像をBT816に読み込む方法はいくつかあります。
@SDカードデータ→BT816内のRAMに展開→BT816内のRAMからビデオ出力
ASDカードデータ→BT816内のRAMに展開→Digital Video ShieldのFlashへ書き込み→FlashからRAMへ展開→BT816内のRAMからビデオ出力
B@の方法でSDカードの代わりにコード内にバイナリデータを実装
CAの方法でSDカードの代わりにコード内にバイナリデータを実装

なお、BT816でデコードせずにそのままBitmapを表示させる方法はありますが、専用ツールで前処理(専用のファイル形式への変換)が必要で手間と汎用性に欠けるため、今回はこの方法は使用しません。

B、Cはマイコンに十分なROM領域がないと実現できないため、汎用性を考え、@の方法を紹介します。
Aの方法はDigital Video ShieldのFlashを活用する意味では魅力的ですが、BT816に接続されたFlashは読み込み時はそのまま読み込むことはできず、必ずRAMに展開する操作が必要となります。また、Flashのメモリは16MBでSDカードと比べると小さく、SDカードの方が汎用性が高いため、機会があれば別途紹介したいと思います。

全体手順
1. microSDに800x480の画像データをPCから保存
2. main while内、もしくはloop内にEveDemo3関数呼び出しコードを記述
3. Digital Video ShieldのSDスロットにメモリを挿入
4. マイコンに上記コードを書き込み
5. ディスプレイを接続して電源を投入する
6. JPG/PNGが表示されます


JPG/PNGのデコード、表示処理を行うEveDemo3関数の内部処理を簡単に紹介します。EveLoadJpgFile内でメモリから読み込み、デコード、表示処理を行います。

1. SDカード内の該当する画像ファイルを開く
2. CMD_LOADIMAGE命令を実行し、BT816内の汎用RAM領域RAM_Gにデータ展開する
 ※RAM_G展開したデータはCMD_LOADIMAGE命令で自動でデコードされます
3. デコードされたビットマップデータをEveCmdSetBitmapで設定します
 ※ここで高さ、幅は読み込んだファイルのそのままのピクセルサイズを設定します
4. 位置を変更する場合はVERTEX2II(x,y,...)で必要に応じて変換処理を行います
 ※今回は紹介しませんが、大きさ変更や回転させる場合はCMD_SCALE、CMD_TRANSLATEといったコマンドがあります
5. DISPLAY、DLSWAPで表示処理を行うことでディスプレイに表示されます


img5.JPG

SDカードから800x480ピクセルサイズのJPG/PNGをBT816のRAMに読み込ませて800x480のディスプレイに表示させてみました。JPG/PNGのファイルをそのまま前処理(専用のファイル形式への変換)なしで表示できるのは非常に魅力的だと思いました。


arduino.jpg

ArduinoUNOでコンパイルした結果は 使用率ROM45%、RAM58%でまだまだ余裕があります。ArduinoUNOを使用してSDカードのファイルシステム、JPG/PNGのデコード、画像表示までできることが確認できました。ArduinoUNOといったマイコン側にRAM容量がなくともビデオエンジンBT816の大容量RAMによりこのような処理を実現することができました。BT816のRAMサイズは1MBあるため、JPG/PNGをデコードしたビットマップで1MB以下の画像であれば表示できると思います。


今回のサンプルはArduinoUNO及びSTM32F401 Nucleoで実装しています。Githubに上がっているコードをアップデートし、JPG/PNG読み込み例(EveDemo3)を追加しました。

Digital Video ShieldとArduinoUNOで自作フォトフレームといったことも簡単に実現できそうです。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2019年05月18日

PCB電磁石

簡単なアクチュエータを作りたいと思い、PCBを使って電磁石を設計してみました。

約35mm x 約35mmのサイズで配線幅0.3mmで両面配線しました。多層基板等使えば、磁力は強められますが、コストの兼ね合いで両面基板を選択しました。基板厚を一般的な1.6mmでなく、0.6mmを使用することで軽く重ねても使用できるようにしてみました。


IMG_7514.JPG


配線幅0.3mmにつき、最大電流約300mA
両面で約60回巻、抵抗値10.2Ωとなりました。


5v印加で500mAの電流が流れるため、流れ過ぎな感じですが、ほんのり温かくなる程度で電磁石としての機能を確認することができました。
PWMでマイコン制御できそうです。電磁石は部品として購入すると入手性やコスト面で難がありますが、PCB基板で実装できれば解決できます。これらの電磁石を組み込んで小型なロボット?的なものを考えてみたいと思います。

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2019年04月27日

STM32CubeIDE

先日、STからSTM32CubeIDEという純正の開発環境が発表されました。
今回はSTM32CubeIDEを紹介させて頂きます。


今までSTM32の開発環境はSW4STM32、TrueStudioといったパートナー企業が開発したIDEを使用することが一般的でした。
STM32マイコンをワンストップで開発できるようにCubeMXにTrueStudioを統合したSTM32CubeIDEが開発されました。


cubeide1.jpg


SW4STM32、TrueStudioと比べると、
CubeMXで設定して生成したプロジェクトを開発環境にインポートする手間が減っています。

早速、ダウンロードして試食してみました。



cubeide2.jpg

起動するとワークスペース選択画面がでます。
デフォルトのままで「Launch」をクリックします。

cubeide3.jpg

起動するとプロジェクトの新規作成、or 開くボタンが表示されます。

今回は最初なので新規作成から行いました。
「Start new STM32 Project」をクリックします。

cubeide4.jpg

CbeMX同様にマイコン選択画面が表示されます。
今回は手持ちのSTM32F401Nucleoを選択しました。

cubeide5.jpg

続いてプロジェクト設定画面が表示されます。
ここでC,C++で記述するのかといった設定ができます。
プロジェクト名のみ設定して「Next」をクリック。

cubeide6.jpg

コード生成に際して、CubeMXのファームバージョン等の選択画面が表示されます。
デフォルトのままで「Finish」をクリック。


cubeide7.jpg

ピンアサイン、クロック、ペリフェラル設定の画面が表示されます。
一通り設定を行ったあとはコード生成を行います。


cubeide8.jpg

Project→Generate Codeをクリックしてコードを生成します。
CubeMXがすでにインストールされている場合、CubeMXのファームパッケージのディレクトリから自動で読み込まれるようです。
CubeMXのファームパッケージがない場合や古い場合は自動でダウンロードが開始されます。


cubeide9.jpg
コードが生成された後はCtrl+Bでプロジェクトのビルドをします。
デフォルトではデバッグ用のelfファイルのみ生成されます。
必要に応じてプロジェクトウインドウのプロジェクト名を右クリックして、プロパティからbin or hexファイルを生成するように設定します。
Alt+Enterでもプロパティを表示できます。

cubeide10.jpg

C/C++ Build→Settings→MCU Post Build outputsから「Convert to binary file/ Intel Hex file」にチェックを入れます。
これでビルドするとbinファイルが生成され、STLink UtilityやCube Programmer等から書き込みできます。


またデバッグ等を行う場合もこれまでのSW4STM32やTrue studio同様です。

cubeide11.jpg

Debug Configurationからデバッグ設定を行います。

cubeide12.jpg

Search Projectからelfファイルを選択してDebugボタンを押すことでオンラインデバッグが可能です。

SW4STM32やTrueStudioの開発環境にCubeMXのプラグインを予め導入したものがSTM32CubeIDEという感じです。

cubeide13.jpg

TrueStudioの機能かもしませんがビルド後にメモリの空きスペースが表示される機能は便利だと思いました。
今回のSTM32CubeIDE発表に伴い、残念ながらSW4STM32、TrueStudioの開発環境はNRND、つまり新規開発には非推奨になっています。
今後はSTM32CubeIDEがメインになるようです。
デフォルトでbin、hexが生成されない設定や通常の書き込みボタンやツールがないようなので初心者には少し戸惑う点があると思いました。

sw4stm32.jpg


SW4STM32ではデフォルトでbinが生成され、上記のような書き込みボタンがありました。
これからの発展に期待しましょう。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2019年03月16日

組込ソフトウェア開発で便利なマクロ

今回は組込ソフトウェア開発で便利なマクロを簡単に紹介します。

まずはビルド管理に便利なマクロ、
__DATE__と__TIME__です。

例えば起動時に下記のコードを仕込んでおけば
ビルド時にビルド日時が埋め込まれます。
printf("Build: %s %s \n\r",__DATE__, __TIME__);

例えばシリアルから出力すると下記のようになります。
Build: May 6 2019 13:56:47

自動でビルドの度に埋め込まれるため、
ビルド管理やファームウェアバージョン管理が容易になります。



続いてエラー処理等で便利なマクロ、
__FILE__、__FUNCTION__、__LINE__です。

エラーは発生した際にこれらのマクロを使用するとエラーの出た処理が記述されたファイル名、関数、何行目か出力することができます。

printf("ERR-> File: %s Func: %s Line: %d\n\r",__FILE__,__FUNCTION__, __LINE__);

例えばシリアルから出力すると下記のようになります。
ERR-> File: ../Src/main.c Func: main Line: 264

これらのマクロを仕込むことでデバッグがし易くなります。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2019年03月09日

アンプ内蔵アナログ出力MEMSマイク変換基板

以前からアナログ出力MEMSマイク変換基板を販売しておりましたが、
アンプを内蔵しておらず、外部で別途アンプが必要でした。

外付けアンプの場合、拾う音の対象に応じてアンプのゲインを変えて対応できるというメリットはありますが、回路が別途必要となるのが面倒でした。

そのため、現在のラインアップに加えて、アンプ内蔵アナログ出力MEMSマイク変換基板を設計してみました。


img1.jpg


img2.jpg



デフォルトではアンプゲインを約50倍に設定しています。
大きな音の場合は飽和する場合がありますが、部屋の音などを拾う分にはちょうどよいゲインに設定しました。
また、出力中立電圧を電源電圧/2に設定しました。
アンプ内蔵のため、Arduinoといったマイコンのアナログ入力(ADC)にそのまま接続することが可能です。

もし、拾う対象の音が大きく、出力が飽和してしまう場合はゲインのR4をデフォルトの500kohmから例えば100kohmにすれば、ゲイン約10倍となります。1608サイズの抵抗を使用してください。

基板のサイズ、固定穴径はこれまでのアナログ出力MEMSマイク変換基板と同じにしています。


設計に問題なければ1個2000円弱程度で販売開始予定です。
詳細についてはこちら
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする