PICのお勉強(11) LEDのPWM制御
PWM制御(Pulse Width Modulation)でLEDをじわ~っと点灯させてみました。
ソースはこれ → lesson11.asm
まあこのサイトのプログラムをマネしただけですが,メインのプログラムはこうなっています。
;====================================================
MAIN
INCF COUNT,F ; COUNT+1 → COUNT
MOVF WIDTH,W ; WIDTH → Wレジスタ
SUBWF COUNT,W ; COUNT-WIDTHの引き算。
BTFSC STATUS,C ;STATUSレジスタのCビットが0(つまり
;COUNT<WIDTH)なら次行をスキップ
BCF PORTA,2 ; RB2のLEDを消灯
CALL TIMELOOP1
INCF CYCLE,F ; CYCLE+1 → CYCLE
MOVLW 50
SUBWF CYCLE,W ; CYCLE-50の引き算。
BTFSS STATUS,C ;STATUSレジスタのCビットが1(つまりCYCLE>=50)
;なら次行をスキップ
GOTO MAIN
;1サイクル終わった時の処理
CLRF CYCLE
CLRF COUNT
BSF PORTA,2 ; RB2のLEDを点灯
INCF WIDTH,F ; WIDTHを+1 → WIDTH
MOVLW 50
SUBWF WIDTH,W ; WIDTH-50の引き算。
BTFSC STATUS,C ;STATUSレジスタのCビットが0(つまりWIDTH<50)なら
:次行をスキップ
CLRF WIDTH
GOTO MAIN
;=====================================================
3つのカウンタ,COUNT(LED点灯後の時間を測る),WIDTH(点灯継続時間),CYCLE(1サイクルの時間)を用意し,WIDTHを徐々に増やしながらLEDを点滅させます。これでじわ~っと明るさが変化するわけです。
| 固定リンク | 0
「PICマイコン」カテゴリの記事
- ZK-80で足し算(2020.07.23)
- TK-80互換機 ZK-80のキット(2020.07.21)
- PICのお勉強(37) C言語編 12F683でA/D変換(2015.06.02)
- UVレジンでLEDイルミネーション (2)(2015.05.15)
- PICのお勉強(35) C言語編 PWMでサーボモータを動かす(2014.10.05)
コメント