PR

PIC24FでTimerを使ったLEDの点滅制御

記事内に広告が含まれています。

 前回、PIC24FJ64GB002でdelayを使用したLチカを行いましたが、今回はTimerの使い方を覚えたいためTimerを使ってLEDの点滅制御をやりたいと思います。

 

 基本はPeripheral Libraryの関数、マクロを使用します。 Peripheral LibraryはXC16_v1.25には.hファイルが何故か同梱されてないため使えません。v1.24以前のバージョンでコンパイルします。

⊿1: Peripheral Librariesを個別でインストールすれば最新のコンパイラーでもコンパイルできました。

個別に Peripheral Librariesをインストールする方法はこちら

 詳細マニュアルはインストール先によりますが、だいたいここら辺りにあります。
\Microchip\xc16\v1.24\docs\periph_libs\Microchip PIC24F Peripheral Library.chm
もっと詳しく知りたい場合はこれを見ましょう。

ソースです▼

#define USE_AND_OR                      /**/
#include<ports.h>                       /*ポートbit操作マクロの定義*/
#include<timer.h>                       /*timer機能*/
#include<comparator.h>                  /*PWM機能*/
#include<PwrMgnt.h>

unsigned char F;

/*Timer1割込み*/
void __attribute__ ((interrupt, no_auto_psv)) _T2Interrupt(void) {
  T2_Clear_Intr_Status_Bit;           /* タイマー割り込みクリア */
  if (F == 0) {
    mPORTBSetBits(IOPORT_BIT_15);
  }
  if (F == 0xff) {
    mPORTBClearBits(IOPORT_BIT_15);
  }
  F = ~F;
}

int main(void) {
  AD1PCFG = 0xffff;                   /*全てのポートをデジタルI/O */
  CLKDIV  = 0x0000;                   /*クロック 32MHz*/
  mPORTBOutputConfig(IOPORT_BIT_15);  /*PORTB RB15を出力設定*/
  mPORTBWrite(0);                     /*PORTB Low出力*/
  /*Timer2割込み有効*/
  ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_1);
  /**/
  OpenTimer2(T2_ON | T2_PS_1_128 , 0xf424);
  while (1) {
    mPWRMGNT_GotoIdleMode();
  }
}

 「ConfigIntTimer2」でTimer2機能を有効化します。「T2_INT_ON/OFF」で有効/無効「T2_INT_PRIOR_*」で優先順位を決めてます。

 

 次に「OpenTimer2」をスタートさせます。引数の「T2_ON/OFF」でタイマーモジュールのON/OFF「T2_PS_1_**」でプリスケーラ―を設定。プリスケーラ―は1/8/64/256。カンマ後でピリオドカウントを指定してます。

 

 今回はプリスケーラ:128、カウントは62500で500ms毎のタイマー割込みに設定してます。この他「OpenTimer2」関数で32bitモードや内/外部発信機の設定等ができます。

 

 周辺機能の細かい設定は多数関数の引数で準備されてます。詳細はマニュアルで確認しましょう。

 

 void __attribute__ ((interrupt,no_auto_psv))…がTimer割込みで呼び出される関数。割込みクリアーして処理を記述します。

 

 必要最低限な機能で今回Timer割り込みをやってみました。関数使用すれば割と簡単に使うことができると思います。

 

スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました