ちょっとTea Time!? PICをオーバクロックで動かしてみる(その2) 2025.10.27

最近はMCU(Micrro-Control Unit)についてはRP2040(PICOなど)がお気に入りです。
なんせ、PICに比べて圧倒的に速いし、容量も大きいです。
ただ、どうしてもRP2040は使いにくいところがあります。
 その一つは、3.3Vロジックであるということ。
そのため、5VロジックであるZ80やMC6800など、古めの素子とI/Fを取ろうとすると、かならずレベルコンバータが必要になってきます。
 もう一つは、GPIO数が少ないこと。RP2040では最大30本しかありません。
SPIやI2Cで動かすデバイスを接続する場合には問題ありませんが、パラレル接続の機器が対象になってくると、
とたんに厳しくなってきます。以前につくったCPM68K 4号機をリニューアルしようと考えましたが、ラッチなどをつかって、
時分割でアドレスバスをつくったりと考えても、どうしてもGPIOが数本足りません。

 上記のRP2040の問題点から考えると、PICは補完勢力になりうります。まず、5Vで動作するものも多いこと。
また5V動作品でも80QFPパッケージのものになると、GPIOが69本もありRP2040の倍以上あります。
ただ、前述したようにPICは速度が遅いです。とくに、CPM68KでつかったPICはPIC18F8723という32MHz品で
命令サイクルは8MHzなので、RP2040の125MHzに比べると約1/16です。なんとかこの差は埋まらないだろうか?
ということを考えていました。
 最近のPICはクロック64MHz、命令サイクル16MHzで動くものが多くなっており、RP2040の約1/8までは
速くなっています。もう一声クロックが上がれば、PICが使えるようになるかもしれません。
 そういえば、以前にPICをオーバクロックで動かしてみたことがありました。

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

このときは、PIC内部の4倍PLLを使う前提で、外付けの水晶を27MHzまで接続して、108MHzで動作することが
確認できました(本来の最大値は64MHz)。しかし、水晶の手持ちが27MHzまでだったので、それ以上は試していません。

そこで、今回は内蔵PLLを使わずに、直接PICに高周波数のクロックを叩き込むことで、
どこまで、動作するかを試してみました。

構成は下記の通り

 Si5351(発振器モジュール:max200MHz) → PIC18F26K83(5V,max64MHz)。PICのクロックはA7ピンに直接入力。

 Si5351はI2Cで周波数を設定するので、別のPICをつかって、周波数データを送り込みます。
 オーバクロック対象のPIC18F26K83については、単純にI/Oピンをバタバタさせるだけです。

#include "18F26k83.H"
#fuses HS,NOMCLR
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(E)
#use delay(clock=32MHz)

main()
{
 setup_oscillator(OSC_HFINTRC_16MHZ );
 delay_ms(100);
 setup_oscillator(OSC_EXTOSC);
 output_drive(PIN_B0);

 for(;;){
   output_high(PIN_B0);
   output_low(PIN_B0);
 }

}

太字の部分がループ部分。最初に起動のためのおまじないを入れました


テストの様子です。左のPIC(PIC16F886)はSi5351のI2C書き込み用。
右下のPIC(PIC18F26K83)がオーバクロック対象。Si5351のクロックはコンデンサ
を介してPICのA7に入力しています。

結果はいかに!

下記に入力クロックとGPIOのバタバタの周期の結果を示します。
バタバタの1サイクルは4命令分なので、クロック数の1/16になります。
(PICは4クロックで1命令をこなしています)

クロック GPIO(PIN_B0)出力波形
64MHz
(命令サイクルは
クロックの1/4)

一応はスペック範囲

出力周期:4MHz
100MHz

約1.6倍のオーバクロックです。
問題ないようです。過去のトライでも
動きました。

出力周期:6.25MHz
133MHz

約2.1倍のオーバクロックです。
問題なく動く感じです。

出力周期:8.31MHz
166MHz

約2.6倍のオーバクロックです。
動きはしましたが、波形がなかり汚くなりました。
内部でクロックが漏れ出ているような感じです。

出力周期:10.37MHz
180MHz

約2.8倍のオーバクロックです。
動作せずです。まったく関係のない周波数で
I/Oが動いています。

出力周期:61kHz
まともにクロックを受けきれていないようです。

上記のテスト結果から、166MHzでも動きましたが波形がとたんに汚くなり、ちょっと動作が不安定な感じです。
133MHzあたりまでが、安心してつかえそうな気配です。ちょっと余裕をみれば128MHz(スペックのちょうど2倍)
が狙い目かもです。

PICを128MHzで動かしすことになれば、命令サイクルは1/4の32MHzです。RP2040の125MHzには及びませんが、
RP2040の1/4くらいまでは速度が達することになります。IO数の少ないRP2040を無理やり使う(消費クロックが多くなる)ことを考えると、
IO数が多くてシンプルなソフトになるPICであれば、速度的にも肉薄できるのではという気がしてきました。

ちょっとこれは試してみる価値がありそうです。

(まずは、ここまで)