山本ワールド
PIC18F46K22でPWMによりLEDの明るさを調整する(アセンブラ)
概要
PIC18F46K22 のTimer2でCCP3を用いLEDの明るさを1024段階に調整する。
回路はPIC18F46K22でLEDを点滅(アセンブラ)のとおりである。
PWMの設定方法は、PIC18 PWMの設定例を参照されたい。
プログラムの説明
メインプログラムでCCP3とタイマー2を関連付けてPRレジスタに周期を設定してからタイマー設定(OpenTimer2)を行う。
デューティ比はSetDCPWM3サブルーチンで設定する。 デューティ比0~100%まで1024分の1の分解能で6.25m秒ごとに明るさを連続的に変化させる。
CCP3でPWMを用いているため、IOで直接LowやHiを設定せずにデューティ比を調整できる。
プリスケーラ 1:4
PR2 255
周期 16MHz/4/(1+256)=15.625KHz
デューティ比はSetDCPWM3サブルーチンで設定する。 デューティ比0~100%まで1024分の1の分解能で6.25m秒ごとに明るさを連続的に変化させる。
CCP3でPWMを用いているため、IOで直接LowやHiを設定せずにデューティ比を調整できる。
タイマー設定値
FOSC/4=16MHzプリスケーラ 1:4
PR2 255
周期 16MHz/4/(1+256)=15.625KHz
ソースファイル
以下のファイルで構成されているpwm0a.asm ・・・ メインプログラムと割り込み処理プログラム
ソースファイルのダウンロード pwm0a.zip
; timer2+CCP3(PWM)よるLEDの明るさ変更サンプル 2014/02/19 21:30
; 慈渓博瑞テクノロジー株式会社 PIC18F46K22 マイコンキット Ver2013.12.08用
; http://akizukidenshi.com/catalog/g/gK-07231/
; 水晶は16MHzに交換してPICを64MHzで駆動
; MPLAB X IDE v1.85 Microchip MPASM(v5.51)
; PicKit 3
#INCLUDE <p18f46k22.inc>
; 水晶発振(16MHz) クロック分周無 PLL有効(*4) プライマリクロック有効 ウォッチドッグタイマ無効 低電圧プログラム書き込みモード無効
CONFIG FOSC = HSHP,PLLCFG=ON,PRICLKEN=ON,WDTEN=OFF,LVP=OFF
bank0 UDATA ; 変数の定義 バンク0
Tcount2 RES 1
Tcount3 RES 1
arg16 RES 2
w16 RES 2
count16 RES 2
CODE
org 0
goto start
start
movlb d'15'
clrf CCPTMRS0,BANKED ; Timer2をソースとする
movlw 0ffh
movwf PR2,BANKED
movlw b'00001100' ; PWM
movwf CCP3CON,BANKED
movlw b'00000101' ; PS 1:4 Timer2 On
movwf T2CON,BANKED
movlw b'00011111' ; RB5をIO
movwf ANSELB,BANKED ; bank 0Fh
movlw b'00011111' ; RB5をIO
movwf TRISB
clrf count16
clrf count16+1
loop
movf count16,W
movwf arg16
movf count16+1,W
movwf arg16+1
call SetDCPWM3
call wait6_25ms
movlw 1
addwf count16
movlw 0
addwfc count16+1,F
goto loop
; arg16
SetDCPWM3
movf CCP3CON,W,BANKED
andlw b'11001111'
movwf CCP3CON,BANKED
movf arg16,W
andlw b'00000011'
swapf WREG
iorwf CCP3CON,BANKED
bcf STATUS,C
rrcf arg16+1
rrcf arg16
bcf STATUS,C
rrcf arg16+1
rrcf arg16
movf arg16,W
movwf CCPR3L,BANKED
return
wait6_25ms
movlw d'130' ; 48μs*130=6.25ms
movwf Tcount2
dloop2 ; t=(12+12*count3)/64MHz 48μs
movlw d'0'
movwf Tcount3
nop
dloop3
decfsz Tcount3
goto dloop3
decfsz Tcount2
goto dloop2
return
END
Copyright (C) 2012 山本ワールド All Rights Reserved.