マイコン工作実験日記

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

MMA9555L

2016-06-28 23:58:41 | Weblog
Digikeyの新製品紹介を見ていて、今更ながらMMA955Lというセンサーがあることを知りました。

品番がMMAで始まることからもわかるように加速度センサーなのですが、データシートではIntelligent Motion Sensing Pedometerと謳われています。「なるほど、歩数計機能が追加されているんだな。」と思ってデータシートを覗いてみてびっくり。歩数の計測だけでなく、移動距離や移動速度、消費カロリーの計算、出力までやってくれる「活動量計」になっています。身長、体重、性別データをレジスタに設定しておけば、加速度センサーの出力を解析して、各活動量を算出してくるようです。解析、演算処理のために、内部にはColdFireのコアが組み込まれています。

センサーのレジスタを読みだしてLCDに表示したり、BLEで飛ばしたりするだけで、ちょっとした活動量計の出来上がりですな。今度、何か買い物する時に、ついでにポチってみようかな。うまく半田付けできるかどうか自信ないけど。

SystemViewerでタスクの動作状況を確認する

2016-06-17 17:37:10 | Weblog
3ヶ月ほど前から使っているので、そのうちに記事にしようと思っていたのですが、ずいぶんと遅くなってしまいました。。。

ここのところ、STM32 CubeMXでコード生成させて FreeRTOSを使っているのですが、FreeRTOSの動作状況を視覚化することのできる便利なツールがSEGGERが提供しているSystemViewerです。FreeRTOSで使っている割り込みハンドラーや各タスクの動作状況を視覚化してリアルタイムで表示してくれるので、一度使い始めたらもう手放せません。なんか、見ているだけでも楽しいですし。SilverTel SLICを使ったプロジェクトをSystemViewで見てみると次のような画面が得られます。




プログラムを実行中はこの画面表示が刻々と変化して流れていくのですが、記録表示動作を止めて蓄積したデータを保存することができますので、後から動作状況をゆっくりと確認することができます。




この画面絵はTime Line表示の高さを増やして見やすくしてみました。割り込みが意図した間隔で正しく発生していることを目で見て容易に確認することができるのは嬉しいですね。これまでは、ハンドラーの中で未使用のGPIOを反転させて、その様子をオシロやロジアナを使って確認していたような作業がJTAGだけで出来てしまいます。割り込みの発生に伴って関連するタスクが実行する様子もよくわかります。電話の通話処理はDMA完了割り込みを契機としてWT32とSLICとの間で相互にデータを送りあえばいいだけなのでタスク処理もとても短くてすみます。そのため、ほとんどの時間、CPUはIdleしていることもわかります。

そんな中で、たまにしか走らないんだけど、結構処理に時間がかかっている奴がいます。




赤く表示されているPhoneTaskですが、優先度が低いので、他のタスクに割り込まれつつも3500μ秒ほど走っています。実は、このタスクはRTCからのAlarm割り込みを契機として走り始めており、1秒おきに時刻表示を更新している部分に相当します。実際にLCDに対してコマンド/データを送信している部分はSPI DMAの部分ですので、ほとんどの時間は送信すべきデータの準備に費やされていることになります。どうやら、拝借したLCDのライブラリのフォントデータ処理が遅いようです。

このようになかなか便利なSystemViewerですが、SEGGERが提供しているコードで対応しているFreeRTOSのバージョンは現在 8.2.3となっています。FreeRTOSは先日 9.0が正式にリリースされたようですが、ErichさんはすでにRTOS V9.0と、それに対応したSystemVierを組み込んだPEXコンポーネントを配布しています。SEGGERからはSystemViewerとターゲットのRTOS間で使用するAPIの仕様が開示されているので、自分の好みのRTOSやOS無しシステムにSystemViewerを適合させて利用することができるのです。こちらのRKさんは、Nordic SemiのnRF52のSoftDeviceに合わせて使ってみた結果を報告されています。

SystemViewerを使って動作状況データを取得するにはSEGGERのJ-Linkが必要ですが、ST-LinkをJ-Link化したものでも使えます。同様にFRDMのOpenSDAをJ-Link化したものでも使えるんじゃないかと思います。