• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PIC、TMR2とPWMについて。(再投稿))

PIC、TMR2とPWMについての質問

このQ&Aのポイント
  • PWMでTMR2の10ビットの理屈がわからない。
  • TMR2の下位2ビットはどのレジスタなのか、具体的に教えてほしい。
  • プリスケーラを設定しない場合、TMR2は0から1023までカウントされるのか。

質問者が選んだベストアンサー

  • ベストアンサー
  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.4

No2です。すみません、何を寝ぼけていたのか、思い切り間違ったことを書いていました。 > プリスケーラはTMR2の上側についているものとみなせます。 > プリスケーラ4なら、プリスケーラの2ビットとTMR2の8ビットで10ビット。プリスケーラ16ならプリスケーラの4ビットとTMR2から上位6ビットで10ビットになります。 この部分無視してください。 プリスケーラも下側に付きます。No3の方の考え方が正しいです。

midugane
質問者

お礼

SortaNerdさん 1~5までの疑問に具体的にお答えいただき感謝します。 オシロで計測すると一応計算通りには動いていたのですが 内部で行われている処理がどうなっているのかが理解できず凄く気持ち悪くて先に進めませんでした。 趣味でやっていることなのでとりあえずは動けばいいのですがきちんと理解したかったので本当に助かりました。 僕が勘違いしていた部分も正していただき大変感謝しています。 あとの処理は大したことないのでやっと先に進めます。 本当に感謝いたします。ありがとうございました。

その他の回答 (3)

  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.3

PIC12F1822でPWM周期実測してみました、(同じF1チップの為レジスタに互換あり) FOSC=4MHz PR2=0xFF 1:1 の時 計算 3906.25Hz 実測 3905Hz FOSC=4MHz PR2=0xFF 1:4 の時 計算 976.56Hz 実測 975Hz FOSC=4MHz PR2=0xFF 1:16 の時 計算 244.14Hz 実測 244Hz FOSC=4MHz PR2=0xFF 1:64 の時 計算 61.04Hz 実測 61Hz になりました、ほぼ計算どうりです TMR2の連結される下位2ビットは、FOSCで駆動される8ビットカウンタがあり、 1:1 ビット1,2がTMR2に連結 1:4 ビット3,4がTMR2に連結 1:16 ビット5,6がTMR2に連結 1:64 ビット7,8がTMR2に連結 と考えられます またPWM周期計算に(PR2+1)が用いられており、2ビットのプリスケーラが11->00に変わる時にTMR2とPR2の一致チェックが行われると思われます 私の推測の部分もあるので、他の回答者の反論をお待ちしております。

midugane
質問者

お礼

koujikuuさん 各プリスケーラ値での実測までしてくださりありがとうございます。 データシートを見てもネットを調べても下位2ビットというのがどうしても理解できなくて 8ビットと10ビットをどうやって比較してるんだろうと、ここ2週間くらい悩んでいましたが やっと理解できました。 お二方の回答にBAをつけたいのですがシステム上できないので回答順でBAをつける事をお許しください。 助かりました。本当にありがとうございました。

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.2

というわけで回答します。 まず、PICは4クロックで1命令を実行しますが、PWMは1クロック単位で動きます。 ここを誤解されているのではないかと思います。 1. 「TMR2の下位2ビット」という言い方は正確ではありません。 TMR2はあくまで8ビットのレジスタです。 「謎の下位2ビット」はどこにも割り当てられていません。クロックに連動する内部のカウンタです。 2. PSとはプリスケーラの事に見えますが、等倍の時PSが付加されるというのは何か間違っていませんか? とりあえず、TMR2はあくまで8ビットのレジスタなので255までしかカウントしません。 3. プリスケーラを使う場合、下位2ビットは使用されません。 プリスケーラはTMR2の上側についているものとみなせます。 プリスケーラ4なら、プリスケーラの2ビットとTMR2の8ビットで10ビット。プリスケーラ16ならプリスケーラの4ビットとTMR2から上位6ビットで10ビットになります。 1024階調(0-1023) * 4tosc * プリスケール値 ではなく 1024階調(0-1023) * tosc * プリスケール値 です。 あとtocsでなくtoscです。oscillatorです。 4. PRxは8ビットしかないので、下位2ビットは00とみなされます。 DCxB1,DCxB0とCCPRxLで設定するのはPWMのパルス幅であって、PRxで設定するPWM周期とは無関係です。 PWMの周期は4刻みの256段階しか設定できません。 5. 下位2ビットは1命令の間に4進んで1周するのですから、クリアしようにもできません。もしくは常にクリアされていると見てもよいです。

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.1

回答が付かなかったと言われますが質問をしてからせいぜい1日程度しか経っていなかったように見受けられますが。 回答しますが考えてるうちにまた消されても嫌なのでとりあえず宣言だけ。

midugane
質問者

お礼

SortaNerdさん 一人で考え込んでいたのでカテ違いで見られてないんじゃないかと焦ってしまっていました。 考えてくださってる方がいるなんて思いもしませんでした。ありがとうございます。 ご回答いただけるまで僕もデータシートやネットを改めて見直してみます。 よろしくお願いしますm(_)m

関連するQ&A