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

CGIプログラムが動かずにソースが表示される

設定は正しいのにCGIプログラムのソースが表示されてしまう原因は、mod_cgiがロードされていなかった。

Apacheを使ったWebサーバを新規にセットアップしたらCGIプログラムが動かないで、そのソースコードが表示されてしまう問題にぶつかりました。

まず最初に考えるのは、設定が間違っているのではないかということです。そこで既に動いているサーバから設定ファイルを持ってきて見ましたが、やはり新規サーバではソースコードが表示される問題が発生していまします。

ググっても有用なページを見つけることができずさんざん悩んでしましました。

仕方なしに一息入れて頭をリセットすると、設定ファイルに現れない設定が間違っていることに気が付きました。

ApacheでCGIを有効にする設定

見落としていたCGI設定のが何であったかという前に、CGIを有効にするApacheの設定を再度確認しておきましょう。

ApacheでCGIを有効にする設定にはに二種類あります1

  1. ScriptAliasを使う。
  2. HandlerとExecCGIを使う。

UbuntuのパッケージでApacheをインストールすると、設定ファイルは/etc/apache2/sites-enabled/000-default.confです。このファイルには最初から<VirtualHost>指定が書き込まれているので、この中にCGIの設定を挿入します。

ScriptAliasを使う。

ScriptAlias /url/ /abs/dir/

とすると、/abs/dirにある実行ファイルが全てCGIプログラムと認識されます。そして/url/cgiにアクセスすると、/abs/dir/cgiが実行されます。

/abs/dirは、通常のファイルとしてアクセスできないようにhtmlのDocumentRoot外に置きます。また/abs/dirの実行ファイルは全てCGIとして実行できてしまうので、CGIスクリプトのバックアップファイルが残っていたりしないよう注意する必要が有ります。

HandlerとExecCGIを使う。

特定の拡張子を持ったファイルのみをCGIプログラムとして実行したいときは、こちらの設定を使用します。

<Directory /var/www/html/cgi-dir>
  AllowOverride None
  Options +ExecCGI
  AddHandler cgi-script .rb .sh
</Directory>

# or

<Location /cgi-dir>
  AllowOverride None
  Options +ExecCGI
  AddHandler cgi-script .rb .sh
</Location>

この設定では、/var/www/html/cgi-dirにある*.rbまたは*.shというファイルがCGIプログラムとして認識されます。

その結果DocumentRootが/var/www/htmlだとすると、/cgi-dir/cgi.rbにアクセスすると/var/www/html/cgi-dir/cgi.rbが実行されます。

Handlerで指定されなかった/var/www/html/cgi-dirにあるファイルは、CGIプログラムとして実行されることはありません。しかし通常のファイルとしてアクセスすることが可能ですので、CGIスクリプトのバックアップファイルなどCGIプログラム以外のファイルを置かないように注意する必要が有ります。

500 Internal Server Error

Internal Server Errorと表示されるときには、次の点を確認します。

  • CGIプログラムにアクセスするURLに間違いがないか。
  • CGIプログラムの実行フラッグ(x)がセットされているか。
  • CGIプログラムにエラーがあって異常終了していないか。

CGIスクリプトが動かないでソースが表示されるときには、設定が間違っていてCGIプログラムと認識されていませんので、設定ファイルをもう一度確認します。

見落としがちなCGIを有効にする設定

設定ファイルに絶対間違いはないのにCGIプログラムが動かず、そのソースが表示されるときにはどうしたら良いんだろう?

その場合は、ApacheにCGIを実行するモジュールが組み込まれているか確認します。

$ sudo apache2ctl -M|grep cgi
 cgi_module (shared)

このコマンドでcgi_moduleが表示されない時には、ApacheにCGIモジュールが組み込まれていません。

UbuntuのApacheパッケージでCGIモジュールを読みこませるには、/etc/apache2/mods-available/cgi.loadmods-enabledにコピーまたはリンクを作成します。

$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/cgi.load .
$ ls -l | grep cgi
lrwxrwxrwx 1 root root 26 11月  3 11:58 cgi.load -> ../mods-available/cgi.load

これでApacheを再起動するとCGIプログラムが動くようになるはずです。

参照と注釈

  1. Apache Tutorial: CGI による動的コンテンツ – Apache2.0
    Apache2.0のドキュメントを参照したのが悪かった。最新のマニュアルを参照していれば、最初にmod_cgiをロードするように注意書きがあってハマることはなかった。

複数サイズのfaviconを作成するワンライナー

convertコマンドの-cloneオプションを使えばワンライナーでマルチサイズfaviconを作成できる。

以前faviconを作成する方法を書きました1が、convertコマンドの-cloneオプションを使えば、もっと簡単に複数サイズのデータを持ったicoファイルを作成できる2ことがわかりました。

faviconをワンライナーで作成

アイコンの元となる画像をfavicon.pngだとすると、次のコマンド一発で複数サイズfavicon.icoを作成できます3

convert favicon.png \
	\( -clone 0 -resize 16x16 \) \
	\( -clone 0 -resize 32x32 \) \
	\( -clone 0 -resize 48x48 \) \
	\( -clone 0 -resize 150x150 \) \
	-delete 0 favicon.ico

注意:シェルが解釈しないようにするため括弧をバックスラッシュ(円記号)でエスケープする。

このワンライナーが何をしているかというと…

  1. favicon.pngをlayer 0に読み込む。
  2. 括弧内を処理して、その結果を新しいlayerに置く。
  3. 括弧内では、-clone 0でlayer 0すなわちfavicon.pngをコピーして指定のサイズに縮小する。
  4. layer 0の元画像を削除して、favicon.icoに合成する。

色数を制限したいときには、-colorsオプションを加えます。例えば-colors 256とすると、256色に制限できます。

参照と注釈

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

org.kde.klauncher5 was not provided

Ubuntu 15.10にアップグレードしたら`kdenlive`でクリップを追加しようとすると「The name org.kde.klauncher5 was not provided by any .service files」というメッセージが表示されてファイルを選択できなくなった。解決にはkinitパッケージをインストールする。

(2015-10-15)この問題は、kdenliveが依存しているkioの問題であった。bug reportを送った直後に同じ内容のbug reportが提出され問題は修正された7

いくつかの動画の編集ソフトを試したところ、私にはkdenliveがしっくりきました。kdenliveは名前からわかるようにデスクトップ環境KDE1のアプリケーションです。Ubuntuは別のデスクトップ環境であるGNOME2が標準ですが、KDEアプリケーションも問題なく使用できます。3

最新のUbuntuはUbuntu 15.04(vivid)ですが、まもなくUbuntu 15.10(wily)が公開される予定4です。そこで一足早く15.10を試してみようとUbuntu 15.04からUbuntu 15.10 betaにアップグレードしたらkdenliveにエラーが発生するようになってしまいました。

Ubuntu 15.10でkdenliveに問題発生

編集したい動画ファイルは「Project」メニューの「Add clip」を選択して、表示されるダイアログでファイルを選択します。しかしUbuntu 15.10にアップグレードしたら次のエラーが表示されて動画ファイルを追加できなくなってしまいました。5

プロセス klauncher と通信できません: The name org.kde.klauncher5 was not provided by any .service files を開始できませんでした。

kdenlive-error

kinitパッケージが必要

誰か同じ問題にぶつかって解決策がないかとエラーメッセージ「org.kde.klauncher5 was not provided by any .service files」をキーワードとしてググったところ、Ubuntuのバージョンは違うもののぴったりなページ6が見つかりました。

このMenachemさんによるとklauncherはkinitパッケージに含まれており、このパッケージをインストールすれば解決するとこのことでした。

そこで次のようにkinitパッケージをインストールしました。

$ sudo apt-get install kinit

するとクリップの追加で表示されていたエラーメッセージがなくなり、動画ファイルを選択できるようになりました。

またkinitの他にkioパッケージが必要だった6とのことですが、dpkg -l|grep kioしてみたところ、kdenliveをインストールした時にkioパッケージがインストールされていました。

参照

  1. KDE –Wikipedia

  2. GNOME – Wikipedia

  3. KDEとGNOMEのアプリケーションは共存して使用することができます。ただし同じデスクトップ環境間では可能なファイルのドラッグ・アンド・ドロップによる受け渡しなど連携はできないかもしれません。

  4. Ubuntu 15.10(wily)は、2015年10月22日公開の予定です。Wily Werewolf Release Schedule

  5. kdenliveで動画ファイルを追加できなくなったのはUbuntu 15.10のベータ版での話です。バグレポートも送っているので、この問題は公開までには修正されていると思います。

  6. Problem with KDE programs after upgrading to 15.04 – ask ubuntu

  7. 後から提出されたbug reportはすぐに修正されて、私のbug repotが放置ってなんだか悔しい。分かりやすく書いたつもりだけど、レポートのフォーマットに則している方が強いな。

便利な抵抗入り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の一択で良いのではないかな。

参照

Webブラウザのタブにオリジナルアイコンを表示

アイコン画像(16px X 16pxと32px X 32px)を用意して、GIMPまたはnetpbmを使用してfavicon.icoを作成する。作成したファイルをWebページのトップディレクトリーに保存する。

WebページをChromeなどで表示すると、タブやアドレスバーにサイト独自のアイコン(favicon)が表示されます。このサイトでも使用しているWordpressは、インストールしただけではfaviconが表示されません。そこでWordpressを使用したサイトでfaviconを表示するようにしてしてみました。

faviconとは

faviconを簡単に説明する1と、もともとは名前から想像できるようにMicrosoft Internel Explorer(IE)の「お気に入り」に登録された時に表示されるデコレーションアイコンでした。それが時代を経て現在のブラウザーでは、サイトを識別しやすいようにタブやアドレスバーにも表示されるようになりました。

favcionはIEの独自機能であったためにfaviconは標準化されていませんが、全てのブラウザーがWindowsのアイコンファイル形式(*.ico)をサポートしています。現在はWindowsアイコンファイルの他に、多くのブラウザーでGIPとPNG形式も使用できます2

しかしあえてGIFやPNGを選択する必要もないので、ここでは全てのブラウザーで表示できるWindowsアイコンファイルのfavicon.icoを作成します。

Linux環境でfaviconを作成

faviconを作成するWebサービスも有りますが、Linux(Ubuntu)環境で使用できるGIMPとnetpbmを使ってfaviconの作成方法を作成しました。

アイコン画像の準備

まずアイコンに使用する16×16ピクセルと32×32ピクセルのアイコン画像を用意します。アイコンの元となる画像がある場合は、GIMPやimagemagickパッケージのconvertなどで縮小します。

機械的に縮小したファイルをそのまま使うのでなく、すこし修正したほうが選り見やすいアイコンになります。絵心の必要な作業なので、機械的に縮小したものを使って不満があったら修正する程度で良いかと思います。

GIMPを利用してfaviconを作成

まずGIMPをインストールし、GIMPを起動します。

$ sudo apt-get install gimp
$ gimp &

GIMPを起動させたら、次のようにしてfavicon.icoを作成します。

  1. 「File」メニューの「Open…」を選択して、縮小した画像ファイルを開きます。GIMP-open
  2. 「File」メニューの「Open as Layers…」を選択して、残りの縮小した画像ファイルを開きます。GIMP-open-layers
  3. 「File」メニューの「Export AS …」を選択して、Export Imageダイアログを開きます。
  4. 表示されたダイアログの下の方に「Select File Type」があるので、「By Extension」または「Microsoft Windows icon」になっていることを確認します。GIMP-export
  5. Nameをfavicon.icoとして、「Export」ボタンをクリックしてアイコンファイルを保存します。

コマンドラインからfaviconを作成

コマンドラインからfaviconを作成するには、netpbmパッケージに含まれるコマンドを使用します。

$ sudo apt-get install netpbm

$ ppmtowinicon -o favicon.ico <(pngtopnm icon16.png|pnmquant 256) <(pngtopnm icon32.png|pnmquant 256)

# bashは、標準出力を普通のリダイレクトではなくファイルに見せかけてコマンドの引数に使えて便利。
# シェルがbashでない場合は、pnm形式の中間ファイルを作成する。

$ pngtopnm icon16.png|pnmquant 256 > icon16.pnm
$ pngtopnm icon32.png|pnmquant 256 > icon32.pnm
$ ppmtowinicon -o favicon.ico icon16.pnm icon32.pnm

pnmquantを通しているのは、Windowsのアイコンに使用できる色数が最大256色なので、色数を256以下に制限するためです。

Ubuntu 15.10 (Wily)でインストールされるnetpbmパッケージのバージョンは10.0ですが、今後netpbmが10.44より新しいバージョンに置き換えられた場合は、pngtopnmppmtowiniconが廃止になるのでpngtopampamtowiniconを使用します。

faviconを設置

作成したfavicon.icoは、http://site/favicon.icoでアクセスできるようにWebページのトップディレクトリーに置きます3

faviconを設置したWebページを開いて正しく表示されることを確認します。表示されない時は、サーバのアスセスログを確認してfavicon.icoにアクセスしているか・エラーが無く取得されているか確認します。

参照

  1. Favicon – Wikipedia

  2. GIFとPNG形式のアイコンファイルを使用するには、全てのページのHTMLファイルに次のリンクタグを入れてアイコンファイルを指定します。

    <link rel="shortcut icon" href="http://example.com/icons/favicon.png" />
    <link rel="icon" href="http://example.com/icons/favicon.png" />
    
  3. WordPressでは、テーマのヘッダーファイルに次のリンクタグを挿入して全てのページでfaviconを表示させることも可能です。

    <link rel="shortcut icon" href="http://example.com/icons/favicon.ico" type="image/vnd.microsoft.icon" />
    <link rel="icon" href="http://example.com/icons/favicon.ico" type="image/vnd.microsoft.icon" />
    

発売から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の時と同じです。

参照