MacにGTK+をインストールする
環境としては
MacOS X mavericks
Xcode,homebrewをインストール済み
homebrewを利用してGTK+をインストールする。ターミナルにおいて
$ brew install gtk+
以上を入力して放置すると,インストールが終了した。 GTK+はただのライブラリであるため,GTK+をincludeしたプログラムを作成する必要がある.
プログラムはとりあえず動くものということで,下記から拝借.
http://www.myu.ac.jp/~xkozima/lab/raspTutorial2.html
コンパイルを行うにあたってプログラムを作成したディレクトリに移動し以下のコマンドを実行する.
$ cc test.c -o test `pkg-config --cflags --libs gtk+-2.0` $ ./test
一行目を実行した時点で同一ディレクトリ上に"test"と呼ばれる実行ファイルが作成される. 二行目によって実行,とりあえず動作することが確認できた. これ以上のことはまた後日...
MS20方式 アナログフィルタ(VCF)制作
シンセサイザの音色を変える方法の一つが音の成分を"削る"ことである。
というわけで今回は"VCF"を制作。ただのパッシブフィルタを設計して制作することには苦労しないが、ことに電圧制御となるとややこしいことが山積みになるのである。
そこで、日本シンセサイザ史における名機の回路をパクった。部品定数はオペアンプの-5V〜5Vに合わせて変えてあり、さらにLTSpiceによるシミュレーションを行い、特性も確認済み。
Prophet-5やJUNOなどはフィルタやアンプに専用ICを使っているため部品点数削減には貢献するものの、ICがディスコンになったとき修理が困難となる。さらに内部構造はブラックボックスになって面白くない。その点このMS-20は汎用部品で構成されており、回路の教材としてもかなり有用である。
さて、設計後は制作を行ったのであるが...。
お試しLPC810
「Lチカだって半分は消灯してるんだもの。」
(写真では判別できませんが、きちんと1s周期で点滅しておりました。)
前回の更新からだいぶ時間が経ったが、まったくサボっていた訳ではなく、記事にするのが面倒なだけだったりする。実はVCAとかVCFは完成してるので、それはいずれ記事にできればいいなと。
本日は再びマイコン試用記である。今回もLチカしかしていないが、とりあえずチャレンジ。LPC810は32bitのCortex-0アーキテクチャを採用しておきながらIOに乏しいというなんとも残念な仕様のマイコンとして有名である。
しかし、我がDIY Wave Labにおいては優秀なオシレータになる見込みがまだあるためにネット上の評判にも関わらず果敢に活躍の場を与える次第である。
さて、数ヶ月前に投稿したこの記事
LPC1114の試用ではプログラミング環境はmbedを使っていたのだが、
コンパイル(ダウンロード)→bin2hex→書き込み(flashmagic)
という流れであったが、いかんせんバイナリ/HEX変換が煩わしい。というわけで今回はNXPの公式IDEであるLPCXpressoを使ってみた。これにより
コンパイル→書き込み(flashmagic)
という何ともすっきりとしたフローになる。
また、書き込みまでの道のりとしては以下のサイトを参考にした。
http://mits-whisper.info/tagged/LPC810/chrono
また、初めは"Blinky"という標準のLチカプログラムで試してみた。LPC810には"Switch Matrix"なるツールが用意してあり、IOピンをある程度自由に設定できる仕様となっている。以下がその使用風景である。ここからswm.cに自動的にコードが生成されるのでそれをmain.cに貼付けるとピン設定が終わっているというスグレモノである。
注意すべきはピン設定をきちんと行わないとプログラムを正確に書いたところで動作しないという点である。コンパイルの前にこちらの確認はしっかり行いたいものである。
ところで、現状では12MHz動作であるが、16bit,分周1のPWMを発生すると計算上183Hzのサンプリングレートとなってしまう。なんじゃそら。I2CのDACを使うのか?1つ80円のコスパはどこへいく?
やっぱりお前、ダメなやつだなぁ(嬉)
DCOの制作
先月からシンセサイザの制作に取りかかったはいいが、なかなか進まない。
とりあえずはArduinoを用いてDCO(Digital Controlled Oscilator)を作ってみた。
Arduinoとは言いつつも、中身はAVR言語でタイマーをバリバリ使用したものであるため、プログラムを後で読み返すと『?』となることもしばしば。自分が書いてるのに。
今回はArduinoを二台使っている。一台はMIDIを待ち受けてただのシリアル信号としてDCOに送る役割を担っている。もう一台はDCOそのものであり、設定された波形をMIDI規格に準じた音階で生成している。
↓生成した波形。正弦、三角の他に矩形、鋸歯状波も生成できる。
内部の処理としてはDDS方式を採用しており、ウェーブテーブルは8bit*256個で一波形を格納している。空いたメモリの分だけ波形は増やせるため、プリセットの強化もできるが、当分はこのまま他のモジュールを作成するつもりである。
ちなみに、Arduino(というよりATMega328)のアナログ変換を利用して疑似VCOとして動作させることも計画中であるため、FM変調もできるかもしれない。多分できる。
LPC1114の動作確認まで
巷で噂(だった)の低価格mbedであるLPC1114への書き込み確認までを記録した。
LPC1114とは?
いつも使っているatmega328pが¥250であることを考えるとLPC1114は¥140であり、性能から考えると爆安である。arduino一派であるが、乗り換えちゃいそう。arduinoの領域を食いにかかっている風に見えるがそのパッケージはいかがなものか。
しかし少し調べてみると書き込みが煩雑であるため放置していたのであった。二年も。 というわけで本日はLチカまでの軌跡を記録しておく。
※以下全部MacOSでやってます。
全体の流れ
binファイル▶︎bin2hex(後述)▶︎hexファイル▶︎Flash Magic(後述)▶︎usb-serial▶︎LPC1114
となる。赤字のところが謎多き部分である。
binファイルの入手
入手というよりコンパイルしてもらうのだが、mbed compilerの使用経験がある前提で話を進める。今回はblink.binという一秒おきにLED2を点滅させるプログラムをコンパイルしてダウンロードしておいた。
bin2hexを使う
bin2hexは.pkgのようにインストールするものではないため実行形式のファイルとしてコンパイルしてあげないといけない。bin2hexを解凍し、そのディレクトリ内に移動する。
$ make
をターミナルで実行するとbin2hexという実行ファイルができる。準備完了。 先ほどのblink.binをbin2hexと同じディレクトリ内に移動し、ターミナルで
$ ./bin2hex blink.bin > blink.hex
と実行してあげるとhexファイルが生成される。
書き込み器について
書き込みに必要な端子は非常に少なく、RX,TXとVcc,GNDがあれば書き込みができる。今回は3.3Vの電源が欲しかったので、マルツのusb-serial変換器(MPL2303SA)を使用した。配線図は他所に詳細があるのでここでは割愛。
・実体配線(生)をのせておきますね。
要はLPC1114のRX,TXとMPL2303SAのTX,RXを接続してあげればよい。このとき、dp24とGNDのあいだに抵抗を挟むことでISP通信を有効化する(画面左上の抵抗)。mbedはチップにプログラムを焼いて一度リセットしないと動作しないが、リセットの際にこの抵抗を外さないと書き込んだプログラムが起動しないので注意。
FlashMagicを使う
準備ができたところで書き込みに入る。FlashMagicのインストールについては特に問題がないので割愛。肝は設定のほうである。
成功時の設定(特にCOMポートは変わります)
設定について…
[Select]ではLPC1114/102に書き込む。( 複数のバンクがあるようで)
書き込みはCOM9でうまくいったが、様々なusb機器をつなげたりすると割当が変わる気がするので各自で調べるべし。
baudrateは9600でInterfaceはISPで変更しなくてよい。
先ほどのblink.hexを読み込んで[Start]をおしてしばし待つ。
書き込みが終わったら、dp24につけておいたプルアップ抵抗を外し、リセットスイッチを押す。するとプログラムが動き出す。
以上Lチカまでの顛末
次はI2Cか何かを。