akira.keiのアイコン画像
akira.kei 2025年01月26日作成 (2025年02月01日更新) © GPL-3.0+
セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 165
akira.kei 2025年01月26日作成 (2025年02月01日更新) © GPL-3.0+ セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 165

8ピンPICのPIC16F18313を使う(その7)CWGでLチカ

<前の記事次の記事>

CWGで相補出力

PIC16F18313 のデータシートではCWGに関する説明が極めて(?)わかりにくい。最低限の設定内容を例として掲載してくれれば良いのに。そして前の記事とほぼ同じ中身でPWM5の設定までやった後、CWGの入力としてPWM5を指定してからCWGから相補波形を出力することになる。つまりPWM5の出力を反転させて出力するという感覚ではなく、入力を入れると自然に相補出力が出る、という感じになる。些細な差異ではあるけど。
キャプションを入力できます

オシレータ部

前記事とほぼ同じだが再掲しておく。CONFIG1の部分は以下のようにした。外部クロック無効、1MHz内蔵クロック、クロックモニタ(CLKOUT)有効、OSCCON有効化、FailSafe無効である。特にCSWENは必ずONだ(OSCCONを変更するので)。

#pragma config FEXTOSC = OFF // #pragma config RSTOSC = HFINT1 // #pragma config CLKOUTEN = ON // #pragma config CSWEN = ON // #pragma config FCMEN = OFF //

main関数の冒頭部でクロック設定を行う。HFFRQを設定しておかないとクロックが思わぬ値になったりする。NDIVを16にするとクロック周期は16μsだ。OSCTUNEで微調整してはあるが、LED点滅周期は1[Hz]をわずかに超える値になっている(上図参照)。

OSCFRQbits.HFFRQ=0b0000; // 1MHz OSCCON1bits.NDIV=0b0100; // 1MHz/16 OSCCON1bits.NOSC=0b110; // HFNT1 OSCTUNE=0b011111;

出力指定とPWM

出力ピンはPWMではなくCWGモジュールをPPSで指定する。

TRISAbits.TRISA2=0; RA2PPSbits.RA2PPS=0b01000; // CMG1A TRISAbits.TRISA5=0; RA5PPSbits.RA5PPS=0b01001; // CMG1B

PWM関係の設定は前の記事と一緒だ。ここでTimer2のプリスケーラ指定は2ビットしかなく、1,4,16,64と変化が大きい。PWMのデューティは16bit指定に見えるがPWM5DCLの下位6ビットは無効だ。

PR2=0xFF; T2CONbits.T2CKPS=0b11; // Prescaler (1/64) T2CONbits.TMR2ON=1; PWM5DCH=0b10000000; PWM5DCL=0b00000000; PWM5CONbits.PWM5EN=1;

CWGの設定

CWGの動作クロックはFosc、モジュールへの入力はPWM5を利用する。あとはMODE、POLAおよびPOLBを指定すると、あっさり相補信号が出力される。CLCで信号反転させる方法もちょっと考えたが、CWGを利用する方が簡単そうだし機能的には必要十分だ。

CWG1CLKCONbits.CS=0; // Fosc CWG1DATbits.DAT=0b0111; // PWM5 CWG1STRbits.STRA=1; CWG1STRbits.STRB=1; CWG1CON1bits.CWG1POLA=0; CWG1CON1bits.CWG1POLB=1; CWG1CON0bits.CWG1MODE=0b001; CWG1CON0bits.CWG1EN=1;
akira.keiのアイコン画像
機械系エンジニアだが電子工作を趣味としている。週末はひとりバーベキュー。
ログインしてコメントを投稿する