PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.12

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

PIC18F2550では大きすぎて、計画中のTK80互換マイコンボードND80ZVには組み込めそうにないことがわかりました。
USB機能内蔵のPICにはPIC18F4550、PIC18F2550のほかに20pinのPIC18F14K50があることはちょっと前から知っていました。しかしUSBに関する部分がPIC18F2550とはかなり異なっているようです。
案の定しっかり泥沼にはまってしまいました。

[第73回]

●8ビットパラレルデータ伝送

前回、PIC18F2550とPIC18F14K50との間には、とんでもない、言うなれば、まことにけしからぬ相違がある、と書きました。
どこが、どのように違っておりますのか、もちろんそのことにつきましてはしっかり説明をさせていただきますけれど、お話の順序といたしましては、もうちょっと先になってからお話しすることになります。

今回はこちらのテーマからお話しいたします。
PIC18F2550を完全にあきらめてしまったわけではありませんが、先に作りましたZ80版TK80ボード(ND80ZH)に搭載しておりました18pinのPIC16F88の代わりに乗せようとしますと、PIC18F2550の28pinというのは、回路配線を部分的にいじくる程度ではとてもできそうにはありません。
その点、PIC18F14K50の20pinならばなんとかなりそうです。
しかし20pinでは、今度は逆にI/Oの数が決定的に足りません。
それじゃやっぱりなんとかしてPIC18F2550を使うしかないじゃないの?
ということなのですけれど、そこをクリアする方法がないわけではありません。

いままでZ80CPUとPIC16F88との間のデータの受け渡しは、8ビットパラレルでやってきました。
テスト的に取り付けたPIC18F2550とZ80との間でも全く同じです。
そこのところを、8ビットでデータを送る代わりに、最初に下位4ビットをまず送り、次に上位4ビットを下位にシフトしてから送るようにすれば、8本使っていたデータラインが4本で済みますから、つまりI/Oが4本浮いてくる勘定です。

で、これもまたお話の順序といたしまして、その4ビットデータ伝送回路について説明をする前に、まずは現行の8ビットのデータ伝送について説明をすることにいたします。

Z80版TK80ボード(ND80ZH)の試作基板にPIC18F2550をとりつけたところの回路図は[第69回]にあります。
データはPIC18F2550のRB0〜RB7とND80ZH基板のI/Oアドレス94との間でやり取りされます。
データはZ80CPUからPICの方向へも、逆にPICからZ80CPUの方向へも送りますから、双方向伝送です。
データラインの向きがぶつかってしまわないように、データを送信も受信もしていないときには、ND80ZH基板のデータ出力用IC(IC4、74HC373)は出力禁止にしておきます。またPIC18F2550のPORTBは入力にしておきます。

実はこういう回路の場合、あるタイミングでどちらが送信を開始するかを決定するのは、なかなかにむつかしいのです。同時に両方が送信を開始しようとすると、当然データラインがぶつかってしまいます。
しかし、今回の、Z80版TK80ボードの場合には、そのタイミングはCPUの側が決定することになりますから、データがぶつかってしまう心配はありません。

CPUからPICの向きにデータを送るのは、SAVE(STORE)キーを押したときですし、逆にPICからCPUにデータを送るのは、LOADキーを押したときですから、どちらの場合もCPUがデータの方向を決定し、PICはそれに従うことになります。
その方向を決定し、データを送信、受信するための制御をするのに4本のラインを使います。
PIC18F2550はRA0〜RA3で、CPU基板の側は、[第69回]の回路図ではI/Oアドレスの値が見えませんが、アドレス98のビット0、ビット1の出力(IC3、74HC373)と同じくアドレス98のビット0、ビット1の入力(IC1、74HC244)です。

実はここまで書いてきまして、それではそのあたりのところを簡単なタイミングチャートで説明をいたしましょう、というようにもっていくつもりでタイミングチャートを描こうとしましたら。
あれ?
もう描いてある?
そうか、そうか。いずれこのあたりの説明をしなくてはならないからということで、先週あたりにでも準備しておいて、それをすっかり忘れてしまっていたのだわ、きっと。

ふむ?
あれ、タイムスタンプが…。ええっ?
09/06/02?????

およそ1年も前ではありませんか!
さては?
ということで過去記事のそのあたりを読み直してみましたら、ありました。
しっかりと書いておりました。
CPUをつくろう!CPUをつくろう![第181回]CPUをつくろう![第238回]CPUをつくろう![第239回]で説明をしておりました。
あ。その説明はND80ZHではなくて、MYCPU80試作基板での説明ですけれど、やっていることは同じですから、今回説明をする予定でおりましたパラレル8ビットデータ伝送の仕組みにつきましては、そちらの過去記事をお読みいただきますようお願いいたします。
CPUをつくろう!第500回(2010.5.16upload)を再編集

PICでUSBを![第73回]
2011.7.12upload

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