内蔵クロックの使い方


【内蔵クロック】

PIC16F818/819には8MHz(INTOSC)を源振とする内蔵クロックが追加されました。
さらにこれに分周器が追加されて7種類のクロック周波数を取り出せます。
これに従来からある31kHzの内蔵RC発振(INTRC)を加えて8種類の周波数から
命令で1つを選択して使います。
命令で切替えて使うことができるようになっていますので、プログラム実行中にも
任意のタイミングでクロック周波数を切替えることができます。


【クロックの供給】

PIC16F818/819のクロック供給部のブロック構成は下図のようになっています。
この中でINTRCに相当する31kHzの内部RC発振の信号は、システムクロック
の他に、ウォッチドッグタイマやパワーアップタイマにも使われます。




この図から解るように、システムクロックとして下記のように選択することができます。

選択指定方法 供給クロック
コンフィギュレーション
ビット指定
OSCCONレジスタ
LP、XT、HSモード -- OSC1,OSC2による外部発振クロック
EXTCLKモード(EC) -- 外付け発振器によるクロック
INTRCモード IRCF2:0ビット指定 8MHz、4MHz、2MHz、1MHz、500kHz
250kHz、125kHz、31kHzのいずれか
EXTRC(RC) -- 外付けRCによる外部発振クロック



【クロックの切替え方】

コンフィギュレーションでINTRCモードの内蔵クロックを指定した場合には、
OSCCONレジスタでクロック周波数を切替えることができます。
まず、OSCCONレジスタは下図のようになっています。





このOSCCONレジスタを使って下記の手順で切替えられます。

(1) コンフィギュレーションでINTRCを指定しておく
(2) 任意の時点でOSCCONを設定変更する。
  この時点から、
    次のクロックの立下りでまずCLKO出力がLowになる
    内部で8クロック待つ
    この時点で新しいクロックに切替りCLKOが新しい周波数に変わる。

    ただし、INTRC(31kHz)から他の周波数への切替えの場合には、ここから
    さらに1msec待ってから切替る。
    これはINTOSCの発振が安定するまで待つためです。この間OSCCON
    レジスタのIOFSが「0」になっています。切替った時点でIOFSビットが「1」
    になります。

(注意) 電源電圧が2.5V以下の時には4MHz以上の周波数では動作しません
      ので、切替えるときに注意が必要です。


【クロック切替えプログラム例】

内部クロックモードで、クロックを命令で切替えた例題です。
下記のリストでは、リセット時は8MHzで動作し、ポートBに接続された8個のLED
が0.1秒間隔で点滅します。
ポートAの2ビット目にあるスイッチを押すと、押した都度、OSCCONレジスタの
クロック選択が−1されて遅くなり、31kHzの次に押すと、また8MHzに戻るという
動作をします。
クロックの切替え制御は、CHGCLKというサブルーチン内で実行しています。
SPEEDという変数を7から0までサイクリックに変更しています。この値をSWAP
してからOSCCONレジスタに設定しています。





 上記の完全なソースファイルは下記でダウンロードできます。

  ★ クロック切替えの例題 (sample1.asm)





  目次ページに戻る