カテゴリー別アーカイブ: 電子工作

BluetoothモジュールRN-42をお試し

Microchip製のBluetoothモジュールRN-42を使ってみました。このモジュールは、シリアルから設定を簡単に変更でき、キーボードとしてパソコンに接続できることを確認しました。マイコンをBluetoothで通信させるのに便利そうです。

パソコンに定形文字列を入力する方法を探していました。そこでマイコンをキーボードなどのHIDとするためのライブラリーやモジュールを探していて、Microchip製のBluetoothモジュールRN-42を見つけました。このモジュールを使うとシリアル端子に送った文字があたかもBluetooth接続のキーボードから入力されたように見せかけられます。そこでどんな感じなのか試してみました。

RN-42とは

RN-42は、Microchips製1のBluetooth Ver. 2.1に対応したモジュールです。内蔵プロファイルにはシリアル接続するためのSPP(Serial Port Profile)の他にHID(Human Interface Device)プロファイルが組み込まれており、モジュールにシリアル端子からコマンドを送ることでプロファイルや設定を簡単に切り替えることができます。

海外の無線モジュールを使用する時に問題になる法律面の制限(いわゆる技適マーク)もクリアしています

RN-42の購入

RN-42はモジュールとして電子部品店で容易に購入することができます。ただ今回は簡単に使い方を試してみたかったので、USB端子に接続するだけで電源とシリアル通信回路が提供される評価キットを購入しました。

秋月電子ではMicrochip純正の評価キットマイクロチップ Bluetooth評価キット RN-42-EKと秋月電子オリジナルのRN-42使用 Bluetooth無線モジュール評価キットを扱っています。どちらの評価キットもUSB-シリアル変換チップを搭載していて、電源もUSBから供給できるようになっています。

二つに機能的な違いは無いようなので、値段の安い秋月オリジナルの評価キットを購入しました。

RN-42を設定

RN-42評価モジュールをUSB端子に接続したら、ターミナルソフトを起動します。私はUbuntu上のcuコマンドを使用しました2。WindowsならばTeraTermなどが使用できます。接続するときのパラメータは、初期設定では次のようになっています。

設定
速度 115200 bps
長さ 8 bit
パリティ なし
ストップビット 1

RN-42のコマンドは、RN41/RN42 Bluetooth Data Module Command Reference User’s Guideを参照しました。

次のはRN-42との通信例です。ここで「#」で始まる行は操作のコメントを示します。太文字の部分が実際に入力した行です。

$ cu -l /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DQ00380E-if00-port0 -s 115200
Connected.
# コマンドモードに入る。
# $$$の後には[Enter]が不要です。
# それ以外のコマンドでは、コマンドの後に[Enter]が必要です。
$$$
CMD
# コマンドモードに入ると、緑色のLEDが非常に早く点滅します。

# RN-42のfirmware versionを確認。
V
Ver 6.15 04/26/2013
(c) Roving Networks
AOK
# このfirmwareは、HIDモードではGPIO4によるFactory Reset機能が働きません。
# 新しいver. 6.30ではこの問題を解消済みです。

# 工場出荷時の設定に戻す。
SF,1
AOK

# ペアリングに必要なPINを設定する。初期設定では1234となっています。
SP,01234
AOK

# pairing modeに設定する。電源が入ると自動的にペアリングした相手と接続する。
SM,6
AOK

# HIDモードにする。
S~,6
# キーボードに設定する。工場出荷時のデフォルト。
SH,0200
AOK

# デバイスに名前を付ける。
# 名前を付けるコマンドには二種類あります。SNコマンドは、指定した名前がそのまま設定されます。一方S-コマンドは、名前の後にデバイスのMAC Adressの最後2バイト分が加えられます。
SN,RN42HID
# or
S-,RN42HID

# 設定内容は、多くの場合設定コマンドのSをGに変えたコマンドで取得できます。
GP
01234

# リブートして設定を反映させる。
R,1
Reboot!

R,1コマンドでリブートすると、緑色LEDがゆっくりと点滅するようになります。そしてRN-42と別のパソコンとのペアリングを完了すると、ゆっくりと点滅していた緑色LEDが点灯したままとなります。

言うまでもありませんが、RN-42を接続したパソコンでペアリングすると、入力した文字が無限ループしてしまいます。

RN-42のキーボードはUS配列

RN-42の設定とペアリングが完了したら、RN-42に送った文字が相手側のパソコンに入力されることを確認します。

この時、一部の文字が文字化けすることがあります。例えば「”@:」と入力すると、「*”+」となります。これは、キーボードの配列をパソコンが間違って認識しているためです。

HIDプロファイルで送られてくるデータは、「どの文字が入力されたか」ではなく「どのキーが押されたか」というデータです。RN-42は、シリアルに送られてきた「文字」をUS配列のキーボードで「どのキーが押されたか」に変換してパソコンに送ります。そのためパソコンがJIS配列のキーボードとして認識してしまうと一部の文字で文字化けが発生します。

同じ理由から「日本語」などASCII以外の文字列を送ることができません。

レイアウトをUS配列に設定

この文字化けを解消するには、パソコン側の設定を変更してRN-42のキーボードがUS配列のキーボードだと認識させる必要があります。

Windows Vistaに接続したキーボードをUS配列と認識させる方法は、WindowsでBTキーボードだけをUS配列で使う(るびゅ備忘録)を参考にさせてもらいました。

デバイスインスタンスを調べる

まず設定からデバイスマネジャを開いて、HIDキーボードのプロパティを確認します。この詳細タブを開いて「デバイスインスタンスパス」の値を調べます。

rn42-devmng

レジストリを変更する

次にコマンドプロンプトからregeditコマンドを起動して、該当するエントリーの「Device Parameters」に次のエントリーを追加します。

名前 種類 データ
KeyboardTypeOverride REG_DWORD 4
KeyboardSubtypeOverride REG_DWORD 0

rn42-regedit

設定を変更した後で、再度RN-42を起動またはリブートすると入力した文字がパソコンにも正しく入力されるようになります。

RN-42のハマりポイント

コマンドモードに入れない。
コマンドモードへ入るには、電源が入った時またはリブート後60秒以内に時間が制限されています。この時間は、STコマンドで変更できます。またペアリングが完了して接続している場合(HIDの時のみ?)もコマンドモードには入れません。
ファクトリーリセットできない。
RN-42モジュールは、GPIO4をHにして起動し、L,H,L,Hと1秒以上開けて変更することで工場出荷時の設定に戻すことができます。詳しいリセット方法は、RN41/RN42 Bluetooth Data Module Command Reference User’s Guideの3.7 DESIGN CONCERNSの3.7.1.2 FACTORY RESETを参照して下さい。
ただし、firmware ver. 6.30未満では、HIDプロファイルに設定しているとGPIO4によるファクトリーリセット機能が働きません。iPhoneにUSBキーボードを接続するための装置の作成 2:RN-42(mswinvksの忘備録)のコメント参照。この制限は、RN41/RN42 v6.30 RELEASE NOTES – MicrochipにあるようにVer. 6.30で解消されています。
文字化けする。
この問題は、RN-42のキーボードはUS配列を参照して下さい。

脚注

  1. RN-42はMicrochipの製品ですが、元々Roving Networks社が開発していました。そのため製品名にRNが入っているのだと思います。現在Roving Networks社はMicrochips社に吸収されています。

  2. Linuxでシリアルデバイスを指定する時には、/dev/serial/by-id/*を指定するとどれに接続しているか分かりやすいです。

Z80マイコンボードの製作

2015年夏に偶然Z80(正確にはTMPZ84C00)を見つけた事をきっかけに、今更ながらCP/Mマシンを製作することにしました。とりあえず試作回路で上手く行きそうな感触がつかめたので、試作回路にあった無駄な部分を省くと共にデータ通信の高速化を目指した基板を新しく作成しました。基板の設計データはGitHub上に公開しています。

CP/Mマシンに必要な仕様

CP/Mを動かすために必要な仕様は次のとおりです。

  • CPUはi8080とマシン語レベルで互換性があること。
  • メモリはO番地から最低20KiBのRAMがあること。
  • 入出力のためのコンソール端末があること。
  • 最低一台のディスクドライブがあること。
  • 割り込み機能は使用していない。

ちなみにCP/Mが全盛期だった頃のクロック周波数は数MHzと現在の1/1000という世界でした。

以下に各項目を具体的に検討していきます。

CPU

CP/Mが全盛時代にはi8080よりもZ80が一般的に使われていました。よってZ80はi8080とのマシン語レベルでの互換性に問題がないことは確かです。

今回はZ80と言っても現在手に入るZ80の後継チップであるZ84C00と通信機能などを集積したZ8S180を使用します。これらもソフトウェア的にはZ80と互換性があるのでCP/Mを動かすことに問題はありません。

Z80の時代はクロック周波数は数MHzでしたが、Z84C00とZ8S180は20MHz版1が手に入るのでより高速なCP/Mマシンを実現できそうです。

メモリ

必要なメモリー容量は今となっては誤差のような容量です。むしろ少容量すぎて入手できない可能性さえあります。しかし現在Z80の後継CPUが入手可能なように小容量なメモリーも種類が少ないながらもちゃんと販売されています。

秋月電子のページを見ると、小容量とは言っても昔とは比べられ物にならないアクセス速度のSRAMが販売されています。容量についても128KiBで十分すぎます。

HM678127UHJ-12(12ns)とM68AF127B(55ns)のどちらを使うかですが、55nsはほとんど20MHzの1サイクルの相当にするのでこれで十分かと余り考えずにM68AF127B(55ns)を選択しました。

タイミングの検討

余り考えずに選んだメモリですが、M68AF127B(55ns)で最高どのくらいの周波数まで使用できるかデータシートのタイムチャートを確認してタイミングを検討してみました。

Z80のメモリアクセスで一番厳しいのは命令を読み込む時です。通常メモリーを読み込むときはT3の立ち下がりに読み込むのですが、命令を読み込む場合は半クロック早いT3の立ち上がりで取り込まれます。

命令読み込みのタイミングチャート。Z8400/Z84C00 Z80 CPU Product Specificationより引用。
命令読み込みのタイミングチャート。 Z8400/Z84C00 Z80 CPU Product Specificationより引用。

Z84C00とZ8S180を比べるとZ84C00の方が時間がかかるようなので、Z84C00のデータを使ってタイミングを検討します。

Z84C00のデータシートを見るとタイミングは次のようになっています。

  • アドレスの値が確定するのは、T1の立ち上がりから最大57ns。
  • MREQとRDがLになるのは、T1の立ち下がりから最大40ns。
  • データは、T3の立ち上がりの最低12ns前に確定している必要がある。

またメモリのタイムチャートは次のようになっています。

  • tAVQV(アドレスの確定からデータの確定までの時間)は最大55ns。
  • tELQV(チップ選択からデータの確定までの時間)も最大55ns。
  • tGLQV(出力ゲートが開いてからデータが確定するまでの時間)は最大25ns。
メモリーのタイミングチャート。M68AF127Bのデータシートより引用。
メモリーのタイミングチャート。 M68AF127Bのデータシートより引用。

よって確定が一番遅いMREQとRDがLになってからT3が立ち上がるまでの時間は、次の式になります。

40ns(T1の立ち下がりからMREQがL)+ 55ns(EがLからデータが確定) + 12ns(T3立ち上がり前の余裕) = 1.5T(wait無し)

この等式を計算するとT = 71nsとなります。よって最大の周波数は約14MHzとなります。

また同様にZ8S180の場合を計算すると

25ns(T1の立ち下がりからMREQがL)+ 55ns(EがLからデータが確定) + 10ns(T3立ち上がり前の余裕) = 1.5T(wait無し)

となり、T = 60nsとなります。よって最大周波数は16.6MHzとなります。

リセット直後のプログラム

Z80はリセットした時に0番地からプログラムをスタートします。そのためメモリの最初の方はシステムの初期設定やCP/Mをディスクから読み込むプログラムがリセット前に書き込まれている必要があります。そのため一般的にはその領域に電源を切っても内容が消えないROMが配置され、CP/Mが起動する時にはRAMに置き換えるようになっていました。

現在も紫外線で消去できるUV-ROMは手に入ります。しかしそれを使うには、書き込みと消去の装置が必要になります。さらにアクセス速度が遅いのでwait回路が必要になり、RAMとの切り替え回路も必要となります。

そこでメモリは全てRAMにし、リセット直後に必要なプログラムはスイッチを操作してメモリにマシン語を一ステップずつ書き込むというより古い手法を使うことにしました。もっともこれは面倒なので、一ステップずつメモリに書き込む操作は現代的なマイコンに肩代わりしてもらいます。

コントローラ

リセット直後に必要なプログラムの書き込みには使い慣れているAtmelのAVRマイコンを使用します。Arduinoに使われているATmega328を考えていたのですが、これだとピン数が足りずにアドレスなどの値をラッチしておく回路が必要になります。そこで少し値段は高くなりますがアドレスとデータバスを一対一で割り当てられるATmega64aを使用することにしました。

このコントローラは、初期プログラムの書き込みだけでなく、Z80の起動後は次のように端末やディスクドライブのインタフェイスとしても機能します。

ATmega64aはクロック回路を内蔵していますが、少しでも早いほうが良いかと思いZ80に供給するクロックをATmega64でも使用できるようにしました。この場合最大周波数がATmega64aの最大周波数16MHzに制限されます。

ATmega64aのハマりポイント

ATmega64aは、買ってきたままだとATmega64aではありません。

ATmega103というMMUとの互換モードになっています。mainルーチン内だけで済むプログラムだと気が付かないのですが、別の関数を呼び出すとフリーズしてしまい「あれ?」となります。

ATmega64aを使う前には、まずfuse設定を変更してATmega103互換モードをOFF(unprogrammed)にします。

またPFを使うときにも注意が必要です。

ATmega64aはJTAGインタフェイスを持っていますが、そのインタフェイスがPFに割り当てられており、入出力端子としてPFを使用できません。

これも必要ならばfuse設定を変更してOFF(unprogrammed)にするか、プログラム内でMCUCSRのJTDをセットします。MCUCSRのJTDは、誤動作で書き換えてしまうことを防ぐために、二回連続してセットする必要があります2

入出力

Z80の入出力もATmega64aが担います。メモリ上に実行したい入出力操作を書き込んでおき、準備が整ったところでATmega64aに実行を依頼します。

ATmega64aに入出力を要求するシグナルを送る簡単な出力回路も検討しましたが、Z80のHALT信号をATmega64aへのシグナルに使う回路3が試作で上手く行ったので外付け部品が不要なこの方法を使うことにしました。

具体的にはATmega64aに実行してもらいたい入出力操作をメモリに書いておきhalt命令を実行してHALT信号をLにします。ATmega64はHALT信号がLになったことを確認したらメモリ上に書かれた入出力操作を実行して、Z80を割り込みでhalt命令の次から実行を再開させます。RESETでもHalt状態から抜けられますが、通常のRESETと区別する必要や再開後の設定など面倒なので割り込みシグナルを使用することにしました。特にNMIは間違って割り込みを無効にしてしまう心配が無く好都合です。

ただしこのNMIを使ってHalt状態から抜けだすのは、NMIの割り込みベクタがCP/Mの予約領域にあるという問題点があります。そこでhaltを実行する前に割り込みベクタである0x66番地のデータを退避しておき、NMIでHaltから抜けだした後に書き戻すことにしました。またCP/Mでは他の割り込みを使用しませんが、一応入出力操作が完了するまで待つビジーウエイトを入れておきます。

実際のルーチンは次のようになります。

viotrap0:
	ld	hl,(NMI_VECT)	; save value on NMI_VECT
	ld	bc,045edh	; set RETN code
	ld	(NMI_VECT),bc
	halt
viowait:
	ld	a,(virtio_command)
	or	a
	jr	NZ,viowait
	ld	(NMI_VECT),hl

LED

電子工作で動作確認の基本はLチカなので、Z80でLチカを出来るようにするためLEDを点灯できるようにします。

ディスクドライブ

ディスクドライブには、実物のフロッピーディスクドライブやSDメモリカードを使用する方法を考えましたが、データのやり取りが面倒そうなのでパソコン上のディスクイメージに直接アクセスすることにしました。これによりパソコン上で作成したバイナリやテキストファイルをディスクイメージにコピーするだけでZ80側から使用することができるようになります。

実際のディスクイメージへのアクセスは、Z80からATmega64aにディスクの読み書きを依頼し、ATmega64aがパソコン上のプログラムにディスクイメージのデータを読み書きする命令を送ります。

パソコンとATmega64aは、電源供給も兼ねてUSBで接続します。ただしATmega64aはUSBに直接接続できないので、FTDIのFT240XというUSB-FIFO変換チプを使用しました。FT240XはZ80のデータバスに直接接続できるので、データを直接メモリに書き込むことができ最高1Mbyte/secのデータ転送が可能です4

FT240Xは、ATmega64aから見ると8bitパラレルのFIFOデバイスですが、パソコンからはシリアル端末に接続したように見えます。そのためパソコン側のプログラムには特別なライブラリは不要です。例えばターミナルソフトを開いてAという文字を送ると、そのままTF240XのデータバスにAのASCIIコードが現れます。

コンソール端末

コンソール端末は簡略化のため自前でキーボードやディスプレイを持たずにパソコンを昔のディスプレイターミナルとして使用します。この通信にもディスクドライブと同じUSBを使用します。

コンソール端末はATmega64aの要求で動くディスクドライブと違ってパソコン側から非同期でデータが送られます。そのためディスクでのデータと混じってしまわないように非常に簡単なプロトコールでディスクのデータとコンソールのデータを多重化します。

リセット

リセットスイッチはZ80に直接接続しないで、ATmega64aに接続したスイッチが押されたらZ80のリセット端子をLにすることにしました。これによりチャタリング回避やリセット時間を確保する回路をなくすことができます。

基板の設計と組み立て

そうして完成したZ84C00とZ8S180ボードの回路図は次のようになります。

Z84C00を使ったZ80ボードの回路図。
Z84C00を使ったZ80ボードの回路図。
Z8S180を使ったZ80ボードの回路図。
Z8S180を使ったZ80ボードの回路図。

基板はKiCadを使って設計し、プリント基板の製造は格安なElecrowに注文しました5

必要な部品は、秋月電子Mouser千石電商から購入しました。

回路図や基板の設計データはGitHub上に公開しています。これをフォークしてより素晴らしい物を作る基板としてもらえると幸いです。

Z84C00用のプリント基板

Z8S180用のプリント基板

プリンプ基板は10枚単位での注文なため何枚か基板が余っています。もし欲しいという方がおりましたら送料のみでお分けいたします。ただし基板制作後にも回路図と基板設計に手を入れているので、GitHub上のデータとは多少パターンなどが異なります。

次は

Z80ボードが完成したので、次はATmega64aのプログラムとCP/MのBIOSを作成してCP/Mを動かします。

脚注

  1. Z8S180は20MHz版の他に30MHz版も存在します。ただし値段が急に高くなるので今回は20MHz版を購入しました。

  2. JTDビットは、正確には4CPUサイクル以内に2回セットする必要があります。

  3. halt命令をトラップに使用するアイデアは我ながら冴えた方法だと思ったのですが、既にネット上に公開されていました。T:(@T_colon) 部品を減らす工夫 – neko Java Home Page – GMOとくとくbb

  4. 試作段階ではパソコンとの接続に一般的なUSB-シリアル変換チップを使用しましたが、これでもデータ転送がそれほど遅くはありませんでした。

  5. 数千円と約1週間(国際宅急便使用)でプリント基板を製造してもらうことができます。精度などでは国内のしっかりした業者には及ばないのかも知れませんが、個人的に使用するには全く問題がないレベルです。手配線や自分でプリント基板を作る手間や時間を考えれば、このサービスを使わない手はありません。

KiCadの情報源メモ

この記事はQiitaのKiCad Advent Calendar 2015の17日目です。
←16日目(kinichiroさん)・17日目・18日目(starfort-jpさん)→

すみません、全く画像がない非常に地味な内容です。

KiCadに関する情報源は色々あると思いますが、今回は私がよく参照させてもらっているサイトを紹介します。「これを抜かしたらモグリだ」1というようなサイトがあったらぜひ教えてください。

静的な情報源は、KiCadを使う上で基礎となるサイト(と本)です。頭からお尻まで精読しないまでも、全体を流し読みしておくだけで基礎力がアップします。特にKiCad公式ドキュメントをこの夏に読む機会を得られたことは収穫でした。

動的な情報源は、回転寿司のように目の前をいろんな話題が流れてい行くので、お茶を飲みながらプラプラ見て回るだけでKiCadに詳しくなった気になれます。

マニアックな情報源は、KiCadを使う上で特に役立つということは ありません 。でも、バグらしきものに気がついてしまったり2、この夏から秋にかけての「新しいKiCadはいつ出る?」という時には欠かせません。

静的な情報源

KiCad公式ドキュメント 日本語ほか
説明するまでもありませんがKiCad 4.0のドキュメントです。オリジナルと翻訳ともGitHubで管理されているので、間違いを見つかたらPullRequestで指摘できます。
一人で始めるプリント基板作り(SP No.127) 日本語
この本(+ CERNがサポートというニュース)でKiCadを使い始めました。KiCad 4.0が公開された今となっては一部操作など異なっている部分は有りますが、Webより全体の流れをつかみやすくて今でも役に立つと思います。
KiCad.jp Wiki 日本語
一通り見ておくと、問題にぶつかった時に「そんなことが書かれていたな」となり、無駄に悩まなくてすみます。特に過去に出た質問には助けられます。
KiCad Scripting Reference Manual 英語
Pythonスクリプトのドキュメントってこれだけ?
KiCAD pcbnew scripting 英語
Pythonスクリプトを実際に書くときには、こっちのリファレンスのほうが重要そう。
Kicad/FAQ 英語
そんなのもあるってことで。

動的な情報源

kicad.jp –Twitter 日本語
KiCadに関するツイートを ボットかと思うような早さ でリツイートする(ボット?)ので、フォローしているだけでKiCadに詳しくなれます。誰かが困ってることをツイートすると、解決策を提示しているのをよく見かけます。
KiCad.info Forums 英語
KiCadの使い方・機能に関するフォーラム。他人の困りごとは蜜の味。見ているだけでそんなことができるのかと頭でっかちになれます。Twitter(@ContextualElec)をフォローしていると、新規投稿のタイトルをチェックできます。
kicad-users 英語
KiCadユーザのYahoo!グループ。私はたまに見るている程度です。
Questions for KiCad 英語
KiCadプロジェクトへの質問と問題報告。新しいメッセージは少ない。

この他に日本語でのメーリングリストがあるのですが、現在の所ネット上にアーカイブが公開されていません。

マニアックな情報源

kicad-developers team mailing list archive 英語
タイトルのようにKiCad開発のメーリングリストです。
kicad-lib-committers team mailing list archive 英語
KiCadの部品とフットプリントのコミッターを主としたメーリングリストです。
KiCad bugs 英語
KiCad本体のバグ報告です。
~kicad-product-committers/kicad/product 英語
KiCadのコミット記録です。ほとんど修正のコミットですが、KiCadがどんどん改善されているのが見えて面白いです。
  1. 「モグリ」って21世紀では死語でしょうか。

  2. バグ報告でKiCadをより良く – Qiita KiCad Advent Calendar 2015の11日目

KiCadのBOM出力プラグイン書いてみた

この記事はQiitaのKiCad Advent Calendar 2015の8日目です。

←7日目(kinichiroさん)
・8日目・9日目(starfort-jpさん)→

KiCad 4.0では、プラグインを使用してBOMを出力するようになりました。この変更によりユーザがプラグインを作成してBOMの内容を簡単に変更できるようになりました。

ネットを見回すと、BOM情報を元にDigi-KeyMOUSERなどの情報を参照してコストを計算するプラグインKiCostなどが有ります。

ここまでの高機能は必要ありませんが、部品の発注(買い物)と実装を少しだけ便利にするBOMプラグインを書いて使っています。標準のBOM出力プラグインに毛が生えた程度の簡単なものですが、自分ではとても楽をできている気がします。

ここではプラグインと言ってもただのフィルタープログラムで、「こんなだったらもっと便利なのを作れるぞ」という切っ掛けにしてもらえたらと思います。

プラグインを作成する言語

KiCadのディレクトリを見ると、CSV形式のBOMファイルを出力するためのプラグインなど何種類かのプログラムが標準で添付されています1。これらのプラグインは全てXSLTで書かれていて、私には理解不能です。

そこで基本に戻ってKiCadのドキュメントを参照すると、次のように書かれておりXMLファイルを読めればどの言語で書いても良いことがわかりました。

中間ネットリストファイルに後処理のフィルタリングをすることで、部品表 (BOM) ファイルのような他形式のファイルを生成できます。この変換はテキストからテキストへの変換なので、この後処理フィルタは、Python や XSLT など、入力として XML を扱える処理系で記述できます。

KiCadの標準的なスクリプト言語はPythonですが片言しか話せないので、今回はRubyを使用してプラグインを作成しました。

中間ネットリストファイルの構造

中間ネットリストファイルは、普通のXMLファイルです2。この大まかな構造は、次のように5つの大きなエレメントからなっています。

<?xml version="1.0" encoding="utf-8"?>
<export version="D">
  <design>
    ...
  </design>
  <components>
     <comp ref="P1">
      <value>CONN_4</value>
      <libsource lib="conn" part="CONN_4"/>
      <sheetpath names="/" tstamps="/"/>
      <tstamp>4C6E2141</tstamp>
    </comp>
    ...
  </components>
  <libparts>
    ...
  </libparts>
  <libraries>
    ...
  </libraries>
  <nets>
    ...
  </nets>
</export>

BOMファイルの出力に必要な部分は、主に<components>エレメントです。この中に部品のリファレンスや値が入っています。<libparts>エレメントには部品の説明などが入っているので、詳しい説明入りのBOMファイルを作成するなどに使えそうです。

プラグインを書いてみた

今回は単純に<components>エレメントの情報を使って部品の注文(買い物)と実装を少しだけ便利にするBOMプラグインを書いてみました。

部品の注文には、部品名と個数が必要です。そこで注文用には同じ部品を数え上げて、部品ごとの個数をBOMファイルに出力するようにしました。

注文(買い物)用のBOM。部品と必要数を表にしています。
注文(買い物)用のBOM。部品と必要数を表にしています。

部品を実装する時に多くの方は同じ部品、例えば1kの抵抗を5つとかまとめて実装しているのではないでしょうか。そこでリファレンスの番号に関係なく同じ値の部品でグループを作るようにソートしてBOMファイルに出力するようにしました。

実装用のBOM。リファレンス順でなく、同じ部品がグループを作るように並べています。
実装用のBOM。リファレンス順でなく、同じ部品がグループを作るように並べています。

実装用と注文用のBOMファイルをCSV形式で個別に書き出しても良いのですが、結局表示するときにはExcelを使用するので一つのExcelファイル内で別シートとして書き出すようにしました。Excel形式での書き出しにはaxlsxライブラリを使用しました。

こうして書き上げたプラグインはGistで公開しているbom2excel.rbを参照してください。

プラグインのインストールとBOM出力

今回書いたプラグインは外部ライブラリーを使用しているので次のコマンドで必要な外部ライブラリー(axlsx)をインストールしておきます。

sudo gem install axlsx

プラグインを使用するには、KiCadにプラグインを登録します。

  1. Eeschemaを起動してBOMアイコンをクリックする。
  2. Add Pluginボタンをクリックしてプラグインを選択する。
  3. Command line欄を次のように編集する。
/???/bom2excel.rb "%I" "%O.xlsx"

???の部分はプラグインを置いてある場所に依存して変わります。

EeschemaのBOMアイコンをクリックすると表示されるダイアログ。ここでプラグインの登録とBOMの作成を行います。
EeschemaのBOMアイコンをクリックすると表示されるダイアログ。ここでプラグインの登録とBOMの作成を行います。

これでプラグインがKiCadに登録されたので、GenerateボタンをクリックするとBOMファイルがプロジェクトディレクトリ内に作成されます。

こんな簡単なプラグインですが、このBOMリストで部品の買い物と実装がだいぶ楽になりました。ただ実装するときにも必要な部品の個数が必要なのと、買い物の時にあまり馴染みのないリファレンスのプレフィックスだと「何だったかな?」となるので名前で表示するように今後のPythonの勉強を兼ねて改良したいと考えています。

最後に

このようにKiCad 4.0では、慣れた言語で自由にBOM作成プラグインを作成できるようになりました。私の作成したプラグインは非常に簡単なものですが、今後KiCostのようにより便利なプラグインがたくさん出てくることを期待しています。

脚注と参照

  1. Linux版ではプラグインが/usr/lib/kicad/pluginsに、WindowsではC:\Program Files\KiCad\bin\pluginsに有ります。

  2. 中間ネットリストファイルの構造 – Eeschema

UbuntuにKiCad 4.0をインストール

KiCad 4.0はUbuntuの標準パッケージには含まれていないのでPPAからインストールする。

KiCadは、Ubuntu 14.04と15.04の標準パッケージに登録されています。ただしこのパッケージのKiCadは、まもなく公開される予定の版に比べてかなり古い版です。そのためまもなく公開されるというKiCad 4.0で使用できる便利な機能がいろいろ使えません1

これからKiCadをUbuntuで使用するのであれば、KiCad 4.0をPPAからインストールすることをオススメします。また今月末に公開予定のUbuntu 15.10では、KiCadが標準パッケージに含まれなくなったかもしれません2。これが間違いでないとすると、Ubuntu 15.10(wily)でKiCadを使うにはPPAからインストールするしか選択肢はありません。

まだリリース前で動作が不安定かもと思われがちですが、約一年開発版を使い続けてきた感じでは確かにちょっと不安定になったことも有りますが要所要所で保存操作を忘れなければ得られるメリットのほうが大きかったです。

KiCad 4.0のインストール

KiCad 4.0のインストールには、ソースからビルドする方法とPPAからパッケージをインストールする方法の二通りが有ります。ここでは最初にPPAを使ったインストール方法を説明します。普通はこの方法で十分ですが、オプション設定を変えたい場合に必要なソースからビルドする方法も説明します。

KiCad 4.0をPPAからインストール

KiCadのPPAパッケージには、PPA for KiCad daily buildsを使用します。

インストールする方法は次のとおりです。

# 4.0のリリース版をインストールするとき。
$ sudo add-apt-repository ppa:js-reynaud/kicad-4

or

# 開発版(daily build)をインストールするとき。
$ sudo add-apt-repository ppa:js-reynaud/ppa-kicad

# 以下は4.0でも開発版でも共通
$ sudo apt-get update
# メニュー等を日本度で表示するためには、kicadだけでなくkicad-locale-jaも必要。
$ sudo apt-get install kicad kicad-locale-ja

必要な環境変数も自動で設定されるはずですが、一応確認しておきます。

$ env | grep KIGITHUB
KIGITHUB=https://github.com/KiCad

KiCad 4.0をソースからインストール

KiCad 4.0をソースからインストールすることも簡単ですが、ソースファイルのダウンロードとコンパイルに非常に時間がかかります。そのことを覚悟してとりかかる必要が有ります。

ソースからインストールすると言ってもインストール用のスクリプトが用意されているので、それを実行するだけです。

  1. インストールスクリプトをダウンロードする。
  2. (オプション)インストールスクリプトのオプション設定を変更する。
  3. インストールスクリプトを実行する3。このスクリプトを実行するだけで、ソースファイルのダウンロードからコンパイルとインストールまで自動的に実行されます。
    $ sh kicad-install.sh --install-or-update
    

    途中必要なパッケージやKiCadの各プログラムをインストールするために管理者権限が必要になるので、sudoによるパスワードの入力が求められます。

参照

  1. KiCad 4.0で加わった便利な機能を使うにはOpenGLが必須ですが、cairo表示を使うことで少しもっさりとはしますが同じ機能を使用することができます。

  2. Ubuntuパッケージの検索検索結果にUbuntu 15.10(wily)向けのkicadパッケージが見つかりません。kicad を名前に含むパッケージ

  3. バージョン管理システムからソースを持ってくるので、ソースを全く持っていない最初は特にソースのダウンロードに時間がかかります。

便利な抵抗入りLED

黙ってつなげばピカリと光る抵抗入りLEDはとっても便利。特に試作では。

LEDと抵抗は常にペア

LEDを使用する時には、必ずLEDに流れる電流を制限する必要があります。流れる電流を制限するためには定電流ダイオードが使われることもありますが、一般的には抵抗が使われます。

この抵抗値を大きくすると流れる電流が少なくなりLEDが暗くなり、反対に小さくすると電流が多くなり明るくなります。

抵抗値を決める基準は?

では、その明るさすなわち抵抗の値は何を基準に決めていますか? 流せる最大の電流値はデータシートを見れば分かるのですが、状態を示すステータス表示には明るすぎます。

私はLEDの用途がステータス表示ばかりなのでそれほど明るい必要がなく、ONとOFFを区別できればOKです。明るさが数倍違っても構いません。そこでデータシートを見て最大定格電流の1/4から半分位を「何となく」流すようにしています。たいていここから抵抗値を増やしてさらに電流を制限することがほとんどでした。

抵抗入りLEDは便利

こんな私の使い方には秋月電子で見つけた抵抗入りLED1はピッタリの部品です。設計する度にデータシートを確認して抵抗値を計算する手間を省けます。特にブレッドボードで試作する時には抵抗が不要なので配線の手間も省けて助かります。

またLEDの樹脂が曇っているので、斜めや横から見ても点灯しているかいないかが一目瞭然なのも気に入りました。

LED-with-R

ただ最近は3.3Vを使うことも多くなったのですが抵抗入りLEDには3.3V用がありません。しかし5V用を3.3Vの回路に使っても問題ありません。データシートによると電流値が半分近くになります2が、それほど明るさに違いが無いように感じます。

OSR6LU5B64A-5Vデータシートより引用
OSR6LU5B64A-5Vデータシートより引用2

電子工作の第一歩、LチカでLEDを使うときには電流制限の抵抗が必要ということを覚えたら、もう後は抵抗入りLEDの一択で良いのではないかな。

参照

発売から40年経っても手に入るCPU Z80

ZilogのZ80は1970年代中頃に発売されたCPUですが、約40年経った現在でもほぼ当時の形で手に入ります。偶然見つけて記念にと購入しましたが、せっかくなのでCP/Mマシンを作ることにしました。

夏の暑さ真っ盛りの8月初めに大阪・日本橋(でんでんタウン)にあるシリコンハウスへ買い物に行ったら、Z80互換で在庫限りというポップを付けた東芝製TMPZ84C00というDIP-40の大きなICが売られていました。見つけた時は、Z80互換と言っても型番が非常に似ているので秋月電子で販売しているZ80ボードのCPUみたいなPIOやタイマーが内蔵されたものだろうと思いました。

しかしスマホでデータシートを探してみると、TMPZ84C00はPIOのたぐいは一切ない教科書にあるような完全にCPUの部分のみでした。さらにピン配列までZ80と同じです。

TMPZ84C00それでなんだか懐かしくなり、「在庫限り」にもつられて安かったので記念に2つ買って帰りました。

Z80とは

一応Z80が何か説明すると、Z80は8bit CPUのIntel 8080を改良したZilogの8bit CPUです。ピン配列にi8080との互換性はありませんでしたが、マシン語レベルではi8080の上位互換で、Z80にはいくつかの便利な命令が追加されていました。またDRAMの使用を前提としたリフレッシュ機能が組み込まれていために、(当時の感覚で)大容量のRAMを搭載しやすくなっていました。

その後Intelもi8080を改良したi8085を出しましたが、1970年代後半から16bitパソコンのIBM PCやNECのPC-98シリーズが普及する80年代中頃までパソコンのCPUといえばZ80でした。

21世紀のZ80

TMPZ84C00の資料をググると、東芝製TMPZ84C00のセカンドソース1であるZilog Z84C00は現在でも普通に販売されていました2。購入したTMPZ84C00のクロック入力は最大6MHzでしたが、Z84C00には最大20MHzのより高速なクロックに対応する製品もあることを見つけました。

Z84C00

また1980年代中頃に日立がZ80アーキテクチャを拡張して乗算命令などの追加とMMUやUARTなどを内蔵したCPU HD64180を開発しました3。これも製造されていませんが、ほぼ同じ4ものをZilogがZ180シリーズとして現在も製造しています。

このZ180シリーズには何種類か有りますが、最新のものはZ8S180と低電圧対応のZ8L180です。昨年Legacy8080というコンピュータが発売されましたが、そのLegacy8080に使われているCPUがZ8S180です。

Z8S180

発売から40年も経とうというのに未だに販売されているZ80は、もう生きた化石と言っても良いかもしれません。

CP/Mマシンを作ろう

記念にと購入したTMPZ84C00ですが、ただ見ているのではもったいないので、1980年代前半の気分5CP/Mマシンを作ることにしました。さらに可能ならば、最近公開されたFUZIXを移植できたら面白いかな。

CP/Mマシン製作にあたって一番の問題点は、CP/M自体を手に入れられるかです。昔買ったディスクは捨ててしまったし、新規にCP/Mを購入することもできなさそうです。しかし調べてみると現在では逆アセンブルしたCP/MのソースコードがThe Unofficial CP/M Web site公開されています6

参照

  1. Z80はZilogがオリジナルなのに、現在はZ80のセカンドソーサーになっているというのはなんとも皮肉。さらにセカンドソーサーと言っても、オリジナルの方は既に製造中止とは。

  2. 国内でZ84C00を扱っているところは見つかりませんでしたが、米国の部品通販会社Mouserから購入可能です。

  3. 現在データシートはPDFファイルでダウンロードするのが当たり前ですが、30年位前はもちろん紙に印刷されてものでした。それを商売にならない学生にそれも無料で送ってくれたのは、バブルな世代だったからでしょうか。まだ当時の資料を持っていますが、その1つがHD64180のマニュアルです。HD64180-manual

  4. Z180はHD68180のセカンドソースみたいなものですが、内蔵IOのアドレスがオリジナルのHD68180とは異なっています。そのことを見落としていて、後にハマることとなる。

  5. もっとも自分が制作したのは1990年代中頃で、既にi486でFreeBSDを普通に使える時代でした。Linuxも割と普及しだした頃かな。

  6. 非公式と言いながらLineoというCP/Mの所有者から配布が許可されている不思議なサイト。Thank you, Tim Olmstead. Tim Olmstead Memorial Page

Githubに公開されているKiCadのフットプリントを使用する方法

フットプリントライブラリにGithubレポジトリURLを指定することで、公開フットプリントライブラリをKiCadから直接使用できる。

KiCad 4.0のフットプリントはパッケージに含めて配布するのでなく、Githubで公開されているライブラリをアクセスするようになりました。その結果パッケージのアップデートに関係なく常に最新のライブラリを使用できます1

またGithubを直接アクセスできるようになったので、公開されている自作ライブラリーもダウンロードすること無く直接使用できるようになりました。これでライブラリーを管理する手間が大幅に削減できます。

ここではGithubで公開されている自作フットプリントライブラリをKiCadで使用する方法を説明します。

公開フットプリントライブラリのURLを設定

公開フットプリントライブラリを使用するには、その場所をKiCadに教える必要があります。そのための設定方法は次のようになります。

  1. フットプリントエディタを起動する。
  2. 設定メニューの「フットプリントライブラリの管理」を選択して「PCBライブラリ一覧」ダイアログを開く。
  3. 使用したい公開フットプリントライブラリをこのプロジェクトだけで使いたいのか、他のプロジェクトでも使用したいかに応じて「プロジェクト固有のライブラリ」と「グローバルライブラリ」のタブを選択する。
  4. 「ライブラリの追加」ボタンをクリックする2
  5. 追加された欄に次の表のように指定する。
  6. 「OK」ボタンをクリックして「PCBライブラリ一覧」ダイアログを閉じる。
別名(ニックネーム) ライブラリのパス プラグインの種類 オプション 説明
識別できる好きな名前。ここの設定内容は、ライブラリーを選択するときに使用されます3 公開フットプリントライブラリのレポジトリのURL4。環境変数を参照することも可能です。 Github 空欄または別名と同様に簡単な説明。

github-lib-setup

フットプリントエディタで設定方法を説明しましたが、基板エディタ(Pcbnew)やコンポーネントとフットプリントを結びつけるCvpcbからもこれと同様に設定できます。

公開フットプリントライブラリを使用できるか確認

設定した公開フットプリントライブラリを認識できているかフットプリントビューアで確認してみます。

  1. 基板エディタ(Pcbnew)やフットプリントエディタのアイコンメニューからICに虫眼鏡の「フットプリントビューアを開く」をクリックする。footprint-viewer-icon
  2. 一番左のカラムから追加した公開フットプリントライブラリを選択する。
  3. 右隣のカラムに登録されているフットプリントの一覧が表示されたらOKです。この時にGithubにアクセスするので表示されるまで多少時間がかかることがあります。
  4. 登録されているフットプリントを選ぶと、その内容が表示されます。

footprint-viewer

Githubのフットプリントライブラリを修正可能に

KiCadはGithubレポジトリを操作できないので、Githubにあるフットプリントライブラリは読み込み専用となります。

しかし修正したフットプリントをローカルに保存するオプションを有効にすると、Githubのフットプリントを修正できるようになります。この時修正されたフットプリントはオプションで指定した手元のフォルダ(ディレクトリ)に保存され、Githubの内容より優先的に使用されます。

オプションで指定するフォルダは空でも問題ありませんが、Githubのレポジトリからクローンしてきたフォルダを指定すると、変更内容を簡単にGithubに反映できます。

たとえ自分がレポジトリに書き込み権限があっても同じです。その変わり変更内容をローカルに保存してGithubの内容より優先して使用させることができます。

Githubのフットプリントライブラリを修正可能にするには、オプションを次のように指定します。

  1. 上の「公開フットプリントライブラリをURLを設定」と同じく「PCBライブラリ一覧」ダイアログを開く。
  2. 「発見されたライブラリの一覧」から修正可能にしたいライブラリを選択する。
  3. 「オプション」ボタンをクリックする。
  4. 「追加するオプションの選択」から「allow_pretty_writing_to_this_dir」を選択して「選択したオプションの追加」ボタンをクリックする。
  5. プラグイン設定で「allow_pretty_writing_to_this_dir」の定数に修正したフットプリントを保存するフォルダ(ディレクトリ)を入力する。このフォルダの名前は、KiCadのルールに従い*.prettyにする必要があります。
  6. 「OK」をクリックして設定したオプションを保存する。

github-lib-option

参照

  1. デメリットとしては、Githubにアクセスするのでネット接続が必須になったことと、フットプリント一覧の取得に少し時間がかかることです。このデメリットを回避するためにフットプリントライブラリをダウンロードして使用することも可能です。

  2. 「ウイザードを使用して追加」でも良さそうですが、ユーザが公開しているレポジトリには使用できないようです。

  3. 表示される名前の順番はここでの位置ではなく、名前をASCIIコード順に並べたものになります。すなわち数字で始まるもの、アルファベットの大文字で始まるもの、小文字で始まるものという順番です。

  4. レポジトリの直下ではなくサブディレクトリにフットプリントが置かれていることがありますが、その場合もライブラリのパスにはレポジトリのURLを設定します。

KiCad 4.0でのBOMファイル作成方法

KiCad 4.0でBOMファイルを作成するには、XMLファイルを変換するプログラムのインストールと設定が必要です。設定が済んでしまえばBOMアイコンをクリックしてダイアログを開き、変換プログラムを選択して生成ボタンを押すだけです。

先日RCが公開されたKiCad 4.0は、これまでの安定版から色々な点で変更されています。ここで紹介するBOM(Bill of Materials、部品表)の作成方法もこれまでとは変わっています。

これまでの安定ではKiCad自身がBOMファイルを作成していましたが、4.0以降はKiCadが作成するXMLファイルを他のプログラムで変換してBOMを作成します。そのため柔軟性が増し、CSV形式の単純なファイルを作成するだけでなくDigi-Keyなどの通販サイトを参照して自動的にコストを計算する変換プログラムkicostなどが作成されています。

ここでは単純に部品をリストアップしたCSV形式のBOMファイルの作成方法について説明します。

CSV形式のBOMファイル作成

CSV形式のBOMファイルは、KiCadが作成するXMLファイルをユーザが指定したプログラムで変換して作成します。そのためBOMファイルを作成するにはXMLファイルを変換するプログラムを事前にインストールしておき、それをKiCadから呼び出せるようにする設定が必要です。

変換プログラム(プラグイン)のインストール

Windowsの場合は、XMLファイルをCSV形式のBOMファイルに変換するプログラム(bom2csv.xsl)と、このXSLプログラムを実行するエンジン(xsltproc)の両方共配布パッケージに含まれています。そのためインストール作業は特に必要ありません。

Windows版に含まれるxsltprocは、BOMファイルを作成しようとするとエラーになって作成できないことがあります。これに対するworkaroundを最後に書いておきます。現在はRC1の段階ですので、公開までには修正されると思います。

ただしUbuntuの場合はXSLプログラムのみが配布され、それを実行するエンジンはパッケージに含まれていません。そこでエンジン(xsltproc)を、次のコマンドでインストールします。

sudo apt-get install xsltproc

KiCad(Eeschema)の設定

必要なプログラムをインストールしたら、KiCadの回路設計プログラム(Eeschema)から呼び出せるように設定します。

設定の手順は、次のようになります。

  1. 回路設計プログラムのBOMアイコンをクリックしてBOMファイル作成ダイアログを表示させる。BOM_dialog
  2. 「プラグインの追加」をクリックして、XMLファイルを変換するプログラム(bom2csv.xsl)を選択する。このプログラムは、Windowsでは C:\Program Files\KiCad\lib\kicad\plugins に、Ubuntuでは /usr/lib/kicad/plugins にあります。Select_plugin
  3. プラグインを選択すると、プラグイン欄に表示す名前を聞かれるので、入力して「OK」をクリックする。プラグイン名は、後で修正することも可能です。

これで設定は終了です。

変換するコマンドは、コマンドライン欄に表示されています。必要であればこれを修正します。

xsltproc -o "%O.csv" "C:\Program Files\KiCad\lib\kicad\plugins\bom2csv.xsl" "%I"

ここで%Iは、BOMファイルの元となるKiCadが作成するXMLファイル名に置換されます。作成されるBOMは、-oで指定されたファイルに書き込まれます。%Oは、%Iから拡張子を除いた部分ですので、CSV形式のファイルだと分かるように拡張子を加えています。

”“(ダブルクォーテーション)はなくてもたいてい問題ありませんが、パスやファイル名に空白があった時でも正しく一つの引数と認識させるためにダブルクォーテーションで囲ってあります。

BOMファイルの作成

一度設定してしまえば、BOMファイルの作成は簡単です。

BOMファイルの作成に使う変換プログラムをプラグイン欄から選択して、「生成」ボタンをクリックするとBOMファイルが作成されます。%Oは、それぞれのプロジェクトフォルダのパスを含んでいるので、基本的にプロジェクトフォルダにBOMファイルが作成されます。

Windows版RC1に付属のxsltprocが使えない問題のworkaround

現在配布されているKiCad 4.0のRC1に含まれるxsltprocは、BOMファイルを作成しようとすると次のエラーがプラグイン情報欄に表示されBOMファイルを作成できないことがあります。

コマンドラインで実行:
xsltproc -o "C:/Program Files/KiCad/share/kicad/demos/pic_programmer/pic_programmer" "C:/Program Files/KiCad/lib/kicad/plugins/bom2csv.xsl" "C:/Program Files/KiCad/share/kicad/demos/pic_programmer/pic_programmer.xml"

コマンドエラー. リターンコード 11

エラーメッセージ:
I/O error : Invalid argument
I/O error : Invalid argument

回避策

この問題の回避策には、次の3つの方法があります。

  1. プロジェクトのパスと名前を変更する12
  2. xsltprocと異なる変換エンジンを使用する3
  3. xsltprocを置き換える4

プロジェクトのパスと名前を変更する

Windows版に付属のxsltprocがエラーになるのは、プロジェクトのパスと名前に空白が含まれる場合です。空白が含まれても良いようにダブルクオーテーションで%Oと%Iを囲っているのですが、上手く機能しないようです。

そこでプロジェクトのパスに空白が含まれる場合は、プロジェクトフォルダーをパスに空白が含まれない場所に移動させます。プロジェクト名に空白が有る場合は、名前から空白を取り除きます。

xsltprocと異なる変換エンジンを使用する

ダブルクオーテーションで囲まれた空白入りのパスと名前を上手く扱えないのは、Windowsの問題ではなくアプリケーションに問題が有るようです。そこで上手く扱える別のXSL変換エンジンをxsltprocに変えて使用します。

変換エンジンにはいくつかありますが、インストールが簡単なSaxonHEを使用します。

  1. ネイティブ版SaxonHEをダウンロードする。ダウンロードページに紛らわしい広告が表示されるので注意。
  2. ダウンロードした自己解凍ファイルを実行してをSaxonHEをインストールする。
  3. コマンドライン欄のxsltprocを次のように修正する。

    “C:\Program Files\Saxonica\SaxonHE9.6N\bin\Transform.exe” -t “%I” -xsl:”C:\Program Files\KiCad\lib\kicad\plugins\bom2csv.xsl” -o:”%O.csv”

BOMファイルの作成方法は、xsltprocの時と同じです。

参照

Bitscope Microを購入

ロジックアナライザー兼オシロスコープのBitscope Microを購入しました。日曜日の注文でしたが、注文完了から4日で到着しました。

電子工作をしているとやはりある程度の測定機器が欲しくなります。これまではデジタルな変化だけを見ていれば良かったの秋月電子で買ったパソコンにつないで使う16chのロジックアナライザーで十分でした。しかし周期的に変動するアナログ信号を取り込もうとするとオシロスコープが欲しくなります。

探した中で一番安かったのは、Amazonで見つけたヴァーチュアル オシロスコープ DDS-120(サインスマート)でした。値段は約8000円にもかかわらず本格的なプローブが付属しているのも魅力的です。一応ロジックアナライザー機能も付いているとのことです。カスタマーレビューでも値段を考えてある程度割り切ればまずまずと言ったところです。

ほぼこのヴァーチュアル オシロスコープ DDS-120に決めかけてカートにまで入れたのですが、もう少し探したところSWITCH SCIENCEさんのブログにBitscope Microの事が紹介されていました。Raspberry Piにピッタリ=Linuxでも使用できるということで俄然Bitscope Microに興味が湧いてきました。WindowsとMax OS Xにも対応です。

Bitscope Microとは

Bitscope社は、これまでUSB接続のBitscope Model 10という2chのアナログ入力と8chのデジタル入力を持ったロジックアナライザー兼オシロスコープなどを販売していました。この春に発売されたBitscope Micro(USB BITSCOPE 05)は、ケースを省略したりデジタル入力のチャンネルを6chに削減した廉価版です。

廉価版なのでアナログ入力のバンド幅が100MHzから20MHzに狭まっていますが、デジタル入力の解像度は40MSample/secで変わりありません。またアナログ入力はデジタル入力としても使用できるので、アナログ入力が不要であれば8chのデジタル入力としても使用できます。プロトコルアナライザーとして使用できるのはデジタル入力専用の6chのみですが、対応プロトコールの種類もSPI, CAN, I2C, UARTと変わりありません。

ケースが省略されていると基板がむき出しで感電する危険性があるので、基板全体が熱収縮チューブで保護されて触っても問題ないようになっています。USBケーブルを接続した状態でシュリンクされているのでケーブルを外すことはできません。これを外せるとよりコンパクトに保管できるのに。

Bitscope Microを注文

Bitscope Microの値段はUS$145+送料で、Amazonで見つけたオシロスコープに比べると倍近い値段です。でもLinuxで使えてプロトコルアナライザー付きのロジックアナライザーとしても使えると聞いたらこれを買わずにはいられません。

発送方法は、最短2日で届くExpressから平均5日かかるStandard(保険なし)までいくつか選択肢がありますが、今回はおススメだった3日で届くPriorityで発送してもらいました。

支払方法はクレジットカードの他にも選べるようですが、オンラインでは行えないようなので相手を信じてカード払いにしました。価格は日本円で表示させることもできますが表示だけで、カードへの請求はオーストラリアドルで行われます。そのため表示される日本円での額と実際の支払額が為替の変動により多少上下します。

ということで8月10日(日曜日)の深夜に注文したところ、翌11日の発送で14日に到着しました。請求額は、Priority送料を含めてAU$178(17140円)でした。

Bitscopeの内容物

Bitscope Microは、文庫本サイズの箱に入って届きました。内容物は次の通りです。

2014-08-22_1

  • Bitscope Micro本体
  • ICクリップ(グラバークリップ)付きリード線10本
  • 簡単な説明書
  • 端子の説明カード
  • 仕様書

ドライバーとオシロスコープやロジックアナライザーなどのソフトは、Bitscopeのサイトからダウンロードします。