PIC初心者用掲示板

PICの初心者用の質問箱です。
何でもお気軽にどうぞ!

■最新ツリー一覧

□このツリー付近のツリー一覧

★新規ツリー作成

◆ 5696. TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 08:33
    ┗ 5697. Re: TMR0、TMR1の組み合わせの不思議 [TMR] 2005/08/02 09:18
        ┗ 5698. 投稿者削除 [ ] 2005/08/02 09:32
        ┗ 5704. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 16:09
            ┗ 5706. Re: TMR0、TMR1の組み合わせの不思議 [CHOBI] 2005/08/02 17:00
                ┗ 5708. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 20:40
                ┗ 5711. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 22:55
    ┗ 5702. Re: TMR0、TMR1の組み合わせの不思議 [CHOBI] 2005/08/02 13:33
        ┗ 5705. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 16:14
            ┗ 5717. Re: TMR0、TMR1の組み合わせの不思議 [tmr] 2005/08/03 05:21


5696. TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 08:33
16F628Aには内部に3個のタイマーがあるので表題のようにTMR0とTMR1を使って周波数カウンタを作ってみました。TMR0はゲート時間の作成,TMR1で測定したい発信器の周波数を計数します。TMR0へは外部で作成した2mS間隔のパルスを入れます。こうすると250個で0.5秒,125で0.25秒のゲートを作成できます。一方,TMR1には測定したい周波数を2倍にして入れます。こうすれば0.5秒のゲートではカウント値そのものが周波数になりますし,0.25秒のゲートの時はカウント値をRLFで左シフトすれば精度は落ちますがやはり周波数がえられます。このような考えで1回目は0.5秒のゲート,2回目は0.25秒のゲート,という繰り返しで発信器の周波数をカウントしてみました。発信器は1.8MHzから3.2MHz位の周波数を発信します。そうすると不思議なことが起こりました。特定の周波数の間ではカウント数が出鱈目になるのです。私の場合は2760KHzから2775KHzの間はおかしくなりその他では正常なのです。試しに交互にゲート時間を切り換えず,各々の時間を2回続けてみました。あら不思議,先程のカウント値がおかしくなる周波数の範囲でも2回目は正常なカウントがされるのです。勿論,1回目は異常になります。オシロで見てみますと,TMR0は正確に各々でオーバーフローのフラグがたっているように思えます。
次に交互に行うTMR0のカウント値のセットを250と125のように大きな差では無く,250と248のような組み合わせにして実験しましたら正常なのです。すなわち,測定した周波数の差の比を取ると250と248の差の比に一致します。
そこで次にTMR0のカウント数は250に固定し,TMR0に入れるパルスを2mSと1mSを用意し,ハードで切り換えてみました。異常有りませんでした。
私のTMR0とTMR1の使い方に何か問題が有るのでしょうが,TMR0のオーバーフローまでのカウント値をセットした時だけ起こり,同じセット値でも2回目以降は起こらない理由がよく分かりません。どなたかアドバイスをよろしく。

5697. Re: TMR0、TMR1の組み合わせの不思議 [TMR] 2005/08/02 09:18
>そこで次にTMR0のカウント数は250に固定し,
どうやって固定しているのかな?
TMR0はプリセット値を保持するレジスタはないのでは?
したがってオーバーフローが起こるたびに毎回値を書き込んであげる必要がありますが・・・
ついでに、250カウントしたいということは256−250=16となるので16をカウンタに書き込んでいるということですよね?

5698. 投稿者削除 [ ] 2005/08/02 09:32

5702. Re: TMR0、TMR1の組み合わせの不思議 [CHOBI] 2005/08/02 13:33
推測ですが、下記の"TMR1の外部入力カウンタモード"
辺りがヒントになるのではないでしょうか?
http://www.picfun.com/moduleframe.html

5704. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 16:09
私の説明不足ですね,250カウントしたいのでセットする値は6です。そうするとオーバーフローした時は250カウントしているはずですから,それでTMR1のゲートを閉じます。125個カウントする時はセットする値は83Hです。何れでもオーバーフローすれば計測は終わりですから,次の計測開始の最初にセットしています。

5705. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 16:14
アドバイス有難うございました。今回のものはTMR1は外部クロックで同期は取っていません。一番不思議なのはおかしな現象を起こすのが特定な周波数範囲であること,同じ設定でも2回目は正常なことです。

5706. Re: TMR0、TMR1の組み合わせの不思議 [CHOBI] 2005/08/02 17:00
推測の話ばかりで申し訳ありませんが、
628Aの原発の周波数はどれ位なのでしょうか?
測定周波数(3MHz)に比べて十分高いのでしょうか?
TMR1のカウンタ入力の周波数がマイコンの実行サイクルより
高いと正確な測定ができませんが・・・
又は、特定の周波数ではうまくパルスをカウントできなく
なる事もあるような気がします。(エイリアス周波数)
PICでは少々きつい周波数領域なので
CPLDでカウンタでも作って見てはいかがでしょうか?

5708. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 20:40
アドバイス有難うございました。CPUクロックは12.8MHz,例の秋月で販売されているものです。確かPICでは1/4と聞いていますので実行周波数の方は問題ないと思っていました。CPLDの件ですが,この問題に関してはごまかしですが,1回測定値を出さないでパスすると見かけ上は問題ありませんし,TMR0のオーバーフローのカウント値を変えず,入力周波数をハードで変えてやればうまく動作しますのでそこまでは今は考えていません。

5711. Re: TMR0、TMR1の組み合わせの不思議 [Billy the Kid2005/08/02 22:55
試しにCPUクロックを20MHzにしてみました。状況は変わりません。ご指摘のTMR1の入力周波数に対してCPUクロックの件ですが,1回目はおかしく同じ設定の時,何故2回目以降は良いのか,理解に苦しみます。しばらく色々やって遊んでみます。何かヒントがありましたらまたよろしく。

5717. Re: TMR0、TMR1の組み合わせの不思議 [tmr] 2005/08/03 05:21
>アドバイス有難うございました。今回のものはTMR1は外部クロックで同期は取っていません。一番不思議なのはおかしな現象を起こすのが特定な周波数範囲であること,同じ設定でも2回目は正常なことです。

再現性があるのならソースをさらしたほうが早いと思いますが・・・