[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
高速なクロックを低速なクロックに変換する回路の事を分周回路と呼び、Dフリップフロップなどを用い構成する事が一般的です。 dsPICを用いると下図の様に分周や間引き回路が自由に生成できます。
ハードウェア構成
/*----------------------------------------------------------------------------------*/
/*【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){}
}
COMMENT
COMMENT FORM