ブログパーツ レンタルCGI
TAKAさんの毎日が発見・ブログ
アマチュア無線の機器製作を中心にした日常の活動記録です (by Taka JA2GRC、このブログはFC2_BLOGを使わせていただいてます。)
≪07月   2017年08月   09月≫
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  
PIC Gate Pulse Gen
 こちらで、PICとジャンクの7seg LCDを使ったユニバーサルカウンタ(百均歩数計対抗!)がほぼ動き始めました。

 で、早速、これに見合ったようなコンパクトなゲートパルス発生器が「欲しいねぇ」となりました。 もう、既にプログラム容量は一杯一杯で、追加は無理だし、こういったものは、それぞれ単機能のコンパクトなものが良いだろうとの事で、別に、ひとまとまりのものを作ることにしました。



PIC Gate Pulse Gen の関連記事は以下にもありますのでご覧ください。
PMT proj : 関連する PMT proj の記事一覧です。
7segLCD + PIC : 関連する 7segLCD + PIC (ユニバーサルカウンタ) の記事一覧です。

PIC Gate Pulse Gen : 初めに。 32ビットカウンタの動作確認 (この記事)。
PIC Gate Pulse Gen その2: バラツキ、内部RC発振と外部セラミック発振の違い。
PIC Gate Pulse Gen その3: 学習モード(お手本パルスの測定)。
PIC Gate Pulse Gen その4: システムクロックの自動切り替え。
PIC Gate Pulse Gen その5: 全体をまとめてみる。
PIC Gate Pulse Gen その6: 細かな調製、機能の追加。
PIC Gate Pulse Gen その7: 学習時の分解能の確認。
PIC Gate Pulse Gen その8: 学習値の補正を入れる。
PIC Gate Pulse Gen その9: プリスケーラを変えてみる。
PIC Gate Pulse Gen その10: システムクロックを変えてみる。
PIC Gate Pulse Gen その11: 50mSパルス出力に変更。10倍モード追加。アナログ出力再実装。
PIC Gate Pulse Gen その12: 細かな要求仕様の確認。最終まとめ。
PIC Gate Pulse Gen その13: メモリ使用量削減。実使用での要望を反映。


 まずは、PICで思い通りの周期のパルスを出力するのはどうするのだろうと言うことで、小手調べをしてみました。 ユニバーサルカウンタで使ったPIC16F1823には3つのカウンタがついています。 2つは8ビット幅で、もう一つは16ビット幅の設定が出来るようです。 それぞれ、想定する機能が有るみたいで、プリスケーラやポストスケーラ、あるいは、カウント比較機能がついたものなどが有ります。

 ユニバーサルカウンタが200kHz程度ですので、5μS以上の精度は欲しいですし、周期の長い方は100分ほどが欲しいので、32ビット程度のタイマーが必要になりそうです。 16ビットの内蔵タイマーを使ってもソフトカウンタで拡張しなければ出来ないみたいです。 それで、まずは、ハード16ビットタイマとソフト16ビットタイマをつなげて、32ビットタイマを動作させることから始めてみました。

 ところが、これがとんだところで嵌ってしまい、結構、手こずってしまいました。 今使おうとしているPICの場合、演算ベースが8ビットなので、32ビット整数演算をやろうとすると、べらぼうなメモリを消費してしまうみたいなんです。 これは、前のユニバーサルカウンタの時に経験した事で、不要なところはなるべく16ビットや8ビットの演算に押さえる様にコーディングするのが良いみたいです。 それで、自然とそのようなコーディングをしてしまうわけですが、今回は、それで、嵌ってしまいました。 複数の型どうしの演算をやる時に、特段の設定をしていないと、コンパイラが一定のルールで「型合わせ」をやってくれるわけですが、それがまずかったみたいで、これを見つけるのに、ずいぶん無駄な時間を費やしました。 なんせ、演算式を見る限りは間違っていないように見えるわけですから、始末が悪いです。 PIC用のデバッグ機器もいくつかあるようですが、まだ使ったことはありませんので、使い方を覚えておく必要が有りますね。 とりあえずは、7seg LCD を16進表示にして、これに、適当なポイントのデータを表示させてデバッグしていく内に、やっと「型合わせ」の問題だと言うことが分かりました。

120320_PIC_Gate_P_Gen_01.jpg

 で、やっと、ハードタイマとソフトタイマを連結した32ビットタイマが動き始めました。 FOSC=32MHzで、プリスケーラを1/4、カウンタを10とするとこんな感じです。 10μSのパルス幅であるところが、18μS程度になっていますね。 パルス幅の半分ずつで処理していますので、割り込み処理などで4μS程掛かっている勘定になります。

120320_PIC_Gate_P_Gen_02.jpg

 周期を1mS程度にのばすと、割り込み処理のずれは目立たなくなりますが、後々問題になるかもしれないので、このずれは補正しておきたいですね。

120320_PIC_Gate_P_Gen_03.jpg

 タイマに設定する値を4μS相当だけ小さい値を設定するようにしてみますと、これぐらいまでは合わせ込むことが出来ました。 僅かにずれていますが、これ以上は合わせ込むことは出来ません。 プリスケーラの値を小さくすればもう少し正確に合わせることが出来ると思います。 このテストはプリスケーラを1/4でやりましたので、1/1に設定すれば、あと1/4程度までは正確に合わせ込むことが出来るはずです。 これは、長い方の周期の関係もありますので、もう少し検討してから決めることにします。

120320_PIC_Gate_P_Gen_04.jpg

 通常使う、1秒程度では全然目立ちませんが。 まあ、もちろん、この波形では見えませんけどね。

120320_PIC_Gate_P_Gen_05.jpg

 で、試しに、ユニバーサルカウンタに繋いでみました。 ゲート信号として加えてみますが、先ほどの想定ばらつきよりも余分に表示がばらつくことが有ります。 まだ、何か、おかしなところが有るのでしょうかね? 「型合わせ」で手間取ったので、とりあえず、ここで、一息つくことにして、ばらつきの原因追及は、じっくりやることにします。

120320_PIC_Gate_P_Gen_06.jpg
コメント
この記事へのコメント
URL :
コメント :
パスワード :
管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
Template designed by アクセラと+αな生活

Powered by まとめ .