ちょっとTea Time!? PICのオーバクロックは可能か? 2019.10.19

PICマイコンを使い出して8年ちょっとになりました。
使いはじめのPICはPIC16F819というベーシックなもので、

 PIC16F819 ROM:2Kワード、RAM:256バイト、クロック:外部20MHz、内部8MHz

というもので、プログラムメモリも少ないですがこれでも便利でした。すくなくとも、最初につかった電子ボリュームなどの
アプリケーションなら、これで十分です。
 最近ではLCDもつかうようになって、文字表示をつかいだすと結構な容量を表示だけにとられてしまいます。
そのため、最近で主流でつかっているのがPIC18F26K20というものです。これは、

 PIC18F26K20 ROM:64kバイト、RAM:3936バイト、クロック:最大64MHz(内部16MHz、4倍PLL)

とかなりメモリー容量も大きくて、いまのところ不自由はしていません。

これからは速度も必要かな〜
 PICの速度は、基本的にはデフォルトの動作周波数の8MHzをつかっています。キャラクターLCDをベースにした
DACの操作程度につかうには8MHz程度もあれば十分なのですが、浮動小数点をつかったり、グラフィックLCDを
つかったりすると、速度はそれなりに必要になってきます。
それでもPLLも駆使して64MHzあたりまで動作周波数をあげれば、おそらく問題ないレベルかな〜と思っています。

でも、早いことに越したことはないので、いまのPICでさらに早くならないかな〜とおもって、
オーバクロックを試してみました。

外付けの水晶を変えてテスト!

いつもは内部発振器をつかっているのですが、それだと16MHzでPLL4倍で64MHzでしか動作できないので、
今回は外付け水晶にして、それにPLL4倍をかけてテストをしてみました。


PIC18F26K20(3.3V動作)で実験です。

テストプログラム

テストは極めて簡単に,一つのI/OをON/OFFを繰り返します。

 while(1){
   output_low(PIN_B0);
   output_high(PIN_B0);
}


このプログラムの命令ステップは4つになります。PICは4クロックで1命令ステップを実行するCPUなので、
1つのループを回るのに16クロックが必要になります。
 で、オシロでI/Oピンの波形をみて、どこまで高い周波数に対応できるか調べてみました。

水晶の周波数

(PIC動作周波数)
出力波形 実測値
計算値
誤差
10MHz

(40MHz)
2.5MHz
2.5MHz
0%
20MHz

(80MHZ)

オーバクロック
5.0002MHz
5MHZ
0%
24.576MHz

(98.304MHZ)


オーバクロック
6.1443MHz
6.144MHz
0%
27MHz

(108MHz)

オーバクロック

6.7502MHz
6.75MHz
0%

手持ちの水晶の制約で、27MHzまでしか試していませんが、それでも問題なく動くようです。
出力波形ですが、完全にGNDレベルまで落ちきっていないのはきになりますが、
外部のI/Fについては問題ないでしょう。

 いまつかっているPICでも100MHz程度でも動くことがわかりました。
 
ただ、あくまでも保証範囲外の周波数です。他の命令でも問題なく動くかどうかは、さらに検証が必要です。
でも、お遊びでつかうときにはいいかもしれません。

(おしまい)