掲示板


[記事リスト] [返信する] [新着記事] [過去ログ] [ワード検索] [留意事項] [管理用]

記事No 874
タイトル 2: PWMでDuty=0が実行されない
投稿日 : 2017/04/02(Sun) 10:28:40
投稿者 Qman
参照先

nさん、回答ありがとうございます。

>以下の仮説をご検証ください。
すみません。
検証する前に気が付いた事があり、質問した件は、プログラムを変更して全て解決しました。

> Qmanさん
>
> はじめましてnです。
>
> データシートを読んだだけなので実際には試していません。
> 以下の仮説をご検証ください。
>
> データが35のとき、カウンタ?は「0b00100000.11」でコンペアされ、
> PWM出力用のFFがリセットされます。
> このとき、カウンタの上位8bitはクリヤされますが、下位の2bitは、
> クロックOSCの信号を参照しているだけなので、変化しません。
>
> つまり、10ビットカウンタ?の値は「0b00000000.11」です。
> これを捕まえるためには、データも「0b00000000.11」と指定します。
>
> 0b00000000.00になるのは、0b11111111.11の次です。
> 0b00000000.11→0b00000001.00→0b00000001.01→…0b11111111.11
> このため、約1周期リセットが遅延します。
>
> void pwm_duty_set(signed long x)
> {
> if (x > 0){
> CCP1CON.dat = x & 0b00000011; // 下位2bit
> CCPR1L = x >> 2; // 上位8bit
> }else{
> CCP1CON.dat = CCP1CON.dat; // 下位2bit(保存)
> CCPR1L = 0; // 上位8bit
> }
> }
>

- 関連一覧ツリー (▼ をクリックするとツリーを一括表示します)


- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ
参照先
画像UP
暗証キー (英数字で8文字以内)
投稿キー (右画像の数字を入力) 投稿キー


- 投稿記事修正/削除フォーム -
処理 No 暗証キー

- WebForum -