16F18325 には、DATA SIGNAL MODULATOR (DSM)があり、情報信号に搬送波を混合して変調出力を生成できます。DSM モジュールに供給する搬送波信号と情報信号は、デバイス内部の周辺モジュールの出力を使うか、入力ピンからの外部信号を選べます。
変調出力信号は、搬送波信号と情報信号の論理和(AND)で、MDOUT ピンから出力されます。
搬送波信号は、2 つの独立した信号である搬送波High (CARH) 信号と搬送波Low (CARL)信号から構成され、情報信号(MOD) が論理High 状態にある間、DSM は搬送波High 信号を出力し、情報信号(MOD) が論理Low 状態にある間、DSM は搬送波Low 信号を出力します。
DSMに関連するレジスター一覧を下表に示します。
*注意*
DSM出力とDSMpin入力は、PPS機能でピンを指定します。PPS指定例を示します。
PPS機能で、入出力pinを指定 | |
MDCIN1PPS = 0x00; | // 搬送波入力 1 を RA0 に指定 |
MDCIN2PPS = 0x01; | // 搬送波入力 2 を RA1 に指定 |
MDMINPPS = 0x02; | // 情報信号入力を RA2 に指定 |
RC3PPS = 31; | // DSM出力を RC3 に指定 |
レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
MDCON | MDEN | - | - | MDOPOL | MDOUT | - | - | MDBIT |
MDSRC | - | - | - | - | MDMS<3:0> | |||
MDCARH | - | MDCHPOL | MDCHSYNC | - | MDCH<3:0> | |||
MDCARL | - | MDCLPOL | MDCLSYNC | - | MDCL<3:0> |
レジスタ | BIT | 名 | 説明 | 1 | 0 |
---|---|---|---|---|---|
MDCON | 7 | MDEN | DSMモジュールのOn/Off | ON | OFF |
4 | MDOPOL | 出力極性 | 負論理 | 正論理 | |
3 | MDOUT | (Read Only)DSM出力 | 1 | 0 | |
0 | MDBIT | MDBIT 情報信号ソフトウエア入力 | 1 | 0 | |
MDSRC | <3:0> | MDMS | 情報信号選択 表1参照 | ||
MDCARH | 6 | MDCHPOL | 搬送波Highの極性 | 反転する | 反転せず |
5 | MDCHSYNC | 搬送波同期 | 同期 | 同期せず | |
<3:0> | MDCH | 搬送波High入力選択 表2参照 | |||
MDCARL | 6 | MDCLPOL | 搬送波Lowの極性 | 反転する | 反転せず |
5 | MDCLSYNC | 搬送波同期 | 同期 | 同期せず | |
<3:0> | MDCL | 搬送波Low入力選択 表2参照 |
表1 情報信号入力選択 MDMS<3:0> | |
---|---|
1111 = CLC4 出力 | 0111 = C2 出力 |
1110 = CLC3 出力 | 0110 = C1 出力 |
1101 = CLC2 出力 | 0101 = PWM6 出力 |
1100 = CLC1 出力 | 0100 = PWM5 出力 |
1011 = NCO1 出力 | 0011 = CCP2 PWM 出力 |
1010 = EUSART1 TX | 0010 = CCP1 PWM 出力 |
1001 = MSSP2 SDO2 | 0001 = MDMINPPS |
1000 = MSSP1 SDO1 | 0000 = MDBIT bit |
表2 搬送波選択 MDCH<3:0> MDCL<3:0> | |
---|---|
1111 = CLC4 出力 | 0111 = PWM6 出力 |
1110 = CLC3 出力 | 0110 = PWM5 出力 |
1101 = CLC2 出力 | 0101 = CCP2 PWM 出力 |
1100 = CLC1 出力 | 0100 = CCP1 PWM 出力 |
1011 = HFINTOSC | 0011 = CLKR |
1010 = FOSC | 0010 = MDCIN2PPS |
1001 = Reserved | 0001 = MDCIN1PPS |
1000 = NCO1 出力 | 0000 = VSS |
PWM5で発生させた搬送波信号とNCOで発生させた情報信号を混合します。情報信号は約1Hz、搬送波信号は約15Hzで、参考のためにRC0とRC1に直接出力します。 DSMは情報信号が「1」の時だけ搬送波を出力する『On/Off』モードでRC2に出力されています。
<回路図>
<プログラム>
/************************************* * File: DSM sample * System ClockはConfigで内部1MHzに設定 * PWM5搬送波信号とNCO情報信号を混合 * 搬送波信号は約15Hz、情報信号は約1H * RC1とRC0に直接出力。 * DSMは情報信号で搬送波信号Hを『On/Off』してRC2に出力 * PIC16F18325 * Created on Oct 2, 2017, 2:37 PM **************************************/ #include <xc.h> #define _XTAL_FREQ 1000000 // delay_ms(x) のための定義 #pragma config FEXTOSC = OFF,RSTOSC = HFINT1 // HFINTOSC (1MHz) #pragma config CLKOUTEN = OFF,CSWEN = OFF,FCMEN = OFF #pragma config MCLRE = OFF,PWRTE = OFF,WDTE = OFF,LPBOREN = OFF #pragma config BOREN = OFF,BORV = LOW,PPS1WAY = OFF,STVREN = ON #pragma config DEBUG = OFF #pragma config WRT = OFF,LVP = OFF,CP = OFF,CPD = OFF void main(void) { LATC = 0; TRISC = 0b110000; // RC0を出力に設定 TRISA = 0b111111; // PortAを入力に設定 ANSELA = 0; // 全てのpinをデジタルに設定 ANSELC = 0; // NCO 設定 ************************************************ // 1MHz*2/2^20/2 = 0.95Hz // ********************************************************* NCO1INCU = 0; // NCO1INCU に値セット NCO1INCH = 0; // NCO1INCH に値セット NCO1INCL = 2; // NCO1INCL を最後にセット NCO1CLK = 0b00000001; // Fosc (1 MHz)がクロック NCO1CON = 0b10000000; // 正論理、反転モード RC0PPS = 29; // RC0にNCO出力 // PWM 設定 ************************************************ // 1MHz/4/64/256 = 15Hz // ********************************************************* T2CON = 0b00000111; // Timer 2 PS1/64設定 PR2 = 0xFF; // Timer2 Period Register設定 PWM5CON= 0b11000000; // 正論理出力 PWM5DCH= 0x80; // デュティサイクルを設定 RC1PPS = 2; // RC1にPWM5出力 // DSM 設定 ************************************************ // PWM5搬送波信号とNCO情報信号を混合 // ********************************************************* MDCON = 0x80; // DSM On MDSRC = 0x0B; // 情報信号 正論理非同期 NOC1 MDCARH = 0x06; // 搬送波H 正論理非同期 PWM5 MDCARL = 0; // 搬送波L VSS RC3PPS = 31; // RC3にDSM出力 while(1); }