目次 > 9章 PIC18F2550編 > 48MHzで動作させる

48MHzで動作させる

更新日2009.5.24

USB機能を搭載したPIC18は、最大48MHzで動作できます。
ここでは、PIC18F2550を48MHzで動作させる実験を行います。

実験回路

今回の実験回路です。2つのLEDをRA0/RA1に接続します。
レゾネータは12MHzを使います。

680Ωの抵抗2本は、300Ω〜1KΩ程度の範囲であれば何でもOKです。

ブレッドボードに組んだ状態。
回路図に無いもの(右下の6ピンヘッダ周り)が有りますが、これはICSP(In-Circuit Serial Programming)用の回路です。
秋月のPICライタを使うのであれば不要です。

プログラムの仕様

まずクロックは、PIC18の最高スピードである48MHzで動作させます。
そしてRA0/RA1のLEDを1秒間隔で交互に点滅させます。
1秒の時間はプログラムループより作成します。


48MHzでの動作方法

PIC18F2550のクロックは以下のようになっています。(データシートより)
少し複雑ですが、今回使う部分は丸付き数字のルートです。

図の丸付き数字に沿って動きを説明します。番号は丸付き数字に対応しています。

  1. OSC1/OSC2は、9ピン/10ピンに対応し、今回は12MHzのレゾネータ(セラロック)を接続します。
    これで、Primary Oscillatorの出力は12MHzになります。
  2. この12MHzをPLL Prescaler
  3. 1/3の4MHzに分周します。
    分周は、1,2,3,4,5,6,10,12から選択でき、CONFIG1LPLLDIVで設定します。
    出力が4MHzになるように、レゾネータとPLLDIVの組み合わせを決めます。
  4. 96MHz PLLは、4MHzを入力として24倍の96MHzを出力します。
  5. この96MHzを、PLL Postscalerにより1/2して48MHzを出力します。
    分周は、2,3,4,6から選択でき、CONFIG1LCPUDIVで設定します。
  6. 最終的に、48MHzをCPUのクロックとして提供します。

これらの設定は、CONFIGレジスタで行います。
今回のプログラムでの設定は以下のようになっています。

CONFIG PLLDIV = 3 ; 上の説明の2,3(1/3に分周)
CONFIG CPUDIV = OSC1_PLL2 ; 上の説明の5(96MHzを1/2に分周)
CONFIG FOSC = HSPLL_HS ; 図の丸付き数字のルートを使う指定

プログラム

今回のプログラムはこちらです。

1秒の時間はプログラムループによるウェイトルーチンで作っています。
クロックが48MHzですので、1命令実行時間は83.33nSです。この時間を元にループ回数を決めました。
ですのでLEDが1秒間隔で点滅すれば、48MHzで動作している証明になります。


補足

USB機能を内蔵したPIC18は、PORTCのRC3に相当するピンがUSB電圧用のピンになっておりRC3がありません。
また、RC4/5はデジタル出力として使えません。
従って、以下の理由が無ければUSB機能が無い機種を選択する方が良いと思います。

  • USB機能を使う
  • 48MHzで動作させる(40MHzではスピード不足の場合)
  • プログラムメモリが足りない
28ピンタイプであればPIC18F2320、40ピンタイプであればPIC18F4520など。