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

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

<前の記事次の記事>

CCPのPWMではなく

PIC16F18313にはPWM5とPWM6の2つのモジュールがある。CCPにもPWMモードがあり、CCPは2つあるわけで全部で4つのPWMが使えるようだ。ここではPWM5を使ってLチカしてみる。PWM周期は下のように定義されていて、Foscが1MHzもあると1Hz周期まで落とせそうにないため、OSCCONで調整する。

PR2は最大の255、Timer2のプリスケーラを64に設定すると、1s周期にするためには15μs程度のToscが必要だ。オシレータのNDIVを16にするとちょうど良くなる。

オシレータ設定

CONFIG1の内容は以下にした。プログラム中でオシレータの設定変更をするのでCSWENはONだ。CLKOUTENをOFFにしたのは、後述のコンパレータを使うから。

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

main関数の冒頭でオシレータ関連の設定をしておく。実際の周期は1.048576sになるので、OSCTUNEで最大限までクロックを速く(周期を短く)する。

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

反転(相補)出力はどうするか

前の記事では相補出力はプログラムで書いていたが、今回はハードウェアで出力されてしまう。 PIC16F18313 には相補出力を出すCWGモジュールが用意されてはいるのだが、どうも使い方がわからない。CLCに読み込ませて反転出力できる方法もありそうだが、これもよくわからない。ここは使い慣れたコンパレータで反転させよう。

PWM5の出力はRA2に出した。反転出力をRA5に出すのでコンパレータへ入力するためにRA2をRA4に ピンを接続する。これまでRA4にはCLKOUTを出していたが、これはやめてコンパレータに回すことにする。コンパレータ入力はアナログ扱いなので、ANSELAレジスタを設定して入力端子にする。コンパレータの+側をVSSに接続してあるが、これは中間電位の方が動作が安定するかもしれない。コンパレータの負側にPWM出力が届くので、PWM-Highの時コンパレータLOW、PWM-LOWの時コンパレータがHighになるか微妙だ(結果的にうまくいった)。

TRISAbits.TRISA2=0; RA2PPSbits.RA2PPS=0b00010; // PWM5 TRISAbits.TRISA5=0; RA5PPSbits.RA5PPS=0b10110; // C1(Comparator) ANSELAbits.ANSA4=1; TRISAbits.TRISA4=1; //RA4 as AnalogIn CM1CON1bits.C1PCH=0b111; // Vss CM1CON1bits.C1NCH=0b001; // RA4(<-RA2)) CM1CON0bits.C1POL=0; CM1CON0bits.C1ON=1;

PWM5の設定

PWM5はTimer2を使うのでそれを設定する。PR2もプリスケーラも大きい方が周期が長いのでどちらも最大だ。デューティはH:0x80、L:0x00で50%になるようだ。

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

これでハードウェアだけで割り込み不要で約1HzでLEDを点滅できる。
キャプションを入力できます

akira.keiのアイコン画像
機械系エンジニアだが電子工作を趣味としている。週末はひとりバーベキュー。
ログインしてコメントを投稿する