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

CONFIGの設定や、その他の設定については、本日はちょいと時間がありませんから、その説明は次回にさせていただいたいと思います。

[注意]このプログラムを秋月のAKI−PIC2プログラマボード(PICkit2互換)で書き込むとPICが破損してしまうかもしれません(と秋月のサイトに警告が書いてあります)。
私自身も購入直後に経験しておりますから([第4回])、くれぐれもご注意くださいませ。
じゃあどうやってテストをするの?
という当然の疑問でありますが、それにつきましても次回に説明をさせていただきます。

●出力波形の写真です

上のテストプログラムの実行部分は、[第25回]のPIC16F88でのテストプログラム(test6.asm)と同じものです。
そのプログラムの動作については[第19回]で説明をしておりますので、ご参照ください。



上側(CH1)はpin10(CLKO)の出力波形です。
下側(CH2)はpin2(RA0)の出力波形です。
CONFIGの設定によって、pin10からは内部発振クロックの1/4の周波数が出力されます。PICはCPU入力クロックの1/4のクロックがマシンサイクルになります。
内蔵発振回路の発振周波数は8MHzなので(次回に説明いたします)、pin10からはその1/4の2MHz(周期は0.5μsec)のパルスが出力されます。

[第19回]で説明をしましたように、このテストプログラムは、xorwf PORTA(1マシンサイクル)とgoto loop(2マシンサイクル)の合計3マシンサイクルの命令が繰り返し実行されます。
その1回の繰り返しごとにPORTAのビット0出力が反転します。
ですからpin2(RA0)の出力は、写真のように、0.5×3=1.5μsecごとに反転出力します。
CPUをつくろう!第486回(2010.4.25upload)を再編集

PICでUSBを![第59回]
2011.7.11upload

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