エレクトロニクス・フィーバー

プログラミングと電子工作で共有しようと思ったことを載せていきます

Haskell Platform for Windows のインストール

意外と難しかったのでメモ。
Cabal-Install - HaskellWiki を参考にした。

まずは、 Haskell Platform for Windows から "Haskell Platform 2013.2.0.0 for Windows" (2014-07-21 現在の最新)をダウンロードして実行してインストールします(ここまでは簡単)。

cabal をアップデート

先に結論を言います。
再起動した後、管理者権限のコマンドプロンプトで "cabal install cabal-install --global" する。

コマンドプロンプトで、cabal update すると、こう言われます。

>cabal update
Config file path source is default config file.
Config file C:\Users\Yuki\AppData\Roaming\cabal\config not found.
Writing default configuration to C:\Users\Yuki\AppData\Roaming\cabal\config
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install

言われた通りに cabal install cabal-install します。

>cabal install cabal-install
Resolving dependencies...
Downloading Cabal-1.20.0.1...

C:\Users\Yuki\AppData\Local\Temp\Cabal-1.20.0.1-5532\Cabal-1.20.0.1\Distribution
\Compat\Environment.hs:0:4:
    lexical error (UTF-8 decoding error)
Failed to install Cabal-1.20.0.1
cabal: Error: some packages failed to install:
Cabal-1.20.0.1 failed during the configure step. The exception was:
ExitFailure 1
cabal-install-1.20.0.3 depends on Cabal-1.20.0.1 which failed to install.

は?? 言われた通りにやっただけなんですけど…
再起動してもう一回やると一応動きました。まあ、ここはご愛嬌です。
しかし、すぐに別のエラーが。

[76 of 76] Compiling Main             ( C:\Users\Yuki\AppData\Local\Temp\Cabal-1
.20.0.1-4308\Cabal-1.20.0.1\Setup.hs, C:\Users\Yuki\AppData\Local\Temp\Cabal-1.2
0.0.1-4308\Cabal-1.20.0.1\dist\setup\Main.o )
Linking C:\Users\Yuki\AppData\Local\Temp\Cabal-1.20.0.1-4308\Cabal-1.20.0.1\dist
\setup\setup.exe ...

setup.exe - アプリケーション エラー
アプリケーションを正しく起動できませんでした (0xc0000142)。[OK] をクリックしてアプリケーションを閉じてください。
OK

コマンドプロンプト自体がフリーズしてしまいました。
様子を見てみると、どうもウィルススキャンソフトの avast が悪さをしているようです(自分の意志でビルドしたプログラムをスキャンするのはやめて欲しいですね…)。
一旦スキャンを無効にし、もう一度実行します。

(略)
[78 of 78] Compiling Distribution.Simple ( Distribution\Simple.hs, dist\build\Di
stribution\Simple.o )
In-place registering Cabal-1.20.0.1...
Installing library in
C:\Users\Yuki\AppData\Roaming\cabal\i386-windows-ghc-7.6.3\Cabal-1.20.0.1
Registering Cabal-1.20.0.1...
Installed Cabal-1.20.0.1
(略)
[76 of 76] Compiling Main             ( Main.hs, dist\build\cabal\cabal-tmp\Main
.o )
Linking dist\build\cabal\cabal.exe ...
Installing executable(s) in C:\Users\Yuki\AppData\Roaming\cabal\bin
Installed cabal-install-1.20.0.3

今度はちゃんとインストール出来たようです。確認します。

>cabal --version
cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library

1.20 じゃない…。どうなってるの…。
ログをよく見ると、新しい cabal のインストール先が C:\Users\ユーザー名\AppData\Roaming\cabal\bin なのに対して、環境変数パスが C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin を優先しているため、更新されていないほうが実行されてしまうようです。
対策としては、

  1. C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin\cabal.exe を上書きする
  2. C:\Users\ユーザー名\AppData\Roaming\cabal\bin の方を優先パスにする
  3. C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin\cabal.exe が更新されるようにインストールする方法を探す

などあります。(1) は 01. 環境構築 - とりあえず雑記帳 で推奨(?)されていました。
しかし、根本解決にはならないため、(3) の方法を探します。

ユーザーフォルダの実行ファイルが更新されてしまうのは、おそらくグローバルの実行ファイルを上書きする権限が無いせいだと思われます。普通にコマンドプロンプトを起動した場合、ユーザー権限しか無いため、C:\Program Files (x86) を書き換えできません。
というわけで、コマンドプロンプトを右クリックして「管理者で実行」の状態で同じようにやってみます。

C:\Windows\system32>cabal update
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install

C:\Windows\system32>cabal install cabal-install
Resolving dependencies...
Configuring cabal-install-1.20.0.3...
Building cabal-install-1.20.0.3...
Preprocessing executable 'cabal' for cabal-install-1.20.0.3...
[ 1 of 76] Compiling Distribution.Client.Dependency.Modular.Version ( Distributi
on\Client\Dependency\Modular\Version.hs, dist\build\cabal\cabal-tmp\Distribution
\Client\Dependency\Modular\Version.o )
(略)
[76 of 76] Compiling Main             ( Main.hs, dist\build\cabal\cabal-tmp\Main
.o )
Linking dist\build\cabal\cabal.exe ...
Installing executable(s) in C:\Users\Yuki\AppData\Roaming\cabal\bin
Installed cabal-install-1.20.0.3

失敗でした。明示的にグローバルに指定しないといけないようです。
cabal --help を見ても何も手がかりがないので、ググってみると、"--global" オプションを付けると共通の場所にインストールできるらしいという情報を得たのでやってみます。

C:\Windows\system32>cabal install cabal-install --global
Resolving dependencies...
[ 1 of 76] Compiling Distribution.GetOpt ( C:\Users\Yuki\AppData\Local\Temp\Caba
l-1.20.0.1-3360\Cabal-1.20.0.1\Distribution\GetOpt.hs, C:\Users\Yuki\AppData\Loc
al\Temp\Cabal-1.20.0.1-3360\Cabal-1.20.0.1\dist\setup\Distribution\GetOpt.o )
(略)
[76 of 76] Compiling Main             ( C:\Users\Yuki\AppData\Local\Temp\Cabal-1
.20.0.1-3360\Cabal-1.20.0.1\Setup.hs, C:\Users\Yuki\AppData\Local\Temp\Cabal-1.2
0.0.1-3360\Cabal-1.20.0.1\dist\setup\Main.o )
Linking C:\Users\Yuki\AppData\Local\Temp\Cabal-1.20.0.1-3360\Cabal-1.20.0.1\dist
\setup\setup.exe ...
Configuring Cabal-1.20.0.1...
Building Cabal-1.20.0.1...
Preprocessing library Cabal-1.20.0.1...
[ 1 of 78] Compiling Paths_Cabal      ( dist\build\autogen\Paths_Cabal.hs, dist\
build\Paths_Cabal.o )
(略)
[78 of 78] Compiling Distribution.Simple ( Distribution\Simple.hs, dist\build\Di
stribution\Simple.o )
In-place registering Cabal-1.20.0.1...
Installing library in C:\Program Files
(x86)\Haskell\i386-windows-ghc-7.6.3\Cabal-1.20.0.1
Registering Cabal-1.20.0.1...
Installed Cabal-1.20.0.1
Configuring cabal-install-1.20.0.3...
Building cabal-install-1.20.0.3...
Preprocessing executable 'cabal' for cabal-install-1.20.0.3...
[ 1 of 76] Compiling Distribution.Client.Dependency.Modular.Version ( Distributi
on\Client\Dependency\Modular\Version.hs, dist\build\cabal\cabal-tmp\Distribution
\Client\Dependency\Modular\Version.o )
(略)
[44 of 76] Compiling Distribution.Client.Dependency.Modular.Preference ( Distrib
ution\Client\Dependency\Modular\Preference.hs, dist\build\cabal\cabal-tmp\Distri
bution\Client\Dependency\Modular\Preference.o )
(ここで固まった)

途中で止まってしまいました。もう一度です。

C:\Windows\system32>cabal install cabal-install --global
Resolving dependencies...
Configuring cabal-install-1.20.0.3...
Building cabal-install-1.20.0.3...
Preprocessing executable 'cabal' for cabal-install-1.20.0.3...
[ 1 of 76] Compiling Distribution.Client.Dependency.Modular.Version ( Distributi
on\Client\Dependency\Modular\Version.hs, dist\build\cabal\cabal-tmp\Distribution
\Client\Dependency\Modular\Version.o )
(略)
[76 of 76] Compiling Main             ( Main.hs, dist\build\cabal\cabal-tmp\Main
.o )
Linking dist\build\cabal\cabal.exe ...
Installing executable(s) in C:\Program Files (x86)\Haskell\bin
Installed cabal-install-1.20.0.3

C:\Windows\system32>cabal --version
cabal-install version 1.20.0.3
using version 1.20.0.1 of the Cabal library

やっと出来ました…。ここまでで1時間です。
しかし、C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin ではなく、C:\Program Files (x86)\Haskell\bin にインストールされたようです。予想と違いましたが、そっちもパスに入っているので問題無いです。
ちなみに、--global でインストールされるディレクトリは C:\Users\(ユーザー名)\AppData\Roaming\cabal\config の install-dirs global で指定されているようです。

Qucs の簡単な使い方まとめ

Qucs はフリーの EDA ツール(回路設計・シミュレーター)です。
Qucs project: Quite Universal Circuit Simulator

無料の EDA ツールには他に LTSpice が有名で、今までこれを使っていました。
しかし、LinuxEDA がしたくなり、Windows でしか動作しない LTSpice の代わりに使用してみることにしました。

インストール

トップページから

Development (unstable) snapshot: 0.0.18.130703

をダウンロードして実行します(大体の人はこれではなく安定版の 0.0.17 を使ったほうがいいでしょう)。
インストール中に他に必要なプログラムをインストールする選択肢が出ますが、FPGA集積回路がしたいわけではないので Verilog と FreeHDL は外しました。

メニューが英語なので、File | Application settings から、言語を日本語、フォントをメイリオ 10 pt にしました。
言語を日本語にすると新規作成して保存したファイルが開けなくなる重大なバグがあります。英語のまま使ってください。
[7/20追記]Quite Universal Circuit Simulator download | SourceForge.net から入手できる 0.0.18 140611 で修正されたようです。日本語で使いましょう。

回路作成

部品の配置や配線は大体直感的なので省略します。
f:id:mtyk1:20140517150808p:plain
ただし、部品モデルの選択が初期画面には出てこないので、少し説明します。
メニューの「ツール」|「部品ライブラリ」で部品選択のダイアログが開きます。左側のリストから目的の部品名をダブルクリックすると右に説明が出てきます。右側に出てくるシンボルをドラッグアンドドロップすれば配置できます。
f:id:mtyk1:20140517144249p:plain

シミュレーション

シミュレーションの設定も部品から選択します。
まずは過渡解析のため、「シミュレーション部品」|「トランジェント解析」を配置します。
スタート・ストップ時刻等を設定したら、歯車のアイコンでシミュレートを開始します。

ところで、自分の場合以下のエラーが出ました。

line 14: syntax error, unexpected Identifier, expecting '"'

エラーが出ている行を調べるため、「シミュレーション」|「最後のネットリストを見る」でネットリストを表示します。
14行目は以下のようになっています。

Vac:V_IN IN gnd U="1 V" f="1 KHz" Phase="0" Theta="0"

最初何がおかしいのかわからなかったのですが、エラーメッセージで検索すると、f="1 KHz" の箇所が問題らしいことがわかりました。Qucs では大文字・小文字を区別するため、単位は KHz ではなく kHz でなくてはなりません。LTSpice とは違うところなので、注意しましょう。

無事解析が終了すると、dpl という拡張子のタブが開きます。これはシミュレーション結果を表示するためのタブで、自動的に「図表部品」のパネルが開きます。
過渡現象のグラフを見たいので、「直交座標」を配置します。開いたダイアログの左下の「データセット」のリストをダブルクリックすると、その変数が「グラフ」のリストに追加されます。
…ところで説明していませんでしたが、ここに出てくるのは回路図で「ワイヤのラベル」としてラベルを付けた配線だけです。
f:id:mtyk1:20140517154242p:plain
この間に回路に問題があるのが見つかったりいろいろあったのですが、無事表示されました。
f:id:mtyk1:20140517155122p:plain

エクスプローラに依存すると詰む

教訓:ファイラーやランチャーなど、他のプログラムを起動できるツールを常駐させておく

環境は Windows 7 64bit です。

SDカードにファイルをコピーしようとすると、固まってしまいました。仕方なく強制終了させようとしても、まったく操作を受け付けず、タスクマネージャーから終了させることもできません。そうこうしているうちに、エクスプローラ自体がフリーズしてしまい、スタートメニュー・デスクトップ・タスクバーのすべてにアクセスできなくなってしまいました。再起動させようとしてもログオフで固まってしまい、もはやハードウェア的にリセットするしか方法がありません…。

問題は、Windows のエクスプローラは OS と密接な関係があるので、ファイル操作で固まったりすると他の機能もほとんど使えなくなってしまうことです。こうなると、他のプログラムを起動することすらできなくなってしまうので、何もできなくなります。
この時点で可能な操作は、タスクマネージャーの起動と、Alt + Tab によるプロセス切り替えくらいですので、これだけでも最低限のオペレーションは可能なように対策する必要があります。

考えられる方策としては、ランチャーなどを常駐させておくことですが、タスクトレイにもアクセスできなくなるので、通常のウィンドウとして常駐するツールが必要です。
具体的に何を使えばいいかはまだ探していませんが、いいものが見つかればまた後日書きましょう。

FET 回路の勉強と定番素子

いままで BJT (Bipolar Junction Transistor いわゆるトランジスタ)は使い方にある程度自信があったのですが、FET は敬遠していました。理由は、

  • 種類がよくわからない
  • 高価(BJT はまとめ買いすると1個当たり5円とかで買えるが、FET は安くても20円位する)
  • 特性のばらつきが激しい(らしい)
  • 定番品がわからない

ということでした。
しかし、BJT を使っているといろいろ不満が出てきました。例えば、バイアスをかけるときにベース電流に気を使わなくちゃいけないといったことです。あるいは、純粋に飽きてきたということもあります。

というわけで、FET を使えるようになるために、何か特定の FET を足がかりとして勉強しようと考えました。そのためにはやはり定番品を使いたいのですが、昨今のリード型トランジスタディスコン化などの流れで、店頭を覗いても今後安定供給される定番品がどれなのかよくわかりません。
そこで使うのが、Digi-Key の検索機能です。
電子部品のディストリビュータ、DigiKey
Digi-Key は絞り込み検索がこの種のサイトの中では最も使いやすく、品種が豊富(多少アメリカ向けに偏っていますが)なので、トレンドを調べるのにもってこいです。
早速、「FET-シングル」(J-FET は種類が少ないのでやめておきます)で、「スルーホール」「在庫品目」で検索し、価格順にソートします。量産効果の高いトランジスタは、定番なら価格も安くなるからです。
リストから、小信号用は馴染み深い TO-92 パッケージがかなりあることがわかったので更に絞り込みます。すると、以下の品番が挙がってきました。

  • 2N7000
  • BS170

どちらも複数社から供給されていて、価格も安いです(100個買って1個20円以下)。更に 2N7000 は、似た特性の 2N7002 の Spice モデルが LTSpice に入っています。また BS170 で Google 検索すると、海外のギターエフェクターなどに使用されていて日本語情報も結構あるようです。このどちらかを使って勉強して行きましょう。

AKI.DAC-U2704

以前 AKI.DAC-U2704 という USB 接続の DAC キットを組み立てたのですが、ある時からノイズが乗るようになりました。基板を調べてみると、PCM2704 に繋がっている中点電圧用の電解コンデンサのハンダが取れていました。

同じ品種は持っていなかったので、在庫から探してきたニチコン FG と交換することに。

Rubycon YK 25V 470μF → ニチコン FG 25V 470μF
若干基板からはみ出してます。

ところでネット上の作例を見ると、コンデンサの交換をしている例がいろいろありますが、結構小さい基板なので入るかどうかが気になるところです。基板上のサイズを調べてみました。

番号 穴間隔 [mm] 直径 φ [mm]
C3, C4 (Zobelフィルタ用) 6.0 -
C5, C6 (出力カップリングコンデンサ 3.5 8.5
C11 2.5 6.5
C14 5.0 10.0
C16, C17 2.5 8.5

以上のサイズより大きいコンデンサを使うときは工夫して入れないといけません。
ちなみに、C5, C6 は FG 25V 47μF がキットに入っていますが、リード線間隔が違うので曲げないと入りません。同じ FG 25V で言えば 100μF (8 × 11.5、間隔 3.5)がちょうどいいサイズです。元の容量が小さいので、変えてみても面白いかもしれません。