[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
コンフィグレーション設定やクロック設定の関数に関して記述を省略していますが「dsPIC33CH Curiosity Development Board(準備編)」と同じです。
/*----------------------------------------------------------------------------------*/
/*【INC】インクルードファイル*/
/*----------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <libpic30.h>
#include "config.h"
/*----------------------------------------------------------------------------------*/
/*【CONST】定数定義*/
/*----------------------------------------------------------------------------------*/
#define ADSIZE 8u
/*----------------------------------------------------------------------------------*/
/*【VARI】変数定義*/
/*----------------------------------------------------------------------------------*/
struct
{
unsigned int u2_Sum;
unsigned int u2_Head;
unsigned int u2_Ave;
unsigned int u2_Buffer[ADSIZE];
}Pot;
unsigned int u2_SamplingTime;
/*----------------------------------------------------------------------------------*/
/* Main関数 */
/*----------------------------------------------------------------------------------*/
int main(int argc, char** argv)
{
/*----------------------------------------------------------------------------------*/
/* クロック初期化*/
/*----------------------------------------------------------------------------------*/
vds_Main_Init_Clock_Register(); /* クロック初期化 */
/*----------------------------------------------------------------------------------*/
/* GPIO初期化*/
/*----------------------------------------------------------------------------------*/
TRISEbits.TRISE0 = 0u; /* LED1ピンはデジタル出力ピン */
ANSELAbits.ANSELA0 = 1u; /* RA0ピンはアナログピン(ポテンション入力)*/
/*----------------------------------------------------------------------------------*/
/* AD初期化*/
/*----------------------------------------------------------------------------------*/
ADCON1L = 0x0000u;
ADCON1H = 0x0000u;
ADCON2L = 0x0000u;
ADCON2H = 0x0000u;
ADCON3L = 0x0000u;
ADCON3H = 0x0000u;
ADCON5H = 0x0000u;
/***** AD制御レジスタの設定 ******/
ADCON1Hbits.SHRRES = 3u; /* シェアADC分解能 (3 = 12bit) */
ADCON2Lbits.SHRADCS = 2u; /* シェアADCクロックディバイダ (2 = 4Clock) */
ADCON2Hbits.SHRSAMC = 4u; /* シェアADCサンプル時間 (3 = 4TAD) */
ADCON3Lbits.CNVCHSEL = 0u; /* ソフトウェアAD入力(0 =AN0入力)*/
ADCON3Hbits.CLKSEL = 2u; /* ADCクロックソース (2 = AFVCODIV) */
ADCON3Hbits.CLKDIV = 2u; /* ADCクロックディバイダ(2 = 3Clock)*/
ADCON5Hbits.WARMTIME = 15u; /* ウォームアップ時間(15 = 32768Clock) */
/***** ADの有効化 ******/
ADCON1Lbits.ADON = 1u; /* ADC全体のパワーON */
ADCON5Lbits.SHRPWR = 1u; /* シェアADCのパワーON */
while(ADCON5Lbits.SHRRDY == 0u){;}
ADCON3Hbits.SHREN = 1u; /* シェアADCの有効化 */
ADCON3Lbits.CNVCHSEL = 0u;
/*----------------------------------------------------------------------------------*/
/* メインルーチン*/
/*----------------------------------------------------------------------------------*/
while(1)
{
/*--------------------------------------------------------------------------*/
/* サンプリング*/
/*--------------------------------------------------------------------------*/
u2_SamplingTime = 30u;
while (ADCON3Lbits.CNVRTCH == 1u){;}
ADCON3Lbits.SHRSAMP = 1u;
while(u2_SamplingTime > 0){u2_SamplingTime --;}
ADCON3Lbits.SHRSAMP = 0u;
/*--------------------------------------------------------------------------*/
/* AD変換*/
/*--------------------------------------------------------------------------*/
ADCON3Lbits.CNVRTCH = 1u;
u2_SamplingTime = 10;
while(u2_SamplingTime > 0){u2_SamplingTime --;}
/*--------------------------------------------------------------------------*/
/* 移動平均*/
/*--------------------------------------------------------------------------*/
if ((ADSTATL & 0x0001u) == 0x0001u)
{
Pot.u2_Sum -= Pot.u2_Buffer[Pot.u2_Head];
Pot.u2_Buffer[Pot.u2_Head] = ADCBUF0;
Pot.u2_Sum += Pot.u2_Buffer[Pot.u2_Head];
Pot.u2_Head ++;
Pot.u2_Head &= 0x07;
Pot.u2_Ave = Pot.u2_Sum >> 3u;
}
/*--------------------------------------------------------------------------*/
/* LED点灯判定*/
/*--------------------------------------------------------------------------*/
if (Pot.u2_Ave > 2048u ){ PIN_MASTER_LED1 = 1u;}
else { PIN_MASTER_LED1 = 0u;}
}
}