PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.13

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆PIC18F14K50

PIC18F2550では大きすぎて、計画中のTK80互換マイコンボードND80ZVには組み込めそうにないことがわかりました。
USB機能内蔵のPICにはPIC18F4550、PIC18F2550のほかに20pinのPIC18F14K50があることはちょっと前から知っていました。しかしUSBに関する部分がPIC18F2550とはかなり異なっているようです。
案の定しっかり泥沼にはまってしまいました。

[第81回]

●PIC18F14K50をクロック48MHzで動かしてみました

前にも説明しましたように、PIC18F14K50でUSB(Full Speedモード)を使う場合には48MHzをUSBクロックとして供給しなければなりません。
PIC18F14K50には4xPLL回路が内蔵されていますから、それを使えば12MHzのクロックを供給すればよいことになります。
PIC18F14K50の内蔵発振回路では16MHzまでのクロックが得られるのですが、残念なことに12MHzはありません。
また内部回路の制約からでしょうか、内部発振クロックでPLLが利用できるのは8MHzだけに限られます。
いずれにせよ、USBのための48MHzクロックをPIC18F14K50に供給するためには、外部から12MHzクロックを与えるか、12MHzクリスタルを外付けするかのいずれかの方法しかありません(外部から48MHzクロックを直接供給することも可能ですが、それについてはここでは考えないことにします)。

ということで、いよいよPIC18F14K50でUSBのプログラムテストをするための前準備として、まずは48MHzクロックで動かしてみることにしました。

これがそのテストプログラムです。

;;;pic p18f14k50 test program
;f14k50test4
;10/5/21
;
;
        #include<p18f14k50.inc>
;cpuclock=48MHz 12MHz crystal
;
        CONFIG FOSC = HS,CPUDIV = NOCLKDIV,PLLEN=ON,WDTEN=OFF,LVP=OFF;not WDT          
;
        org 00
        clrf ANSEL;PORTA,PORTC are digital
        clrf ANSELH;PORTB,PORTC are digital
        clrf SLRCON
        clrf TRISA;porta=out
        clrf TRISB;portb=out
        clrf TRISC;portc=out
;
        movlw 1
loop
        xorwf PORTC
        goto loop
;

いままでのプログラムとほとんど同じです。 CONFIGのクロックのところだけを少し書き換えています。
今回は12MHz水晶を外付けして使いますから、FOSC=HSにします。
4xPLL回路を通しますからPLLEN=ONです。
USB回路には48MHzを供給しなければいけませんが、CPUクロックは必ずしも48MHzである必要はありません。
もっとゆっくりしたクロックで使いたいときには48MHzクロックをCPUDIVパラメータで指定して分周します。
でも今回は動作テストをするということもあって、CPUクロックも48MHzをそのまま使うことにします。
ですからCPUDIV=NOCLKDIVです。

●USBテスト用にPIC18F14K50をジャノ目基板に組み付けました

前回までのテストでは内部発振クロックを使いましたから、PIC18F2550をテストしたジャノ目基板の空いたところを利用しましたが、USBのテストのためには、ちょっとスペースが不足しますので、あらためて別のジャノ目基板に組みました。

LEDがいっぱいついて、ものものしい状態です。
最初はこんなすごい状態ではなかったのですが、USBでの接続でみごとにコケてしまいましたので、その原因を追求するためにこのような状態になってしまいました。
プログラムではクリスタルを外付けにする設定になっていますが、この写真では74HCU04で12MHzクリスタルを発振させたクロックを供給しています。

こちらが裏側の写真です。


●RC0からの出力波形です

プログラムを実行中のRC0からの出力波形です。


CPUクロックは48MHzです。
PORTCのビット0は3マシンクロックごとに1と0が交互に出力されます。
CPUクロックが48MHzということは、1クロックが1/48μsecということです。
PICの1マシンクロックは4CPUクロックですから、1/12μsecです。
そしてその3マシンクロックは、1/4μsecになります。
250nsecです。
今回も計算通りの出力が得られています。
CPUをつくろう!第510回(2010.5.27upload)を再編集

PICでUSBを![第81回]
2011.7.13upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る