ちょっと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であれば、速度的にも肉薄できるのではという気がしてきました。
ちょっとこれは試してみる価値がありそうです。
(まずは、ここまで)