PIC三昧(20) CLKREF、参照クロックの外部出力、PIC16F18855

Joseph Halfmoon

PIC16マイコン搭載の周辺回路を脈絡もなく思いつくまま気の向くままの順番で練習してきました。ここで「なんの一番基本的なモジュール」を練習してないことに気づきました。内部のクロック信号を外部にお知らせできるCLKREFモジュールです。クロックを出力するだけ、地味だあ~。でも単純だけれどもよく考えられてる?

※『PIC三昧』PIC関係の記事総目次はこちら

※作業はMicroChip社の統合開発環境 MPLAB X IDEと、その上で走るコンフィギュレーションツールMCC Classic を使用して行っています。ターゲット・マイコンはPIC16F18855です。

REFERENCE CLOCK OUTPUT MODULE

このモジュールはその名のとおり、参照クロックを外部出力するためのモジュールです。外部出力の動機としては、外部回路で使うというのが一番でしょうが、今回のように内部のクロックを確認(その精度とか)したいということもあるかもしれません。なにせPIC16マイコンは内蔵発振器も多数。どれをどう使うのかは設計者次第。以下このモジュールをCLKREFと略称いたします。

MCC Classicでの設定

いつものようにMCC Classicで設定していきます。CLKREFモジュールを使用する場合、そのままのお名前のモジュール1個をリソースに追加すればOKです。前回のように「そのお名前のモジュールが無い」とか「合計2モジュール必要」とか難しいことはありません。CLKREF_Resources

どのような「クロック」を外部出力可能かというと、以下のようなプルダウンメニューから選択可能です。合計10種類とな。CLKREFsetting

FOSCが基本のシステムクロックなので、今回はこれを出力してみようと思います。それ以外に内蔵のオシレータ3種類の出力

    1. HFINTOSC
    2. MFINTOSC(500kHz側出力のみ、31.25kHzは無みたい)
    3. LFINTOSC

他にもNumerically Controlled Oscillatorモジュールの出力、セコンダリ外部オシレータオシレータ、Configuralbe Logic Cellが備える4回路の出力のどれか、など各種選択可能です。いろいろできそうね。

なお今回のシステム・クロックの設定はデフォのままです。こんな感じ。
INT_OSCsetting

今回は緑のラインマーカを引いてある1MHzのクロックをCLKREFモジュールで以下の加工をして主力してみようと。

    • 2分周
    • デューティサイクル25%

上記の設定により、FOSCの半分の周波数だけれども、正のパルス1発はFOSCのパルスくりそつな波形が出力される予定。何気に便利。

PINマネージャの設定は以下のとおり。CLKREF_pinMGRsetting

Port Aの0番は吉例Lチカのための出力設定です。CLKREFはPortBの0番に割り当ててます。

念のための「吉例Lチカ」コード

CLKREFの設定は、MCCが自動生成してくれるソースの中で全て行われているので、ユーザーソフトウエアで何かやることはありません。手持無沙汰なのでソフトでLチカするのみ。main()関数のループのところはこんな感じ。

while (1)
{
    RA0 = 1;
    __delay_ms(500);
    RA0 = 0;
    __delay_ms(500);
}
実機動作結果

配線を引き出して小さなブレッドボード上で抵抗を駆動するようにしてみました。そこの信号をオシロで観察しようという趣向です。CLKREF_DUT

観察した波形が以下に。CLKREF_waveform

1MHzを2分周して500kHz、4分の1デューティサイクルね。ほぼほぼ予定通りの波形かと。

PIC三昧(19) TEMP、チップの温度をADCで測定、PIC16F18855 へ戻る

PIC三昧(21) TIMER0、外部クロックをカウント、PIC16F18855 へ進む