標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第644回]

●PIC18F14K50のHIDサンプルプログラム

前回まででUSB(HID)プログラムの初期設定部分はできあがりました。
実際にそこまでのプログラムをPIC18F14K50に書いてパソコンとUSBで接続してみますと、PIC内蔵のUSBコントローラ(SIE)はUSBホストコントローラからのSETUPトークンパケットを検出してくれます。

実はそのところまでのサンプルプログラムは、[第520回]から[第522回]でお見せしています。
しかしそのままでは少しまずいところなどがありますので、前回までの説明もふまえて、もう一度きちんと書き直したプログラムをお見せします。

;;;pic p18f14k50  USB test program
;10/6/2 10/22
;
        #include<p18f14k50.inc>
;cpuclock=48MHz exclock=12MHz
;
        CONFIG FOSC = HS,CPUDIV = NOCLKDIV,USBDIV = OFF,PCLKEN = ON,PLLEN = ON,WDTEN=OFF,LVP=OFF
;
w=0
f=1
c=0
z=2
;
cntr0=0c
cntr2=0d
cntr1=20
;
        org 00
        clrf ANSEL
        clrf ANSELH
        clrf TRISC
        clrf TRISB
        clrf TRISA
;
usbreset
        lfsr 2,0f5c;UADDR
        clrf INDF2;     
        movlw 16
        lfsr 2,0f53;UEP0
        movwf INDF2
        movlw 15;ping-pong buffer set for EP0(out) only 
        movwf UCFG
        movlw 1e;in,out enable
        lfsr 2,0f54;UEP1
        movwf INDF2
;
        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,203
        movlw 02;address high
        movwf POSTDEC1
        movlw 20;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


下の回路図は上のプログラムを実行するためのテスト回路です。
この回路図は[第513回]でお見せしています。


この回路図ではPIC18F14K50のVDDはUSBコネクタからは取っていませんが、それではこれだけの簡単なテストをするのにも別の電源を用意しなければいけないので不便ですから、今回のテストとしては、USBコネクタの1番ピンをPIC18F14K50のVDDに接続して、テスト回路の電源をUSBから供給するようにしたほうが便利です。
その際はUSBコネクタの1番と4番の端子間に100μF程度の電解コンデンサをつけておくとよいでしょう。
またPIC18F14K50の1番ピン、17番ピンのコンデンサに値がありませんが、ここは0.1μF程度のセラミックコンデンサをつけます。

PIC18F14K50に上のプログラムを書いて図の回路で実行させてみますと、USBコネクタを接続するとLEDが点滅します。
もちろんこのプログラムはただのテストをしているだけですから、USB装置として認識はされません。
パソコン側では「不明なデバイス」になります。
2010.10.22upload

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