月曜日, 11月 04, 2019

PIC24FV16KM202 w/microstick MCCPモジュールで2つ目のタイマーを

I2Cを使っているからか,1個目のタイマーをADCにしたら,他のタイマーが見当たらない。いつものようにsaharaさんのページなどを参照すると,MCCPの機能と一つとして,「もう一つのタイマー」として使えるようだ。

MCCでMCCP1を追加。


あいかわらず無愛想だ... データシートも読む。16Bitだと,複雑なタイマーも仕掛けられるようだが,今回は10msecごとの単純なタイマー割り込みなので,設定が簡単そうな32bitを選択。
Primary Timer Period だけを示せばようだ。

その上,FOSC/2 -> 16MHz がもとのクロックなので,10msec / (1/16MHz) = 160000(dec) = 0x27100 が設定値。

そのタイマー処理だが,TMR1とは違って,main.cの中で定義できそうにない。やむを得ず,mccp1_tmr.c に記載する。

char _KEY_STATE = 0;

void __attribute__ ((weak)) MCCP1_TMR_Timer32CallBack(void)
{
    // Add your custom callback code here
    _KEY_STATE++;
}

そして main.cの処理 共通で使う変数をexternで記載する。これがわからなくて悩んだ... C言語の基本が...

extern char _KEY_STATE;

(中略 RTCCで1秒おきに以下を実行)

            sprintf(d1,"KEY_STATE = %d",_KEY_STATE);
            _KEY_STATE=0;
            OLED_string(d1,0,16);
            OLED_write();

ふう。できた。

0 件のコメント: