標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第503回]
●PIC18F2550テスト回路図です
前回は時間がなくなってしまいましたので、回路図をお見せすることができませんでした。
回路図と言いましてもたったこれだけの簡単なものです。
[第486回]で使った回路に、MCLRのプルアップ抵抗と、4MHzクリスタルを追加しただけです。
●CPUクロックを変更してテストしてみました(32MHz)
前回はCPUクロックを48MHzに設定して動作テストを行いました。
前回([第502回])説明しましたようにPIC18F2550は、PLL回路を使う場合は、USBを使う、使わないにかかわらず、CONFIGの設定によって、16、24、32、48MHzのいずれかのCPUクロックを選択することになります。
なおこの場合には外部から供給するクロックか、または外付けクリスタルの値は、4、8、12、16、20、24MHzに限られます。
また外部から供給する場合に限って48MHzも与えることができます。
参考までに、前回テストした48MHz以外のクロックも設定してテストをしてみました。
まず最初は32MHzです。
前回のプログラムから変更するのは、CONFIGの部分だけですから、その部分だけをお見せすることにいたします。
いまのところ簡単な動作テストをするだけで、まだUSBは使いませんから、USBのためのクロックの設定はなくても構いません。
そこで前回のプログラムのCONFIGの設定からUSBDIV=2は外しました(USBを使わないなら、この設定はあっても無くても動作に変わりはありません)。
; CONFIG PLLDIV=1,CPUDIV=OSC2_PLL3,FOSC = XTPLL_XT,WDT=OFF,LVP=OFF ;
なお、USBを使わないのですから、FOSC=XTPLLにしてもよいはずではないか、と思うのですが、FOSC=XTPLLにすると、アセンブルエラーが表示されてしまいます。
USBは使わないけれども、USBでXTを使う、という設定部分を外すことはできません(後ろの_XTがその部分です)。
CPUクロックを変更するために、書き換えたのは、CPUDIVです。
前回は、CPUDIV=OSC1_OSC2でした。この設定ではPLL回路から出力される96MHzの1/2の48MHzがCPUクロックになります。
前回もお見せしましたが、P18f2550.incのその設定に関する部分を参考までに下に再掲いたします。
; CPU System Clock Postscaler: ; CPUDIV = OSC1_PLL2 [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2] ; CPUDIV = OSC2_PLL3 [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3] ; CPUDIV = OSC3_PLL4 [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4] ; CPUDIV = OSC4_PLL6 [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]
今回は、そこをCPUDIV=OSC2_OSC3にしましたから、96MHz/3=32MHzがCPUクロックになります。
下はそのように変更したテストプログラムを実行中のRA0(PORTAのビット0)からの出力波形です。
前回も説明しましたが、PIC18F2550は、CPUクロックの4クロック分が、命令の1マシンクロックになります。
PICの命令は1または2マシンクロックで実行されます。
今回はCPUクロックが32MHzになったはずですから、1CPUクロックは1/32μsecです。
1マシンクロックはその4倍ですから1/8μsecです。
今回のプログラムでは、RA0の出力は3マシンクロックごとに1と0が交互に反転して出力されます。
するとHまたはLの期間は、3/8=0.375μsecになります。
375nsecです。
計算通りの出力結果になっています。
●CPUクロックを変更してテストしてみました(24MHz)
同様にして、今度は、CONFIGのCPUDIVの設定を、CPUDIV=OSC3_OSC4に変更しました。
; CONFIG PLLDIV=1,CPUDIV=OSC3_PLL4,FOSC = XTPLL_XT,WDT=OFF,LVP=OFF ;
96MHz/4=24MHzがCPUクロックになります。
下はそのように変更したテストプログラムを実行中のRA0(PORTAのビット0)からの出力波形です。
今回はCPUクロックが24MHzになったはずですから、1CPUクロックは1/24μsecです。
1マシンクロックはその4倍ですから1/6μsecです。
RA0の出力は3マシンクロックごとに1と0が交互に反転して出力されますから、HまたはLの期間は、3/6=0.5μsecになります。
今回も計算通りの出力結果になりました。
●CPUクロックを変更してテストしてみました(16MHz)
今度は、CPUDIV=OSC4_OSC6に変更しました。
; CONFIG PLLDIV=1,CPUDIV=OSC4_PLL6,FOSC = XTPLL_XT,WDT=OFF,LVP=OFF ;
96MHz/6=16MHzがCPUクロックになります。
下はそのように変更したテストプログラムを実行中のRA0(PORTAのビット0)からの出力波形です。
CPUクロックは16MHzになったはずですから、1CPUクロックは1/16μsecです。
1マシンクロックはその4倍ですから1/4μsecです。
RA0の出力は3マシンクロックごとに1と0が交互に反転して出力されますから、HまたはLの期間は、3/4=0.75μsecになります。
今回も計算通りの出力結果になりました。
2010.5.20upload
前へ
次へ
ホームページトップへ戻る