2019年02月02日

組込用ビデオコントローラ

今回は組込用のビデオコントローラについて紹介します。

組込用の小型グラフィック液晶等では
SSD1306、ILI9340、ST7565といった
コントローラICを搭載したモジュールが多く販売されています。
このようなコントローラICを使用することで
液晶のパラレル信号を扱いやすいSPIやI2Cといったシリアル信号に変換しています。
最近ではマイコン自体にコントローラを搭載しているものもあります。


一方で高解像度LCDになるとSPIやI2Cといったシリアル信号では
信号転送が間に合わないため、
LVDSやRGBといったパラレル接続が一般的です。

高解像度LCDではパラレル接続が一般的ですが、
世の中には大型RAMを搭載することで
SPIやI2Cといったシリアル信号から高解像度LCDをコントロールする
ビデオコントローラがあります。

日本で入手が難しい&安定供給が不明あるものの、
外部SDRAM、HD出力に対応しています。
HD対応とSDRAM対応は非常に魅力的ですが、
高価&入手性に難ありです。

FTDI製。日本で入手が容易である程度、安定供給が見込まれます。
NOR Flash対応、最大800x600の解像度に対応しています。
1個600円前後。

■LC74900
オンセミ製。既にディスコン予定。最大800x480の解像度。
1個1500円前後

■他


他にも低い解像度のものはありますが、
最低限800x600は欲しいものです。
また、市場がニッチなため、
すぐにディスコンになっているものが多いようです。

入手性や安定供給を考えるとFPGAで実装かFTDIが妥当そうです。

組込用のビデオコントローラを使用すれば、
SPIから高解像度のLCDを制御することができます。
FTDI辺りのビデオコントローラで実験してみたいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2019年01月26日

Node-RedからのElasticsearchデータ検索

Node-RedからElasticsearchのデータを取得する場合に
少し煩わしい点があったため備忘録として紹介します。

Node-Redに限らず、
Elasticsearchにデータ投入する場合はPostメソッドを使用します。

Elasticsearchに投入したデータを検索して取得する場合は
CurlコマンドやKibanaのコンソール画面からはGetメソッドですが...

公式のElasticsearhの検索APIの説明でもGETメソッドを使用しています。

一方、Node-Redから検索APIを使用する場合は
Getメソッドでは取得できませんでした。
Getメソッドを使用するとmatch_allコマンド同様の結果となり、
意図した検索がされず、投入データすべてがhitとなってしまいます。

Node-Red本家のIBMのサイトで検索APIをNode-Redから使用する際の方法について説明がありました。
「複数の検索条件を指定する場合はメソッドがPOST」を使用する

直観的にはGetメソッドですが、
Node-Redからの場合はPostメソッドの使用するのがポイントのようです。

実際にPostメソッドで検索APIを使用すると
意図した検索範囲の結果を返してきました。

同様にPostメソッドを使用します。


CurlコマンドやKibanaのコンソール画面ではGetメソッドで取得できるにも関わらず、
Node-Redからは取得できないため、Wiresharkで小一時間色々試行錯誤してしまいました。

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

2019年01月19日

MachXO3LFでHDMI出力

今回はLattice製FPGA MachXO3LF Starter Kitを使用して
HDMI出力をしてみました。

FGPAからHDMI出力をする方法として、
電流モード差動ドライバを模擬してHDMIの信号を出力する方法
HDMIのトランスミッタICを使用する方法があります。


最初、MachXOシリーズで電流モード差動ドライバを模擬して
試してみましたがうまくいきませんでした。
MachXO3とHDMIで差動信号がアンマッチだったことが原因だと思われます。
また、エンコーダにギヤボックス等のMachXOシリーズ固有の機能を
活用しないと実現できないため、汎用性に少し欠けます。

このようなことから、HDMIはDVI規格の1つなので、
入手性のよいDVIトランスミッタTFP410を使用して実装することにしました。

まずはTFP410にHDMI出力端子を取り付けた
TFP410 Beakoutボードを設計しました。


img1.jpg

実装やコードを参考にしてみました。

TFP410Beakoutボードの実装を終えて
MachXO3LFを使用してHDMI出力をしてみましたが、
なかなかテストパターンが表示されず…
テストパターンが出るまで1週間ほどデバッグに要してしまいました。

結論から言えば、MachXO3LFのIO設定で
Slewrateの設定がデフォルトはSlowとなっており、
Fastにすることで意図した信号が出せるようになりました。


0031-01-19 午前10.06.09 IMG_6996.JPG

RGBの3bitで出力してみました。

電流モード差動ドライバの模擬回路作成から、
TFP410を使用したテストパターン出力まで
空き時間で1か月強、要してしまいました。
色々デバッグしてテストパターンが出たときは感動しました。

HDMIで色々画像を出力するためにはMachXO3LF内蔵のRAMでは足りません。
次は外部RAMとしてSDRAM等のテストをしてみたいと思います。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2019年01月12日

STM32Cube.AI 試食

19年の年始早々にSTM32Cube.AIがリリースされました。
STM32Cube.AIはPC等で学習させて
STM32マイコンで推論させることができます。

まさにAIのエッジコンピューティングを実現するツールです。

推論の動作テストをする手順について紹介します。

今回作成したコードとプロジェクトはこちらにアップしてあります。

まず、ターゲットはF3,F4,L4,L5,F7,H7が対応しています。
ただ、ROM、RAMを多く使うため、実際はF7、H7が現実的だと思います。

Caffe、Keras、Lasagneの学習済ファイルを使用して推論させますが、
今回は動画内で使用されているファイルを使用します。

【準備物】

・F3,F4,L4,L5,F7,H7ターゲットデバイス
・学習済みモデル 生ファイルはこちらから。
 https://github.com/Shahnawax/HAR-CNN-Keras
・STMCubeMX5.0以降
・SW4STM32やTrue Studioなどの開発環境


@Cube.AIのパッケージを追加する
 STMCubeMX5.0以降はHALライブラリ以外の関連ライブラリも
簡単にダウンロードできるようになっています。
CubeMXを開いて、
「Embedded Software Package Manager」の
「STMicroelectronics」タブから
Cube.AIにチェックを入れてパッケージをインストールします。

CubeAI.jpg

回線が細い場合は中途半端な状態でパッケージが入り、
学習済モデル読み込み時に「Invalid network」という
エラーが出る場合があります。
その場合は中途半端なパーケージを削除後、
ZIPを解凍して「Embedded Software Package Manager」の
「From Local」からインストールを選択してください。

削除はC:\Users\(USER_NAME)\STM32Cube\Repository\Packs\STMicroelectronics\X-CUBE-AI
のフォルダを全削除します。


ASTM32マイコンの選定
学習済モデルの推論に必要なROMとRAMを確認し、
STM32マイコンの選定します。
「MCU Selector」の「Artificial Intelligence」に
Enableのチェックを入れて
Model「Keras」
Type「Saved Model」
Model「(準備物のgithubファイル)」
Compression「None」
でAnalyzeをクリックします。


cubeAI-2.jpg


フラッシュ2.82MByteとなり、
フラッシュメモリが足りず、
このままでは推論できません。

Compression「4」
でAnalyzeをクリックします。

cubeAI-3.jpg

フラッシュ775kByteとなり、
STM32マイコンで推論できる現実的な値となります。
今回は手持ちにあったSTM32F746-Discoを使用するため、
STM32F746NGHを選択しました。


Bターゲットボード設定
STM32F746NGH選択後、「Additional Softwares」をクリックして、
X-Cube-AI/Application内の設定を有効化します。
Coreライブラリにチェックを入れ有効化し、
Applicationは「Validation」を選択して「OK」ボタンで画面を閉じます。

今回はライブラリの検証のため、
「Validation」を選択しますが、
速度検証の場合は「System Performance」、
推論のユーザーコードを実装する場合は
「Application template」を選択します。

cubeAI-4.jpg

cubeAI-5.jpg

Cライブラリ設定
「Additional Software」に「X-CUBE.AI」が追加されます。
「X-CUBE.AI」をクリックして、
「Artificial Intelligence Core」
「Artificial Intelligence Application」にチェックを入れて有効化します。

最初、「Additional Software」に「X-CUBE.AI」が表示されず、
選択できない不具合があり、CubeMX自体とCube.AIパッケージを再度、
再インストールし直すと表示されるようになりました。

cubeAI-6.jpg

DCube.AI設定
「Additional Software」の「X-CUBE.AI」をクリックします。
networkタブを選択します。表示がない場合は+で追加します。
ライブラリに「Keras」、「Saved model」を選択し、
Model「(準備物のgithubファイル)」を選択します。
Compression「4」を選択して、
「Analyze」ボタンをクリックします。

cubeAI-7.jpg


Eファイルの検証
「Validate on desktop」をクリックして、
学習済ファイルの検証をします。
Validation StatusにSuccessが表示されたら検証完了です。

cubeAI-8.jpg

Fその他設定
「Computing」項目の「CRC」を有効化します。

cubeAI-9.jpg

STM32F746DiscoはUSART1でPA9、PB7でSTLinkで接続されています。
USART1を有効化します。

cubeAI-10.jpg

また、必要に応じてデバッグ用のSTLinkを有効化します。

cubeAI-11.jpg


CORTEX_M7をクリックし、IとDのCacheを有効化します。

cubeAI-12.jpg


Gクロック設定
デフォルトは16MHzのため、最大の216MHzを入力します。
他の欄をクリックするとクロックウィザード確認がでるため、
OKボタンを押して他のクロックも合わせて自動設定します。

cubeAI-13.jpg

H出力設定
推論した結果等の情報をUsart1に出力します。
再度、「Additional Software」の「X-CUBE.AI」をクリックし、
「Platform Setting」から先ほど選択したUsart1を選択します。


cubeAI-14.jpg

Iコード自動生成
 HEAPサイズを0x200から0x2000に設定して、
他の設定は使用する開発環境等に合わせて設定し、
「Generate Code」をクリックします。

cubeAI-15.jpg

J開発環境にプロジェクトを追加し、ビルドします。
SW4STM32ではCubeMXで生成したプロジェクト設定に
バグがあるようです。
そのままではパスが通らず、ビルドできませんでした。

C/C++General内のPath and Symbols、IncludeタブのGNU Cで
デフォルトではDebug/Middlewares/***となっているため、
Debug/を削除してApplyボタンを押して適用します。

cubeAI-16.jpg

同様にLibrary Pathタブでも
Debug/を削除してApplyボタンを押して適用します。

cubeAI-17.jpg

念のため、C/C++ Build内のSettingのMCU GCC Linkerの
Librariesで先ほどの設定が反映されているか確認します。

cubeAI-18.jpg

Kビルド&書き込み
STLink等でSTM32F7へ書き込みを行います。

Lデバイス上での検証

先ほど生成したプロジェクトフォルダ内の
*.iocファイルをダブルクリックして、CubeMXを開きます。
「Additional Software」の「X-CUBE.AI」をクリックし、
networkタブからValidate Targetをクリックします。

cubeAI-19.jpg


デバイスのCOMポート確認画面が表示されるため、
デバイスマネージャ等で対象のデバイスCOM番号を選択します。

cubeAI-20.jpg

CubeMXのWindowでOutputにチェックを入れて結果を表示させます。
cubeAI-21.jpg


CubeMXの画面下に出力画面に結果が表示されました。

cubeAI-22.jpg

ValidationはOKで、入力した値(今回はrandom数)に対して
推論した値とのerror値を確認できます。

入力する値はCustomDataを選択してcsvファイルとして入力して、
検証することもできます。

cubeAI-23.jpg


ということでCube.AIを使ってデバイス上で推論することができました。
Cube.AIはAIライブラリとしては
非常に使いやすいソフトウェアとなっていますが、
まだインストールに少し難があります。
インストールミスで選択画面が表示されないといったエラーがありました。
何度かパッケージの再インストールで動作できるところまでできました。
インストールミスは今後のアップデートで改善すると思います。

今後は実際にセンサから人の姿勢の推定といったAIを活用してみたいと思います。
今回作成したコードとプロジェクトはこちらにアップしてあります。


posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2019年01月05日

SDRAM 拡張ボード

明けましておめでとうございます。
今年もよろしくお願いします。

年末年始はKicadで高周波信号系の設計に挑戦してみました。

手始めにSDRAMの拡張ボード(ブレイクアウトボード)を作成してみました。
信号線の長さがビットで異なるのと、なぜか56pinあるため、
自分で作り直すことにしました。

秋月等でも取り扱いのあるSDRAMの多くはピン配置が同じため、
他のSDRAMでもTSSOP54であれば同様に使えると思います。


拡張ボードといってもブレッドボードでは高周波信号が歪んで使えませんが、
1本づつワイヤ配線するよりも便利だと思います。
電源系の共通化で54pinから42pinでなっています。

信号線の長さだけでなく、経路や太さなど考慮すべき点はありますが、
まずは全ての信号線を等長配線して設計してみました。
実際に使えるかPCBを作成して今後検討してみたいと思います。


SDRAM.jpg

SDRAM2.jpg

動作未確認ですが、
Gitにもデータを上げました。

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