標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第645回]
●PIC18F14K50のHIDサンプルプログラム(追記)
前回お見せしましたPIC18F14K50のHIDサンプルプログラムではPORTA〜PORTCのI/Oポートの向きは全てOUTに設定しています。
clrf TRISC clrf TRISB clrf TRISA
ところでこの部分を[第641回]では
movlw 0b movwf TRISA movlw 0 movwf TRISC movwf PORTB
というように書いています。
PIC18F14K50のPORTAのビット0、ビット1はUSBのD+、D−と兼用しています。またビット3はMCLRと兼用しています。
そしてPIC18F14K50のPORTAのビット0、1、3はI/Oポートとして使う場合、入出力端子ではなくて、入力のみの端子になっています。
そのため[第641回]ではPORTAのビット0、1、3を「入力」に設定したのですが、そこのところを前回は面倒なので全ビットを「出力」に設定してしまいました。
しかしそのように設定しても特に支障はないようで問題無く動作しました。
PIC18F14K50のPORTAのビット0、1、3はI/Oポートとして使う場合には入力にしか使えませんから、そこを出力に設定しても無意味ということで、それ以上特に支障はないのかもしれません。
PICでは多重に機能を割りつけてある端子によっては、その端子をI/Oとしてではなく別の機能として使う場合であっても、ポートの向きを「入力」あるいは「出力」に設定しなければならないものもありますから、ちょっと気になったのです。
今回気がつくまでは特に気にしないで出力に設定して使っていたのですけれど、それでも何の問題もなかったわけですから、D+、D−、MCLRについては、ポートの向きはどちらでもよい、ということのようです。
●PIC18F2550のHIDサンプルプログラム
USB(HID)のインターフェースを内蔵したPICとしてはPIC18F14K50よりもPIC18F2550の方がポピュラーなようです。
実際PIC18F14K50はちょっと端子が少なすぎて何かをしようとすると、ポートの数が少ないことがネックになるかもしれません。
PIC18F14K50での簡単なHIDサンプルプログラムをお見せしましたので、ことのついでにPIC18F2550のプログラムもお見せすることにいたします。
PIC18F14K50とPIC18F2550とではレジスタのアドレスなど一部に異なるところがあります。
過去記事を確認してみましたら、PIC18F2550についてもPIC18F14K50と同じ動作のサンプルプログラムをお見せしていました。
[第512回]にPIC18F2550を使ったサンプル回路図と、サンプルプログラムがあります。
回路図はPIC18F14K50と同じでUSBから電源を取っていませんが、ここはUSBからVddを取ったほうが簡便です。
USBコネクタの1番ピンから+5Vが出ていますので、そことPIC18F2550のVdd(pin20)を接続するだけです。
できれば100μF程度の電解コンデンサをUSBコネクタのVdd(1ピン)とGND(4ピン)の間につけておくとよいでしょう。
またPIC18F2550の14番ピン、20番ピンのコンデンサに値がありませんが、ここは0.1μF程度のセラミックコンデンサをつけます。
サンプルプログラムはほんの少しだけですが直したほうがよいところがありますので、修正後のプログラムリストをお見せします。
;;;pic p18f2550 USB test program ;10/5/31 10/24 ; #include<p18f2550.inc> ;cpuclock=48MHz xtal=4MHz ; CONFIG PLLDIV=1,USBDIV=2,CPUDIV=OSC1_PLL2,FOSC=XTPLL_XT,VREGEN=ON,WDT=OFF CONFIG PBADEN=OFF,LVP=OFF ; w=0 f=1 c=0 z=2 ; cntr0=0c cntr2=0d cntr1=20 ; org 00 movlw 0f movwf ADCON1;porta,b are digital clrf TRISC clrf TRISB clrf TRISA ; usbreset movlw 16 movwf UEP0 movlw 15;ping-pong buffer set for EP0(out) only movwf UCFG movlw 1e;in,out enable movwf UEP1 call setbd0 ; movlw 48 movwf UCON;clear bit4,for SIE enbl loop_ucon btfss UCON,4;if SETUP detect goto loop_ucon ; loop call t1ms decfsz cntr1 goto loop movlw 1 xorwf PORTC goto loop ; ;ep0 out data0(even) setbd0 lfsr 1,403 movlw 05;address high movwf POSTDEC1 movlw 00;address low movwf POSTDEC1 movlw 08;bytes movwf POSTDEC1 movlw 88;STAS(even) movwf POSTDEC1 return ; ;1msec timer t1ms movlw 0a;=10 movwf cntr2 t1ms2 call tm100micros decfsz cntr2 goto t1ms2 return ; tm100micros movlw 0f0;=240 movwf cntr0 tm100micros2 nop nop decfsz cntr0 goto tm100micros2 return ; end
PIC18F14K50のサンプルプログラムと全く同じ動作をします。
USBコネクタを接続するとLEDが点滅します。
PIC18F14K50の場合と同じで、このプログラムはただのテストをしているだけですから、USB装置として認識はされません。
パソコン側では「不明なデバイス」になります。
2010.10.25upload
前へ
次へ
ホームページトップへ戻る