PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.12 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆PIC18F14K50 PIC18F2550では大きすぎて、計画中のTK80互換マイコンボードND80ZVには組み込めそうにないことがわかりました。 USB機能内蔵のPICにはPIC18F4550、PIC18F2550のほかに20pinのPIC18F14K50があることはちょっと前から知っていました。しかしUSBに関する部分がPIC18F2550とはかなり異なっているようです。 案の定しっかり泥沼にはまってしまいました。 |
[第76回]
●PIC18F2550テスト回路図です
前回は時間がなくなってしまいましたので、回路図をお見せすることができませんでした。
回路図と言いましてもたったこれだけの簡単なものです。
[第59回]で使った回路に、MCLRのプルアップ抵抗と、4MHzクリスタルを追加しただけです。
●CPUクロックを変更してテストしてみました(32MHz)
前回はCPUクロックを48MHzに設定して動作テストを行いました。
前回([第75回])説明しましたように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 ; |
; 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] |
前回も説明しましたが、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 ; |
今回は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 ; |
CPUクロックは16MHzになったはずですから、1CPUクロックは1/16μsecです。
1マシンクロックはその4倍ですから1/4μsecです。
RA0の出力は3マシンクロックごとに1と0が交互に反転して出力されますから、HまたはLの期間は、3/4=0.75μsecになります。
今回も計算通りの出力結果になりました。
CPUをつくろう!第503回(2010.5.20upload)を再編集
PICでUSBを![第76回]
2011.7.12upload
前へ
次へ
目次へ戻る
ホームページトップへ戻る