Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC18F14K50 ADC --> PWM --> LED

PIC18F14K50 で PWM の覚書き

データ・シートに、
Period = 4 * TOSC * (PR2 + 1) * (TMR2 Prescale Value)
Pulse Width = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 Prescale Value)
とあるので、
Duty Cycle = Pulse Width / Period = [ CCPR1L<7:0>:CCP1CON<5:4> ] / [ 4 * (PR2 + 1) ]
となる。
一方で、PR2を求める計算式は、
PR2 = ( 8MHz / ( PWM Freq. * 4 * TMR2 Prescale Value )) – 1
となって、PWM Freq. = 1kHz という条件では、PR2 = 124 とするのが適当となる。
以上から、
Duty Cycle = [ CCPR1L<7:0>:CCP1CON<5:4> ] / 500
なので、PR2が決まるとCCPR1L<7:0>:CCP1CON<5:4>の値は0~500までの値を取るように設定することになる。
CCP1CON<5:4>は設定が面倒なので0を入れておくとするとCCPR1L<7:0>には0~125までの値を入れることになる。
つまり、00000000|00から1111101|00ということ。
このCCPR1Lの値に10ビットのAD変換値を用いるとすると、AD変換値は0~1023の値の範囲なので、8で割って0~128の範囲にしてからCCPR1Lに入れる必要がある。
ADCのリファレンス電圧が3.3Vの場合に、約0.25VごとにADCによる値でPWMのデューティー比を決めてLEDを光らせてみた連続写真。
DSC_0022

このエントリーをはてなブックマークに追加

Posted under: PIC18F14K50


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.