PSoCセンサの動作確認。
先日製作したPSoCセンサのデータ受信側をコツコツ製作。回路は単純ですぐに用意できたが、問題はソフトウェア実装の通信処理。PSoCマイコンでセンサ基板から毎秒3000回、1.5Mbpsで1バイトずつ6回に分けて送信されるバイナリデータを受信すること、各種エラーのチェック (エラーフラグ、データ整合性) を手抜きせず行うことが、通信の要求仕様。
とりあえずC言語で受信割り込み処理を書いてみたが、あっさり玉砕。リストファイルでコンパイル後のアセンブラソースを見ると無駄な処理が多すぎで話にならないので、アセンブラで受信割り込み処理を書き直して再トライすると、今度は問題なし。送信側から毎回1ずつインクリメントするダミーデータを流してデータ抜け確認をしても問題なかったので一安心。ただし受信処理に処理能力の大半を喰われているため、他に同時にこなせる処理は限定されそうだ。デバッグ用に用意している液晶表示プログラムを使うと、データ抜けが発生。
動画も撮ってみた。Lが黒→灰の位置、Rが灰→黒の位置の生データ値で、センサとコースを20mm離した条件で動かしている。(実使用時は10mm前後を考えている) 理想は色が変わる位置をジャストで取得したいところだが、現状のセットアップでは左右とも狭くなる方向になっている。ハーフラインやクロスラインの認識も問題なし。直線番長ロボットでも作らない限りは確実に認識できるはず。
今後の細かい調整はプリント基板作成後とするが、PGAのゲインやコンパレータの閾値、LEDの点灯時間などはすべて実行時に変更可能であるので、悪さをしない範囲での自動調整にもトライしてみたい。
#雑談1
個人的にアセンブラに手を出したのはSEVENの製作以来だが、やはり限られた能力を最大限に活かすにはアセンブラしかないと思ってしまった。PSoCは8ビットマイコンの中でも処理能力は貧弱な部類なので、アセンブラを使わないとソフトウェア依存の高速処理はすぐに限界を迎えてしまう。(なるべくソフトウェアに頼らずハードウェアでコトを済ませることが PSoCの価値を引き出すポイントでもある) いきなりアセンブラで全体を構築することは容易ではないし開発効率も上がらないが、「このロジック、このアルゴリズムで最適」「処理速度面で置き換える意味がある」と判断できれば、積極的にアセンブラで置き換えてしまうべきかもしれない。
PSoC の開発環境である PSoC Designerは、ユーザがピックアップした機能 (PWM,ADC,...)の全てに対応するAPI を動的に生成する。このAPIを用いることでC言語やアセンブラから機能を手軽に使えるというのがこの開発環境のウリであるが、APIはアセンブラ記述であり、一見便利な機能ほど多くのソフトウェア処理で構築されていることがAPI実装を読むことで分かる。ADC機能を構成する処理の一部もソフトウェアになっていて、全体の処理が追いつかなくなるとADCの変換精度がおかしく‥など他のマイコンでは考えにくい事象も生じる。PSoC独自の機能が不要であれば、AVRやPICを使う方が楽で確実。
この手のマイコンでは、AVRが今一番情報もツールも揃っていて使いやすいと思う。各種データシートも日本語化されているし、このサイトのようなとても参考になる技術情報もある。このサイトの”AVR専用ライブラリ(for ASM projects)”のアセンブラ実装を見ると「これで出来るの!?」「なるほどな」と感心しきり。平方根の実装もスマート。ムリヤリC言語で置き換えた実装を作ってみると、アセンブラの利点がよく分かる (本来C言語でこんな実装はしない)。 H8もC言語では簡単にできない処理が一発でできる命令が沢山あるので、マイコンカーでもこの先ソフトウェアの複雑化、制御の高度化が進んでリソース面で追い込まれていくと、アセンブラによる実装を行う人が増えるのかもしれない。(第一回大会などは皆アセンブラ?)
#雑談2
個人的なこれまでのSANYOの技術的な評価はバッテリー等を含めてかなり高かったが、昨年買った Xacti HD1A は‥これは全く人に薦めることができない。高速性は評価できるものの、室内撮影など暗所でのドットノイズが盛大な画質にはガッカリ。購入検討中の方は、この春に出るという次期モデルの評判を聞いてからでも遅くはないはず。上の動画は目立たないようにフィルタをかけたものの、ボケの無い鮮明な画像にすることは不可能‥(泣)





最近のコメント