標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第513回]
●USBコネクタの端子接続図
USBの基板用コネクタには端子が4本しかありません。
1番がV+で、2番がD−、3番がD+で4番がGNDです。
でもどこが1番でどこが2番なのか、なにしろ4本が正方形に配置されているので見当がつきません。
そこで参考までに、前回お見せした基板裏のコネクタ部分を拡大して、そこに番号を書き込もうとしたのですが。
これがその写真です。
でもなんだかごちゃごちゃしていてわかりにくいので、別に図で示すことにいたしました。
コネクタ(レセプタクルというのだそうです)を裏から見た図です。
上の写真と同じ向きです。
矢印がケーブルを差し込む口のある側です。
●PIC18F14K50のUSBテスト回路です
前回はPIC18F2550のUSB接続テストについて説明をいたしました。
今回はいよいよ問題のPIC18F14K50です。
まずはUSBの動作テストに使ったPIC18F14K50の回路図です。
PIC18F14K50でUSB(Full−speedモード)を使うためには、12MHzのクリスタルを外付けにして、そこから48MHzを得るようにしなければなりません。
その点がPIC18F2550と少し異なっているだけで、接続する端子番号が異なっていることを除いては、PIC18F2550と変わるところはありません。
テストに使った実物のジャノ目基板の写真は[第510回]でお見せしました。
そこでもちょっと説明しましたが、上の回路図では12MHzを外付けしていますけれど、写真では12MHzを74HCU04で発振させて、そのクロックをPIC18F14K50のPIN2(OSC1)に入れています。
なぜわざわざそんなことをしているのかといいますと、現在試作中のZ80版TK80ボードのZ80のクロックと共用できるようにするためのテストも兼ねているからです。
先に作りました特注品のZ80版TK80ボード(ND80ZH)のCPUクロックは4MHzで、今回も当初はそのつもりだったのですが、PIC18F14K50が12MHzでなければならないため、Z80にもその同じ12MHzをもとにしたクロックを供給することにしました。
Z80もハイスピード品があることはあるのですが、そんなものを使うと、82C55がこけてしまいます。
かといって12MHzから4MHzをつくるのはちょっと無理があります。
そこで12MHzを74HCU04で発振させて、PIC18F14K50にはそのまま供給し、Z80にはその1/2の6MHzを供給することにしました。
Z80については6MHzでずっと使ってきていますから特に問題はありません。
余談になってしまいました。
いずれ、Z80版TK80ボードの詳細につきましてもご紹介する予定です。
●PIC18F14K50のテストプログラムです(実は動きません)
前回のPIC18F2550のプログラムをPIC18F14K50用に直したものです。
ちゃんと動きますけれど、USBを認識してはくれません。
問題のプログラムです。
;;;pic p18f14k50 USB test program ;10/6/2 ; #include<p18f14k50.inc> ;cpuclock=48MHz exclock=12MHz ; CONFIG FOSC = ECH,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 movlw 16 movwf UEP0 movlw 15;ping-pong buffer set for EP0(out) only movwf UCFG ; call setbd0 ; movlw 0ff movwf PORTC 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 05;address high movwf POSTDEC1 movlw 00;address low movwf POSTDEC1 movlw 08;bytes movwf POSTDEC1 movlw 80;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
上でも書きましたように、CPUクロックの12MHzは外部から供給していますから、CONFIGではFOSC=ECHになっています。
12MHzクリスタルを外付けにする場合には、ここをFOSC=HSにします。
それはともかくとしまして、前回のPIC18F2550で動いたプログラムをもとにして、PIC18F14K50で変更しなければならないところを直しただけですから、これでUSBのSETUPを認識してくれない、というのはまさに謎だったのです。
ちなみにPIC18F14K50のために変更したところは、CONFIGのところと、あとはPORTの設定をアナログからデジタルにする設定の仕方の違っているところ(ANSELとANSELH)と、そしてUSB用バッファメモリのアドレスの違いによる変更(setbd0でlfsr 1,203にしている)のみです。
このプログラムをPIC18F14K50に書いて、実行させてみますと、LEDは点灯するのですが、USBケーブルを接続しても、点滅しないで、つきっぱなしなのです。
実は、すでに何回も書いておりますように、PIC18F2550ではまともだったこのプログラムには、とんでもない落とし穴があったのです。
ええ。
はっきりいって、完全に間違っているところがあったのです。
PIC18F14K50に限っては、です。
えらく気をもたせた書き方で申し訳ありません。
まま。もうしばらく、ご辛抱願います。
そこを説明するには、いろいろ準備が必要なものですから…。
とにかく、間違っていたのですよ。
でも、私が読んだ限りでは、PIC18F14K50のDataSheetでもそのことについての「注意書き」はただの一行も無いのです。
注意深く読めば書いてはあるのですけれど、注意書きでも警告でもなんでもないので、そんなの気が付くわけがないじゃないのさ。
とにかくこのプログラムでは、PIC18F14K50に限っては、USBにアクセスできっこないのですから、本来ならば、アセンブラでもそのことは教えてくれなくてはいけないはずなのですが…。
ちゃんとデバイスをPIC18F14K50に指定してアセンブルしたのですよお。
それなのに。
ほら。この通り。
Errors:0
だなんて。
ほんと、しらじらしい。うそばっかり。
2010.6.2upload
前へ
次へ
ホームページトップへ戻る