忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2025/05/22

dsPIC33CH Curiosity Development Board(アナログコンパレータの使い方):

以前はAD変換の結果によってソフトウェアでLEDの点灯判断を行っていました。dsPIC33CHシリーズにはアナログコンパレータがマスターコアに1ch、スレーブコアに3ch搭載されております。本章ではその判断をアナログコンパレータで行い、ソフトウェアはその結果をGPIOに反映するだけのサンプルについて説明します。

ハードウェア構成

ポテンションのアナログ電圧をアナログコンパレータでDAC1Hの値と比較し、大小によってLEDを点灯させるようにします。またアナログコンパレータの結果をダイレクトにピンに出力することも可能で、リマッパブルピン50(CPUピン 29)に割り当てます。 アナログのコンパレータですので境目ではチャタリングが発生します。このアナログコンパレータにはフィルタ機能が搭載されていますので、その効果についても確認しています。 


  ソースコード

コンフィグレーション設定やクロック設定の関数に関して記述を省略していますが「dsPIC33CH Curiosity Development Board(準備編)」と同じです。

/*----------------------------------------------------------------------------------*/
/*【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;
        }
}

結果

全ての結果においてch1が29番端子、ch2が2番端子を観測しています。
   
CHAP243_FILTER_EN = 0 , CHAP243_FILTER_CLK = 7 , CHAP243_FILTER_HYS = 1の時の動作結果


CHAP243_FILTER_EN = 1 / CHAP243_FILTER_CLK = 7 / CHAP243_FILTER_HYS = 1の時の動作結果

  
CHAP243_FILTER_EN = 1 , CHAP243_FILTER_CLK = 2 , CHAP243_FILTER_HYS = 1の時の動作結果


CHAP243_FILTER_EN = 0 , CHAP243_FILTER_CLK = 7 , CHAP243_FILTER_HYS = 3の時の動作結果


PR

2020/08/16 dsPIC33C Comment(0)

プロフィール
 
HN:
ぴくお
性別:
非公開
 
 
カテゴリー
 
 
 
最新記事
 
(10/03)
(09/05)
(08/23)
(08/17)
(08/16)
 
 
RSS
 
 
 
リンク
 
 
 
免責事項
当サイトに掲載の回路図やプログラム等は動作する事を期待して掲載しておりますが、その動作の保証、性能の保証は致しません。 また掲載されているソフトウェアの使用により生じたいかなる損害に関しまして作者は一切責任を負いません。