よろしい、ならばデバッグだ。
ということでオシロスコープを引っ張り出します。
CDBにはGNDピンが立っていないので、以前に展示会でマック8のブースでもらったサンプルのピンをGNDのスルーホールに立てて、そこにプローブのGNDクリップをつなぎます。
まず、MCCでCLKOUTの設定をしてみます。"Pin Module" で Port A の RA4 をロックして、CLKOUT をピン3に出力させます。このとき忘れてはいけないのが、"Generate" ボタンを押すこと。これを押さないと、変更がソースに反映されません。
逆に言えば、MCCが生成するソースはいじってはいけません。"Generate" を押すたびに上書きされるので、ソースをいじった部分もその瞬間になくなります。
なので、MCCではMCUやピンの設定、イベントの設定以外は(Configuratorというだけあって)いじらないようにしているようですし、ロジック部分はそれ以外のソースで実装していくのが筋でしょう。
ということでまずはCLKOUT出力です。
周波数はFOSCで設定した8MHz、ちゃんと動いています。電源電圧のセレクタ J12 が +3V3 側なので、3.3Vレギュレータを通して電源が供給されていることもわかります。
次に Port C の RC1 です。ここはAD入力であると同時にドライブもされているので、本来ならば動いているはず…なのですが、レベルは0Vに張りついていました。
もしかして TMR6 が動いていないか、TMR6 の割り込みが処理されていないかどちらかかもしれない、と思いながらふとソースを見てみると、
// Enable the Global Interrupts - //INTERRUPT_GlobalInterruptEnable(); + INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts - //INTERRUPT_PeripheralInterruptEnable(); + INTERRUPT_PeripheralInterruptEnable();この部分がコメントアウトしたままになっていて、早い話が割り込み禁止状態になっていました。
コメントアウトを外してビルドしてみると、ドライブ波形が出てきました。
mTouchボタンを触ってみると、LEDが点いたり消えたりします。が、触ると消えて離すと点くので、どうやら信号の極性が間違っているようです。回路図を見ると、確かにLEDの電源はIOポートで引き込むのではなく、IOポートから給電する形になっていました。なので、以下のように main.c を修正します。
void processButtonTouch(enum mtouch_button_names button) { switch(button) { - case Button0: LED_SetLow();break; + case Button0: LED_SetHigh();break; default: break; } } void processButtonRelease(enum mtouch_button_names button) { switch(button) { - case Button0: LED_SetHigh();break; + case Button0: LED_SetLow();break; default: break; } }
ちなみにタッチしている間の波形は以下のように変化しています。
上の波形との違いはプリチャージ後の波形の戻り方で、この差を検出しているようです。
ところでMCCを使ったmTouchの実装では、上記のようにTMR6を使っています。このタイマを他のタイマに変更できないのか、できるとすればどうすればいいのかはちょっと調べてみたいと思います。
0 件のコメント:
コメントを投稿