ということで一応借りてきた。
Elan Digital Systems Ltd'sってところから出てるデバイスらしいんだけどディスコン?になってるし、サイトもWebアーカイブに残ってるだけだし…
0.1Hzから50MHzまで測れる周波数カウンタらしい。USBポートはオスがそのまま出ていてUSB延長ケーブルが付属している。赤色LEDがBNC入力端子の下についてて、あとは4chまでスタックして使用できるらしいのでそれ用のポートがついてる。
というわけで早速秋月のページからソフトウェア類が入ったzipをダウンロードすると、ソフトウェアのソースコードとかレジスタの説明が入っていた。Communications Protocolを見てみるとどうやらソフトウェアとデバイス間の通信はUARTでやってる?これならPythonとかでも使えるかも。
USBcount50の中身的には(分解していないのでソフトウェアからの推測だけど)、周波数カウンタの機能自体はFPGA、PCとの通信用にSilicon LabsのCP210xシリーズのUSB UART変換ICを使っていて、FPGAとは921600bpsで通信しているっぽい。こんなに高速にUARTで通信している割には通信プロトコル自体には誤り検出とか実装されていないように思うんだけど、結構安定して通信できているのかな。
USBとBNC端子はアイソレーションされてるようなのでUARTかUSBのラインにアイソレーションICが入ってるのかな?
デバイスとの通信部分はDLLになっていて、DLLをVB6.0のGUIソフトウェアから呼び出してるみたいな構成。どうやらCP210xに直接アクセスしてシリアルナンバーとかバージョンを読み出すところはCP210x用のDLLを使っているようなのでそのせいでPCで仮想COMポートとして認識していてもソフトウェアからアクセスできなくなってそう…
ためしにCooltermからUSBcount50の仮想COMポートにプロトコルの仕様書通りにコマンドを送ってみるとちゃんと帰ってくるようなので、純正ツールを使わなくてもCOMポートにアクセスさえすれば使えそう。どうやらCP210xとの通信はバージョンチェックとかデバイスがつながっているかどうかの確認しかしてなさそうだし。
デバイスとの通信部分はDLLになっていて、DLLをVB6.0のGUIソフトウェアから呼び出してるみたいな構成。どうやらCP210xに直接アクセスしてシリアルナンバーとかバージョンを読み出すところはCP210x用のDLLを使っているようなのでそのせいでPCで仮想COMポートとして認識していてもソフトウェアからアクセスできなくなってそう…
ためしにCooltermからUSBcount50の仮想COMポートにプロトコルの仕様書通りにコマンドを送ってみるとちゃんと帰ってくるようなので、純正ツールを使わなくてもCOMポートにアクセスさえすれば使えそう。どうやらCP210xとの通信はバージョンチェックとかデバイスがつながっているかどうかの確認しかしてなさそうだし。
というわけでDLLの必要そうな部分と、GUIツールからDLLを扱ってる一部をPythonに移植してみた。USBcount50では使ってない関数もあるかも。(同じ外見のデバイスで何種類かシリーズものがあるらしい)
これでOSやバージョンを問わず使うことができそう。XPのマシン用意するのも大変だろうし。
GUI部分はとりあえずは保留でライブラリとして使えるような形で作ってみた。Pythonよく理解できてないのでなんか変な所あるかも…
とりあえずラズパイ上ではうまく動いた。これ、純正ソフトだと周波数と時間しか表示できなさそうだけど、パルス出力のセンサー類をつないでセンサーの出力に応じた計算までさせたいのであればPythonは結構便利な選択肢だったかもしれない。
多分古いデバイスだし、使う人いないだろうけど一応公開しておく…
USBcount50.py
DLLの中身で必要そうな部分をそのまま移植した感じなので不要な関数もあるかも。
GUI部分はとりあえずは保留でライブラリとして使えるような形で作ってみた。Pythonよく理解できてないのでなんか変な所あるかも…
とりあえずラズパイ上ではうまく動いた。これ、純正ソフトだと周波数と時間しか表示できなさそうだけど、パルス出力のセンサー類をつないでセンサーの出力に応じた計算までさせたいのであればPythonは結構便利な選択肢だったかもしれない。
多分古いデバイスだし、使う人いないだろうけど一応公開しておく…
USBcount50.py
DLLの中身で必要そうな部分をそのまま移植した感じなので不要な関数もあるかも。
そしてテストで測定結果を取得したときに使っていない関数はほぼ未確認。
スタック用のポートもレジスタいじると操作できそうなので汎用デジタルIOとして使えそうな気がする。
そういえばUSB Host ShieldでもCP210xが扱えるらしいけど921600bpsとかで通信できるのかなぁ?もし通信できるならマイコンとかでも扱えちゃうかも?
追記:リンクが切れていたので再アップのついでにVIDとPIDで自動でデバイスを認識するように変更した。