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

[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第111回]


●CPLDロジアナ(1)

今回はトランジスタ版8080CPUの製作記事を連載している途中なのですが、少しだけお休みしまして、別の製作記事について書きます。

トランジスタ版CPUの組立キットを考えていく過程で、できればあるといいなあと思うツールがあります。
もちろんオシロスコープがあるとよいのですけれど、CPU回路をチェックするには2CHでは思うように測定できないきらいがあります。
できればロジアナなんてものがあると重宝すること、間違いなしです。
そこで思うのが、カメレオンUSBロジアナです。
これはなかなかのすぐれもので、重宝しています。
ときどき当製作記事にも登場します。

で。
その重宝しておりますロジアナなのですが。
その実体はCPLDとメモリの合体のようです。

CPLDならこの半年ほど実際にさわって、いろいろ経験してきました。
いくつかの応用基板も製作しました。
そういうことなので、この際、できれば自前のCPLDロジアナも作ってしまいたい。
それがあれば、トランジスタ版8080CPU組立キットの製作にも役立つのでは?
そう思って、実はもう何ヶ月も前に、とりあえずの試作基板を作ってしまいました。

ハード回路とかCPLDのVHDLプログラムとかは、まあそれほど負担に思うものでもありませんが、問題はUSB経由で測定データをどのようにしてパソコンに取り込むのか、ということと、そのようにして取り込んだデータをもとにして、それをどのようにしてパルス波形として画面に表示するのか、ということでした。
これはなかなかにむつかしい問題でした。
とりあえず試作基板は作ってみたものの、そのあたりのことを作業するだけのまとまった時間も精神的なゆとりもないまま、結局何ヶ月もの間放置することになってしまいました。

しかしやっと先日になって、トランジスタ版8080CPUのCLOCK回路基板が出来上がってくるまで、少しの空き時間ができましたので、何ヶ月ぶりかで本気に取り組んでみた結果、とりあえず、プロトタイプのそのまたプロトタイプ程度のところまでなんとか出来上がりました。
まだハードもソフトもざっくりとした試作品ですけれど、しかしこれはもう私としては「金麦で乾杯!」ものです。
それでさっそく当記事を書くことにした次第です。

●PICIO82C55

ところで。
そのように書きますと、
「先日の何日間かで一気に仕上げてしまいました」
というように受け取られてしまうかもしれませんが、残念ながら私にはそれほどの才能はとてもありません。
日々己の才能の無さを嘆いております。
今回の試作をなんとかするのに際して、なんともう4年ほども前に製品化しようとして試作版を作り、途中までプログラムも作ったところでそのままになっていたハードとソフトが役に立ちました。
それがPICIO82C55です。

私自身はすっかり忘れてしまっていたのですが、ノートを読み直してみたところ、
今回の試作ボードができたあたりで、数年前の試作品(PICIO82C55)のことを思い出して、そのプログラムを確認したところ、これをベースにして書き直せば、なんとかうまく利用できそうだ、
と書いてありました。

私が考えるCPLDロジアナは、CPLD(EPM7128SLC84)でターゲット回路からの信号を読み取り、それをRAMに蓄えます。
次にそのCPLDに接続したPIC18F14K50に対してUSB経由でパソコン側のプログラムから、RAMに蓄積した測定データを読み出して送信するようにという命令を送ります。
今までずっとPIC18F14K50をUSBインターフェースとして使ってきていますが、それはまさにUSB通信に特化したインターフェースとして使ってきたので、そのPICを使ってUSB経由でその先につながったI/O回路(CPLDもI/O回路です)との間でデータのやり取りをするということは、製品化したものとしては扱っていませんでした。

しかしせっかくPIC18F14K50を使ってUSB通信ができるのですから、そのPIC18F14K50のプログラムに手を加えることで、ただのUSB通信だけではなくてI/O制御までできたら、応用範囲がずっと広がるのではないか、ということは何年も前からときどき思い出したように考えていました。
そこで試作したのがPICIO82C55でした。
PIC18F14K50そのものにもI/O端子がありますが、I/Oとして使うにはちょっと数が少ないかなと思います。
そこでPIC18F14K50の先に82C55を接続して、それをパソコンのソフトからは普通のI/O命令で操作できるように考えました。
下はPICIO82C55の写真です。


PICIO82C55の回路図です。

PIC18F14K50のRC0〜RC7をアドレス出力と双方向データバスとして使っています。
RA4をアドレスラッチ信号として使います。
RB5はIORD、RB7はIOWRとして使います。

下はPICIO82C55のために作成したコントロールプログラムを実行中の画面です。

プログラムはBorland C++で作成しました。
とりあえずのプロトタイプです。
I/Oアドレス80に12を、81に34を、82に56を出力してみました。
82C55にはプログラム起動時に初期設定としてアドレス83に80を出力しています(PA、PB、PCを出力に設定)。

下は上のプログラムを実行した後、82C55の出力ポートの外部にLEDを接続して結果を確認しているところです。

LEDは上からPA、PB、PCで、左がビット7、右がビット0です。
LEDはカソードをポート出力につないでいるため、0で点灯し1で消灯します。

昔、Windows98まではパラレルポート(プリンタポート)はユーザーが普通に使うことができたのですが、それが使えなくなってしまってから久しい今、WindowsパソコンにUSB接続した82C55がこのように制御できるということになれば、いろいろ応用できるのではありませんでしょうか?

それならばなぜ早く製品化しないのか?

問題はソフトウェアなのです。
今のところ、自分用にとりあえず欲しいと思う機能をC++プログラムで作っています。
それだけでは一般向けの製品としては弱いでしょう。
ですけれど。
そこのところを拡充しようとすると、手間がかかって、なかなか簡単にはできないのです。
そのうち時間をみつけて、らしいプログラムを作って製品化したいとは思っているのですけれど。

今回ここでPICIO82C55を紹介しましたのは、この基板から82C55を除いて、代わりにCPLDを置いたものをCPLDロジアナ回路として試作したからです。
82C55の制御に使っていたプログラムをもとにして、必要なところに手を加えることで、CPLDの制御に使うことができるようになりました。

次回に続きます。

CPLD入門![第111回]
2019.10.17upload

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