忍者ブログ

[PR]

×

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

2025/05/22

dsPIC33CH Curiosity Development Board(SCCPモジュールの使い方)

高速なクロックを低速なクロックに変換する回路の事を分周回路と呼び、Dフリップフロップなどを用い構成する事が一般的です。 dsPICを用いると下図の様に分周や間引き回路が自由に生成できます。
  ハードウェア構成


今回はSCCP1,SCCP2を用い両方ともPWMモードとして構成します。まずSCCP2を分周元のクロックを生成しRP71を経由しPWM出力させます。そしてそのクロックをRP71経由でSCCP1のクロックとして構成させます。 リマッパブルピンの利点として、自らが出力した信号をリマッパブルピン経由で各モジュールの入力として使用できる点です。そのためマイコンのピンから一旦出力し、マイコン外で他のピンとハード的に結線し入力する必要が無くなります。 


 
 

  ソースコード

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


/*----------------------------------------------------------------------------------*/
/*【INC】インクルードファイル*/
/*----------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
/*----------------------------------------------------------------------------------*/
/*【CONST】定数定義*/
/*----------------------------------------------------------------------------------*/
#define FCY         90000000L           /*90MHz*/
#define ORG_CLOCK   100000L             /*クロック源周期*/
#define ORG_DUTY    (ORG_CLOCK >> 1u)   /*クロック源Duty*/
#define DIV_NUM     10                  /*間引き回数 Min 2*/
#define DIV_DUTY    1                   /*分周時Duty */
/*----------------------------------------------------------------------------------*/
/* Main関数 */
/*----------------------------------------------------------------------------------*/
int main(int argc, char** argv) 
{
    /*----------------------------------------------------------------------------------*/
    /* クロック初期化*/
    /*----------------------------------------------------------------------------------*/
        vds_Main_Init_Clock_Register();     /* クロック初期化 */
    /*----------------------------------------------------------------------------------*/
    /* リマッパブルピン初期化*/
    /*----------------------------------------------------------------------------------*/
        RPOR18bits.RP69R = 15u;       /* RGB LED RED [SCCP1] */
        RPOR19bits.RP71R = 16u;       /* RGB LED GREEN[SCCP2] */
        RPINR3bits.TCKI1R = 71;       /* SCCP1クロック */
    /*----------------------------------------------------------------------------------*/
    /* CCP1初期化*/
    /*----------------------------------------------------------------------------------*/
        CCP1CON1L = 0x0000u;
            CCP1CON1Lbits.MOD	= 5u;	/* CCPx モード選択ビット */
            CCP1CON1Lbits.CCSEL	= 0u;	/* キャプチャ / コンペア モード選択ビット */
            CCP1CON1Lbits.CLKSEL = 7u;
        CCP1CON1H = 0x0000u;
        CCP1CON2H = 0x0000u;
            CCP1CON2Hbits.OCAEN	= 1u;	/* 出力イネーブル / ステアリング制御ビット  */
        CCP1CON3H = 0x0000u;
        CCP1PRL	= DIV_NUM - 1;
        CCP1PRH	= 0x0000u;	
	CCP1RA	= 0x0000u;
        CCP1RB	= DIV_DUTY;
    /*----------------------------------------------------------------------------------*/
    /* CCP2初期化*/
    /*----------------------------------------------------------------------------------*/
        CCP2CON1L = 0x0000u;
            CCP2CON1Lbits.MOD	= 5u;	/* CCPx モード選択ビット */
            CCP2CON1Lbits.CCSEL	= 0u;	/* キャプチャ / コンペア モード選択ビット */
        CCP2CON1H = 0x0000u;
        CCP2CON2H = 0x0000u;
            CCP2CON2Hbits.OCAEN	= 1u;	/* 出力イネーブル / ステアリング制御ビット  */
        CCP2CON3H = 0x0000u;
        CCP2PRL	= FCY / ORG_CLOCK;
        CCP2PRH	= 0x0000u;	
	CCP2RA	= 0x0000u;
        CCP2RB	= CCP2PRL >> 1;     
    /*-----------------------------------------------------------------------------*/
    /* CCP1,2の有効化*/
    /*-----------------------------------------------------------------------------*/ 
        CCP1CON1Lbits.CCPON = 1u ;
        CCP2CON1Lbits.CCPON = 1u ;
        
    while(1){} 
}

結果

パルスを10分の1に間引きした出力波形です。

PR

2020/08/13 dsPIC33C Comment(0)

COMMENT

COMMENT FORM

NAME
MAIL
WEB
TITLE
COMMENT
PASSWORD

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