PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.11 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆PIC18F2550 今までの説明はPIC18F4550を使って行なってきましたが、PIC18F4550は40pinのICでサイズが大きすぎます。ピン数が多いだけにI/Oポートも十分あるのですが、USBインターフェースとしての用途に限定すれば、そんなに沢山のI/Oは必要ありません。 そこでこれからはPIC18F2550を使って説明をしていくことにしました。 |
[第59回]
●もっとも簡単なPIC18F2550テスト回路
今回はPIC18F2550のテスト回路について説明をいたします。
これからPIC18F2550を使ってUSB(HID)インターフェースを作っていくわけですが、そのためにはいろいろ準備が必要です。
いきなり回路に組み込んでしまうと、ハード、ソフトの思い違いなどが原因で思うように動いてくれなくて悩むことになりかねません。
それで、PIC18F2550のテスト回路とテストプログラムなのですが、今回の目的であるUSB(HID)のインターフェースということに的を絞って考えれば、それなりのテストを効率良くすることもできます。
しかし、せっかくの機会ですし、皆様に説明すると同時に、自分自身のメモとして先々参考になるかとも思いましたので、まずはUSBについてはちょいと忘れて、PIC18F2550の基本的な動作について簡単にテストをしてみたいと思います。
これが今回作りましたもっとも簡単なPIC18F2550のテスト回路です。
今回のテストで使わない端子は省略してあります。
本当にこれだけです。
これでちゃんと動きます。
なんとコンデンサ1本だけです。
あ。コンデンサの値を書き忘れてしまいました。
0.1μFセラミックコンデンサです。
VddとVssの間に入れておきます。無くてはならない、というものではないでしょうけれど、入れておいた方が無難でしょう。
pin1はふつうはMCLRとして使います。RESET端子です。
大抵は抵抗でVDDにプルアップします。
でもPIC18F2550には内蔵のプルアップを使うモードがありますから、それを使えば外付けのプルアップ抵抗は不要になりますし、そうするとpin1はMCLRではなくてRE3として使うことができます。
モードの設定はプログラムの中で、CONFIGレジスタに対して行います。
PICによっては、そういうモードの無いものもあるようです。こういうモードがあるかどうかについては、それぞれDataSheetでご確認ください。
それから、このモードにした場合、RE3は入力としてのみ使えます。
ということは、ここに何かの回路からの出力がつながる場合はいいのですけれど、そうではなくて接点の入力などをつなぐ、といった場合には結局ここにはプルアップ抵抗が必要になります。
このモードのときに、このままpin1に何もつながないでおくと、入力がハイインピーダンスのままにしておくことになりますから、余りよろしくはありません。
今回はテストに使うだけの回路ですから、とりあえずはpin1はこのままにしておきます。
CLOCK発振のための回路もありません。
一般的な使い方では、クリスタルをPICに外付けするのですけれど、PIC18F2550はクリスタルやCR回路がなくても、使うことができます。
PIC18F2550は、オシレータ回路を内蔵していて最高8MHzのクロックをCPUクロックとして使うことができます。
このモードの設定も、プログラムの中で、CONFIGレジスタに対して行います。
周波数は最高8MHzですが、それ以下の何通りかの周波数を、プログラムで設定して選択することができます。
ただしこのモードでは、内蔵クロックのみではUSBの機能を使うことはできません。
ですから、これは本当にただの動作テストのみです。
USBを使うためには、外付けのクリスタル発振モードか、外部からクロックを供給するモードにする必要があります。
●テスト回路の写真です
上の回路をジャノ目基板に組みました。
PIC18F2550を外したところです。
ICソケットの中にコンデンサが見えています。
基板の裏側です。
ご覧の通り、電源ライン以外、本当に何もありません。
●もっとも簡単なPIC18F2550テストプログラムです
;;;pic p18f2550 test program ;f2550test1 ;4/25 ; #include<p18f2550.inc> ; ;cpuclock=8MHz internal oscillator ; CONFIG FOSC=INTOSC_EC,WDT=OFF,LVP=OFF,MCLRE=OFF ; org 00 st0 goto start ; org 1a start movlw 7f;clock=8MHz movwf OSCCON movlw 0f movwf ADCON1;porta,b,e are digital movlw 0;porta-c are output movwf TRISA movwf TRISB movwf TRISC ; movlw 1 loop xorwf PORTA goto loop ; end |