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

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

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

[第77回]

●PIC18F14K50のシステムクロック

いよいよPIC18F14K50を使っての動作テストです。
PIC18F14K50もPIC18F2550と同様に、システムクロックとしては、内蔵発振回路、外部クロック入力、そして外付けのクリスタルによる発振クロックを選択することができます。
そのほかにもセカンダリクロックなどというものも使えますが、それについてはここでは考えないことにします。

まずは、PIC18F2550のときと同じように、p18f14k50.incからCONFIGのクロック設定のところを見てみることにいたします。

;
;   Oscillator Selection bits:
;     FOSC = LP            LP oscillator
;     FOSC = XT            XT oscillator
;     FOSC = HS            HS oscillator
;     FOSC = ERCCLKOUT     External RC oscillator, CLKOUT function on OSC2
;     FOSC = ECCLKOUTH     EC, CLKOUT function on OSC2 (high)
;     FOSC = ECH           EC (high)
;     FOSC = ERC           External RC oscillator
;     FOSC = IRC           Internal RC oscillator
;     FOSC = IRCCLKOUT     Internal RC oscillator, CLKOUT function on OSC2
;     FOSC = ECCLKOUTM     EC, CLKOUT function on OSC2 (medium)
;     FOSC = ECM           EC (medium)
;     FOSC = ECCLKOUTL     EC, CLKOUT function on OSC2 (low)
;     FOSC = ECL           EC (low)
;

むむむ。
PIC18F2550と書き方が違うのですよねえ。
なんとかなりませんかねえ。
こんなにチップごとにころころ変える必要はないと思うのですが…。

PIC18F2550ではCPUクロックの指定と同時にUSBクロックに対する指定も行う必要がありました。
しかし、PIC18F14K50では、どこにもUSBに対する指定らしきものがありません。
PIC18F14K50もPIC18F2550と同様にUSBコントローラを内蔵していますし、それを利用するためには、48MHz(Full Speedモード)か6MHz(Low Speedモード)が必要です。
ただ、そのUSBのためのクロックを供給する方法がPIC18F2550とは異なっているのです。
なんとも不統一でちぐはぐな感じです。

●PIC18F14K50のUSBのためのクロックの設定

さて、それではPIC18F2550のときと同じように、DataSheetを見てみることにしましょう。


[出典]Microchip社PIC18F1XK50DataSheet

PIC18F14K50はUSBのLow Speedモード(6MHz)とFull Speedモード(12MHz)の両方に対応しているのですが、今回のHIDはFull Speedモードですから、ここではLow Speedモードについては考えないことにします。

Full Speedモードでは、PIC18F2550と同じように、内蔵のUSBコントローラのクロックには48MHzを供給しなければなりません。
そしてこれもPIC18F2550と同じで、そのUSBのためのクロックとしては内蔵発振クロックは使用することができません。
外部から供給する48MHzまたは12MHzクロック(EC High−power mode)か、12MHzクリスタルを外付けして得られる水晶発振クロック(HS mode)のいずれかしか使うことができません。

外部入力の48MHzクロックモードについてはPIC18F2550と同じですが、PIC18F2550ではそれ以外に4、8、12、16、20、24MHzの外部入力モードか外付け水晶発振モードのうちから選択することができました。
しかしPIC18F14K50では48MHzを外部入力とする以外には、外部入力モードでも、外付けクリスタルでも12MHz以外は使うことができません。
あ。もちろん、USB(Full Speedモード)を使うためには、という前提でのお話です。
USBを使わないのでしたら、そのような制約はありません。

USB(Full Speedモード)のためのクロックについては、Table 2−5を見なさい、と書いてあります。
で。
Table 2−5です。



[出典]Microchip社PIC18F1XK50DataSheet

PIC18F2550と違って、これだけしかありません。
外部から48MHzを入力する(EC High)以外は、12MHzを外部から入力する(EC High)か、12MHz水晶発振による(HS)か、そのいずれかしかありません。
PIC18F14K50では、USBクロックはダイレクトに入力した48MHzを使うか、12MHzをPLLで4倍にすることで得られる48MHzを使うか、そのいずれかを選択することになります。
そしてCPUクロックは、その48MHzをそのまま使うか、それとも48MHzを分周して得られる24、16、12MHzのいずれかを使うか、になります。

PIC18F2550と同じようにブロック図を見てみましょう。



[出典]Microchip社PIC18F1XK50DataSheet

このブロック図のUSBクロックについての部分については、これでは何もわからないのと同じです。
ですけれど、さきほどのTable 2−5にありますように、とにかくUSBクロックとしては、クロックのソースが48MHzか12MHzのEC(外部入力)か、12MHzのHC(水晶発振)で、PLLをONにする(48MHz外部入力のときはPLLをOFF)、という設定が選択できる全てです。

●PIC18F14K50の内蔵発振モード

せっかくブロック図を見ましたので、USBには使えませんが、PIC18F14K50の内蔵発振モードについても、少し説明をしておきましょう。
PIC18F2550の内蔵発振クロックは最高8MHzでした。

ところが上のブロック図をよく見ますと、PIC18F14K50ではなんとその倍の16MHzまでいけるようなのですよね。
これは、ぜひとも試してみたいですねえ。

さらに、さらに。
よくよく見てみますと、内蔵発振の8MHzがツツーッと上に伸びて、どうも4xPLLに入っているようではありませんか。
8MHzの4倍ということは、32MHzです。
うう。
これは、内蔵発振でそこまでいけるということか?

おお。
こんなところにちらりと書いてありました。

[出典]Microchip社PIC18F1XK50DataSheet(赤線は筆者)

これは、なんとしても試してみないといけません。

実は、PIC18F14K50についてもPIC18F2550と同じように、簡単なテストプログラムを書いて動作を確認してみました。
ですけれど、本日は時間がなくなってしまいましたので、それにつきましては、また次回にご披露させていただくことにいたします。
CPUをつくろう!第505回(2010.5.22upload)を再編集

PICでUSBを![第77回]
2011.7.12upload

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