[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
以前はAD変換の結果によってソフトウェアでLEDの点灯判断を行っていました。dsPIC33CHシリーズにはアナログコンパレータがマスターコアに1ch、スレーブコアに3ch搭載されております。本章ではその判断をアナログコンパレータで行い、ソフトウェアはその結果をGPIOに反映するだけのサンプルについて説明します。
/*----------------------------------------------------------------------------------*/
/*【INC】インクルードファイル*/
/*----------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
/*----------------------------------------------------------------------------------*/
/*【CONST】定数定義*/
/*----------------------------------------------------------------------------------*/
#define CHAP243_FILTER_EN 0
#define CHAP243_FILTER_CLK 2
#define CHAP243_FILTER_HYS 3
/*----------------------------------------------------------------------------------*/
/*【VARI】変数定義*/
/*----------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------*/
/* Main関数 */
/*----------------------------------------------------------------------------------*/
int main(int argc, char** argv)
{
/*-----------------------------------------------------------------------------*/
/* クロック初期化*/
/*-----------------------------------------------------------------------------*/
vds_Main_Init_Clock_Register(); /* クロック初期化 */
/*-----------------------------------------------------------------------------*/
/* GPIO初期化*/
/*-----------------------------------------------------------------------------*/
TRISEbits.TRISE0 = 0u; /* LED1ピンはデジタル出力ピン */
ANSELAbits.ANSELA0 = 1u; /* RA0ピンはアナログピン(ポテンション入力)*/
/*-----------------------------------------------------------------------------*/
/* リマッパブルピン初期化*/
/*-----------------------------------------------------------------------------*/
RPOR9bits.RP50R = 0x17u; /* ダミー出力 [CMP1] */
/*-----------------------------------------------------------------------------*/
/* CMP初期化*/
/*-----------------------------------------------------------------------------*/
DACCTRL1L = 0x0000u;
DACCTRL1Lbits.CLKSEL = 0u; /* DACクロック源( 0 = AFVCO/2 = 500MHz) */
DACCTRL1Lbits.CLKDIV = 0u; /* DACクロックディバイダ (0 = 1/1) */
DACCTRL1Lbits.FCLKDIV =CHAP243_FILTER_CLK; /*CmpFilterClockDivide(7 = 1/8) */
DACCTRL1Lbits.DACON = 1u; /* モジュール有効化(0 = 無効,1 = 有効) */
DACCTRL2H = 0x001Au; /* 移行開始からの時間 */
DACCTRL2L = 0x0055u; /* 遷移モードの継続時間 */
DAC1CONH = 0x0000u;
DAC1CONL = 0x0000u;
DAC1CONLbits.INSEL = 0u; /*コンパレータ入力ソース (0 = CMPxA input pin) */
DAC1CONLbits.HYSSEL = CHAP243_FILTER_HYS;/*コンパレータHys(1 = 15mV) */
DAC1CONLbits.DACOEN = 0u; /* DAC外部出力 (0 = 無効,1 = 有効) */
DAC1CONLbits.FLTREN = CHAP243_FILTER_EN; /* コンパレータフィルタ*/
DAC1DATH = 0x07FFu; /* コンパレータ比較値 */
DAC1DATL = 0x0000u;
/*-----------------------------------------------------------------------------*/
/*【****】DAC1の有効化*/
/*-----------------------------------------------------------------------------*/
DAC1CONLbits.DACEN = 1u; /* DAC1の有効化 */
/*-----------------------------------------------------------------------------*/
/*【****】メインルーチン*/
/*-----------------------------------------------------------------------------*/
while(1)
{
/*---------------------------------------------------------------------*/
/*【****】LED点灯*/
/*---------------------------------------------------------------------*/
LATEbits.LATE0 = DAC1CONLbits.CMPSTAT;
}
}