みけわんこ2のブログ

コンピュータプログラムを中心に書いています。ヽ(・∀・)ノ♪

全体表示

[ リスト ]

がんばるPIC

今回は、アナログ変換です。

「PIC24FJ64GA002」のアナログ変換は、設定レジスタも多くなにやら複雑です。とりあえず、分かる範囲で、半固定抵抗を回すと、LEDの点滅速度が変わる基本的なものを製作してみます。

回路図は下記の通り

イメージ 1


LED点滅の時に使用した回路に、AN4(RB2)に半固定抵抗を接続したものになります。

プログラムソースは、こちら

#include "p24FJ64GA002.h"
#define CLOCK 16

_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF
   & COE_OFF & ICS_PGx1 & FWDTEN_OFF)

_CONFIG2(IESO_OFF & FNOSC_FRCPLL & FCKSM_CSDCMD
   & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_NONE)

void delay_us(int usec);
void delay_ms(int msec);

unsigned long ADCValue;

int main(void)
{
   CLKDIV = 0;                  // クロック1:1設定
   AD1PCFG = 0xFFEF;            // AN4(RB2)アナログ、他デジタル
   TRISA = 0xFFFE;              // RA0出力、他入力
   TRISB = 0xFFFF;              // 他入力

   //50msec周期  内部クロック,1/256,FOSC=16MHz
   T3CON=0b1000000000110000;
   PR3 = 3124;                  // 50000÷((1/16)×256)-1 = 3124

   // A/Dコンバータ有効、タイマ3一致、サンプリング自動
   AD1CON1 = 0x8044;            // AD1CON1:A/D制御レジスタ1
   // 自動スキャン
   AD1CON2 = 0x0400;            // AD1CON2:A/D制御レジスタ2
   // 31Tad、3.0Tcy
   AD1CON3 = 0x1F05;            // AD1CON3:A/D制御レジスタ3
   // AN4 MUXAシーケンシャルスキャン
   AD1CSSL = 0x0010;            // AD1CSSL:A/Dスキャン制御レジスタ
   AD1CHS  = 0x0000;            // AD1CHS:A/Dチャネル制御レジスタ

   IEC0bits.AD1IE = 1;          // A/Dコンバータ割り込み許可

   while(1)
   {
      // ウェイト
      delay_ms(ADCValue);
      // LED点滅
      LATAbits.LATA0 = !LATAbits.LATA0;
   }

   return 0;
}

// AD変換モジュールからの割り込み
void __attribute__((interrupt,auto_psv)) _ADC1Interrupt(void)
{
   IFS0bits.AD1IF = 0;   
   ADCValue = ADC1BUF0;
}

// ウェイト関数
void delay_us(int usec)
{
   usec=(int)(CLOCK*usec)/10;
   while(usec)
   {
      asm("NOP");
      asm("NOP");
      asm("NOP");
      asm("NOP");
      asm("NOP");
      asm("NOP");
      usec--;
   }
}

void delay_ms(int msec)
{
   int i;
   for(i = 0; i < msec; i++)
   {
      delay_us(1000); 
   }
}

ウェイトの関数を少し、正確なものに変更して見ました。今回で、重要なところは、A/D制御レジスタ1〜3、A/Dスキャン制御レジスタ、A/Dチャネル制御レジスタの設定になります。

各レジスタの説明です。

イメージ 2


イメージ 3


イメージ 4


イメージ 5


イメージ 6


じっくり、設定値と見比べると何をしているのか分かると思いますが、最初のうちは、少々理解するのは難しいかもしれません。

こちらもタイマー同様、「adc.h」に定義関数があるようです。

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

開く トラックバック(0)


.


みんなの更新記事