PSoC Creator、動かしてみるほどに良くできた開発ツールです。今回はコンパレータを使ってみたところ、前回の回路図エントリへの疑問が氷解しました。先だって「モダンなマイコンOS(とその開発環境)」の話を読んで思ったのですが、PSoC Creator カッコいいツールなのですが、先だっての「モダン」の範疇には入りませぬ。なぜなら
データシートを読まずにはいられない
ツールだからです。「モダン」なサイドではデータシートなど読まずとも「なんとなく」動いてしまいますが、「クラシック」なサイドでは、ドキュメントを読み、スペックを頭に入れて設計すること必須。そういう点で、PSoC Creatorは「クラシック」。しかし、クリック一発、必要なデータシートが画面に表れてくるのは実に素晴らしい。「クラシック」サイドの一つの到達点かもしれませぬ。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
前回、左側においたDAコンバータの出力を右側のPADに接続しようとしたら、デフォルトでアナログ端子は、デジタル端子と逆の右側に接続点があって、とまどった話を書きました。しかし、今回コンパレータを追加する段になって、
デフォルト設定はCypress社の慮り
であったことが納得できました。下の回路見てくだされ。電流を流し出すIDACの出力をコンパレータのリファレンスとして外部で結線してあります。
こういう使い方であれば、アナログ端子のデフォルトの接続点が右にあるというのは至極自然な流れです。よく考えてみるとこのPSoC搭載のアナログコンポーネンツは
- ADコンバータ
- コンパレータ
- オペアンプ
といったものが主力で、皆入力を持っているものばかり。唯一DAコンバータだけがアナログ出力ですが、結局DAコンバータは上の例のように参照電圧生成や、キャパシタを充電するお役目なので、入力の「お供」みたいなもの。よって、アナログ端子はいつも左にある、というのが「回路図は左から右へ」の流れでごくごく自然なのでした。
さてコンパレータで、COMP_P端子に外から入ってくる波形を参照電圧のところで切って、方形波にしてしまおうという回路です。このあと、入力加えようと考えているのは、
0.5Hz から 4Hz
くらいのとても遅い信号で、それほど精度は無くてもよいと考えています。最初、「通常の」コンパレータを選んだら、どうも端子のアサインがうまく行かなかったです。単なるデジタルIOやDACのアナログ出力などは、結構自由度が大きいようで、大抵の端子に出力できるようですが、アナログではそうもいかないようです。アナログについてはちゃんと計画しておいた方が良いようです。LEDの点灯用など動かせる端子を移動しました。こういうことがクリック一発でできてしまう(ソフトウエアの変更なし)のがPSoCの偉いところの一つです。空けた端子を使いローパワー(LP)型のコンパレータであれば、希望の位置あたりに入力端子を出せました。しかし、コンパレータのモニタ用に
コンパレータ出力を端子に出しておくかね
これがうまく行きません。なぜ、といって読むのはLP型コンパレータの「データシート」です。配置した内部要素の一つ一つのパラメータウインドウにデータシートへのリンクがあるので、要素を選択してクリックすればデータシートが直ぐに読むことができます。
LP型のコンパレータの出力は外に出すものじゃない(割り込みに接続)
ということであります。泥縄でなく、ちゃんとデータシートを良く読みましょう、と自分に言い聞かせます。ただ、今回扱おうとしている信号はとても遅いので、コンパレータの割り込みで処理しなくても、既に設定済の
システムタイマチック割り込み
でソフトウエア的にコンパレータの値をポーリングしてもあまり問題ないので、「とりあえず」それでやっつけてしまえ(また泥縄ですが)、ということにいたしました。コンパレータのモニタ用には拾った信号をLEDへのデジタル出力に載せてLEDを点滅させてやります、
5Hz、10Hzくらいなら人間の目で見えるし。
システムタイマチックは特にコンポーネントを配置せずとも、ソフトで初期化さえすれば使えるデフォルト1ミリ秒毎の割り込みです。1000回数えれば1秒。ちょうといろいろな仕事を割り振るには使いでのよいタイミングじゃないかい。コンパレータの立ち上がり「0から1」への遷移を1ミリ秒毎にチェックしてやれば、大体1ミリ秒精度で入力波形の周期を測れる、というもんです。
なお、サンプルソフトを見る限り、タイマチック割り込みで起動されるコールバック関数は複数登録できるようです。実際の割り込みの後、登録されているコールバック関数を順次呼び出してくれる感じ。登録に際しては、自分で「コールバック関数登録の空きの番号」を見つけてそこに登録しないとならないです。大きなOSであればそういうところはOSが裏でよきように計らってくれますが、ここではそうはいきません。必要な各種のAPIを皆自動生成してくれるPSoC Creatorです。どうも、準備はするから、トリガは自分でひけ、という思想に見えます。
さて、今回は、テスト用の入力波形を外部から与えます。以下のように周波数5Hzで、振幅500mVのサイン波です。
これをコンパレータの+側に入力し、基準電圧側にはIDACの出力を調整して波形の中央付近の電圧を与えました。測定した周期(ミリ秒単位)は、ソフトウエアのローパスフィルタ(単なる移動平均)で、8周期分から求め、AVG=という表示で、仮想端末に出力させてみました。「199」ミリ秒か。ホントは5Hz=200ミリ秒のつもりなんだけれどもね。
「細かいところ」には目をつぶり(つぶりすぎかも)、入力信号波形を操作してみます。5Hzを10Hzに。ちょうど426[sec]あたりで切り替えが起きてます。99か100ミリ秒か。予定通りじゃん。
PSoCはフレキシビリティが非常にあるので、泥縄でも、なんとかなる感じでついついやってしまいますが、でもね、
データシートはちゃんと読んで、成り行きに流されずにやらないと。