PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第253回]
●新PICBS02(PIC18F45K50)CLOCKを64MHzにしてみました
PIC18F45K50の最高クロックは48MHzです(PIC18F45K50 Datasheet)。
PIC18F45K50は内部発振モードの場合最高16MHzまで選択できます。
PIC18F45K50にはPLL機能があってx3とx4の2つのモードが選択できます。
ちょっと考えるとそれなら16MHzx4=64MHzまでいけそうなのですが。

[出典]Microchip TechnologyInc. PIC18F2X/45K50 Datasheet
もとのクロックが16MHzの場合には3xPLLを使い8MHz〜12MHzのときは4xPLLを使えとのこと(Note 1: 2:)。
System ClockはMax48MHzなので計算すればそういうことになります。

[出典]Microchip TechnologyInc. PIC18F2X/45K50 Datasheet
External Clockについてしか書いてありませんがUp to 48MHzと書いてあります。
12MIPSとありますからInternalであってもMaxは48MHzということでしょう。
PICの1命令は4クロック(一部命令は8クロック)で実行されますからそういうことになります。

[出典]Microchip TechnologyInc. PIC18F2X/45K50 Datasheet
内部発振モードで16MHzを選択した場合には4xPLLは使えません。
3xPLLを選択することになります。
ですので今までのプログラムは16MHzx3=48MHzで動作させてきました。
しかし。
今回はちょいと理由があってできればPIC18F45K50をもう少し高いクロックで動作させたいなあと。
ええ。
できればですけれど。
それでGoogleでさぐってみましたらPIC18F45K50を64MHzで動かしてみたなんて記事がみつかりました。
おお。そういうことならば。
駄目もとです。
ここはやってみるべきでありましょう。
NET記事のみなさまは大抵Cをお使いとかで64MHzにするのにそれなりに苦労されているようでありますが。
んなものはアセンブラを使えばちょいと1箇所直すだけです。
CONFIG PLLSEL=PLL4X,CFGPLLEN=ON,CPUDIV=NOCLKDIV,FOSC=INTOSCCLKO,PCLKEN=ON,IESO=OFF,WDTEN=OFF
CONFIG PBADEN=OFF,LVP=ON
movlw 0f4
movwf OSCCON
|
もとのプログラムではCONFIG PLLSEL=PLL3X,…になっています。
そこのところをPLL4Xに書き換えました。
OSCCON=F4はもとのままですからCLOCK=16MHzです。
さてそれで。
OSC2端子(14pin)をオシロで観測してみました。
OSC2には1/4CLOCKが出力されます。
もしも期待した通りCPUクロックが16MHzx4=64MHzになったとするとOSC2には16MHzが出力されるはずです。
その1周期は1/16=0.0625(μs)です。

おお。おお。
バッチリじゃありませんか。
すごい。
ほんとに64MHzで動いたあ!
でも。
ここで喜んではいけませぬ。
System Clockが64MHzになったからといって(命令クロックは16MHz)そのクロックでちゃんと命令が実行されるかどうかはやってみなければわかりません。
下はちょいとテスト中のプログラムの一部です。
bcf LATB,3;hsync=L
bsf LATB,5;hvsync=H 1---
call ck8chr;2+52
bsf LATB,3;hsync=H 1----1+1+2+52=56
;
;
ck8chr
movlw 10;=16;1 1+1+3*16+2=52
movwf cntr0;1
ck8chr_2
decfsz cntr0;1 or 2
goto ck8chr_2;2
return;2
;
|
PORTBのビット3からパルスを出力します。
そのパルス幅は。
62.5*56=3500(ns)
です。
PORTBのビット3をオシロで測定してみました。

おお。
ぴったり3500ns!
PICBASICコンパイラ[第253回]
2026.10.13 upload
前へ
次へ
ホームページトップへ戻る