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

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆USB(HID)送信プログラム

パソコンからPIC18F2550へデータを送信するプログラムの試験的なものはすでにできています。
そのプログラムをもとに実用的なプログラムに作り上げました。
実用になったHID送信プログラムの説明です。

[第64回]

●HID送信プログラムが出来ました

今回もPIC18F2550の簡単なプログラムについて説明をさせていただく予定でしたのですが、またまた予定変更です。
先日から作業をしておりましたZ80版TK80ボードのためのHIDプログラムが、とりあえず動くところまで出来てしまいました。
信号の波形ですとか、試作基板の写真ですとか、テスト中の画面ですとかをいろいろ撮りましたのですが、これをそのままにしておきますと、そのうち、この写真は何だっけ?ということになりかねません。
毎度のことでお話があっちへ行ったりこっちへ来たりしてまことにまとまりがなくて申し訳ありませんが、どうかご容赦願います。

いずれまた、詳細についてご説明をいたします。
今回は、ざっとかいつまんでのご説明ということになります。

PIC18F2550のテスト基板(蛇の目基板)をZ80版TK80ボード(ND80ZH)に接続して動作テスト中の写真です。

ND80ZHは特注品です(ワンボードマイコンをつくろう![第3回]同[第34回]参照)。
この写真のボードはND80ZHの試作品として作った基板です。
7セグメントLED表示器の右の2個が「むき出し」なのは、ワンボードマイコンをつくろう![第31回]で7セグメントLEDチェッカーに改造してしまったためです。
写真では左下の蛇の目基板のその下にUSBコネクタがあるのですが切れてしまって写っていません。
WindowsパソコンとPIC18F2550はUSBケーブルで接続されています。
Windowsパソコン上のHID送信プログラムによって、PIC18F2550を経由して、ND80ZHにマシン語のプログラムが送信されたところです。
ND80ZHの7セグメントLEDには、受信したプログラムの開始アドレス8000と終了アドレス8058が表示されています。

PIC18F2550部分を接近して撮りました。

今度は写真の下の方にUSBコネクタも写っています。
ミニクリップはPIC18F2550からND80ZHへデータを送出するところをオシロスコープでモニタするためのものです。

基板裏側の配線の様子です。

ND80ZHはデータ(プログラム)のSTORE、LOADを、PIC16F88を使ってRS232Cで行っています。
そのPIC16F88をICソケットから外してしまって、そこにPIC18F2550を接続しています。
回路図はまだメモ描きしかありませんから、今はお見せすることができません。
近日中にきちんとしたものを描いて、お見せすることにいたしますが、おおむねND80ZHのPIC16F88まわりの回路と同じです(ワンボードマイコンをつくろう![第3回]I/O回路図参照)。

こちらはHID送信をしている、DOS/Vパソコン(Windows98SE)の画面です。

MSDOSプロンプト画面が数字だらけです。
プログラムの動作チェックのために、ハードディスクのファイルから読み込んだデータと、それを加工して、WriteFile()送出バッファに書き込むデータを表示させているのです。

ND80ZH用の電子オルガンプログラムのファイルを読み込んで、それをHIDでND80ZHに送出したところです。
8080(Z80)のマシン語コードのファイルですが、もとはRS232Cでの送信を前提に作ったものですから、バイナリファイルではなくてメモ帳でも開けるASCIIコードで16進数コードを表記しています。

ファイル(sound4.htx)の中身です。

80008058CD47023CCA00803DCD0E80C30080F5E5D5C5214180856F
461E1A503EF7D3982A000021000015C21F80503EE7D3982A000021
000015C22E801DC21A80C1D1E1F1C97F77716A5F59544F47433F3B
35322F2C25272A4B38642321

先頭にプログラムの開始アドレス8000と終了アドレス8058があります。
メモ帳で見ると上のように16進コードで表示されますが、実際のファイルの中身は下のようになっています。

8000は、38 30 30 30 のようにASCIIコードで書かれています。

MYCPU80ではUSBシリアル変換で、PIC16F88のところではRS232C通信になっていたこともあって、このASCIIコードのままPIC16F88に送り、PIC16F88のプログラムでASCIIからバイナリコード(16進数コード)に変換してCPU回路に渡していました。
しかし今回は、そこのところを、最初からバイナリコードでWindowsパソコンからPIC18F2550に送信することにしました。
そのために、読み込んだSOUND4.HTXのASCIIコードをバイナリコードに変換してから、送信バッファに書き込む、というプログラム部分も付け加えて作成しました。

さきほどの送信画面では、コード変換前のデータも表示していましたから、数字だらけで何がなんだかわからない画面でしたが、今度は、コード変換後のデータのみを表示させました。

HIDの送信データは一度に64バイトの固定長です。
64バイトに満たないデータを送る場合でも64バイトの送信になってしまいます。
PIC18F2550側で実際のデータ数がわかるように、先頭の1バイトは送信実データ数を入れるようにしてあります。
そのため、一度に送信できる最大バイト数は63バイトです。
今回の送信データは、バイナリコードに変換した後では全部で93バイトです。
一度では送れませんから2回に分けて送信しています。
n=63、n=30が、その送信実データ数です。

hidwr2e.exeは、ASCIIからバイナリに変換したデータのみを表示してから送信しています。
画面下に近いあたりで、hidwr2f.exeを実行しています。
hidwr2f.exeは何も表示しないで(送信データ数だけを表示)、データを送信します。

本日は時間がなくなってしまいました。
HID送信プログラムリストは次回にお見せすることにいたします。
CPUをつくろう!第491回(2010.5.1upload)を再編集

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

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