電音の工場ブログ

当ブログは…

自作エフェクターシンセサイザ製作のネタや開発覚え書きなど、筆者の電音活動を記録しています。お探しの記事が見つからない方は、検索カテゴリ一覧をご利用ください。

スパマーが来訪すると、ときどきコメントをはてなユーザのみに絞ったり開放したりすることがあります。

2008-11-17

工作 行き詰まりました

| 工作 行き詰まりました - 電音の工場ブログ を含むブックマーク はてなブックマーク - 工作 行き詰まりました - 電音の工場ブログ 工作 行き詰まりました - 電音の工場ブログ のブックマークコメント

工作を始めたCMU-800のMIDI化だが、手組み基板が完成、パネルが完成、ATmega88にリビルドしたプログラムを焼いてみた。

そしてCMU-800にマウント!

f:id:Chuck:20081116050003j:image

さっそくMIDIを繋いでぱらぱらとやってみた。

動か~ん

あ、フォトカプラ付け忘れてた。各大豆 拡大図↓

f:id:Chuck:20081116050024j:image

フォトカプラ TLP552 を接続して再度MIDIを繋いでぱらぱらとやってみた。

それでも動かーん

基板と回路図(PDF)を照らし合わせてみたがこれまでのところ間違いを見つけられない。MIDIを受信してNOTE ON中に光るようになっているLEDは鍵盤の動きに合わせてピカピカする。AVRは動いているのかな。

しかしCMUのGATE OUTのLEDが光らない。

オシロを出してきてCMU内の8255であたってみると、WRCS、A1-A0、D7-D0 あたりは振れているようだ*1。しかしながらPA/PB/PCからの出力がないように見える。きっとそれなりに重要に違いない"GATE DATA"を担当するPA7 がなにやら中間電位(0Vでも5Vでもない)なのが気になるので、8255の乗っている基板から別の基板に入っているハーネスをはずしてみると細かいパルスノイズが乗りながらも中間電位は解消された。ハーネスの向こう側でドライブしているか、PA7が電線をドライブしていなくてハイインピーダンスになって漏れ電流が電位を持っているか、といったところであろうか。

8255は生きていると仮定して初期化に失敗しているのではないかと考え、RJBさんのコードを見る。AVRのシミュレータで動かしてみると void Wait(int32 i) 関数をスキップしてしまっている。当該関数は引数int32 i をカウントダウンして空ループを回すものであるが、逆アセンブルリストを見る限りでは、Cコンパイラの最適化でネグられてしまったようだ。

取り急ぎ最適化をオフってコンパイルしてみたところWait関数を通るようになった。その代わりに

	Wait(60);	// Wait 50us

と記載されているところで 670usec もかかるし、

	WR_ENABLE;
	WR_DISABLE;

なんていう WR のパルスを生成するところなんか9クロック(450nsec @20MHz)もかかるようになっちゃったけど*2。ちなみにここはポートのあるビットをリセットしてセットするだけの処理なので、適当な最適化が入れば生じるパルス幅はニーモニックSBIの1インストラクション分のみのはず。データシートによるとこのインストラクションには2クロックかかる。2クロックは20MHzでは100nsec。おお、8255のACスペックの最小値に一致だ。

そんなような変更をして ATmega88 に書き込みを行う。こんなことならISP用のピンヘッダを立てて置けばよかったとつぶやきつつICクリップAVRをはさんでイカの足(こちらの写真参照)を接続して書き込み。

みたびMIDIを繋いでぱらぱらとやってみた。

やっぱり動かーん (;_;)

8255のPA7は1になったみたい。しかし鍵盤を弾いてもこの値がパタパタしていないみたい。PA6-0 は0みたい。PB、PCはどうだったか覚えていない。なんか70Hz程度の矩形波が出ているポートもあったかも。うーん、ロジアナが欲しいかも(横道にそれる)。

そんなこんなで週末の早朝の検討時間が終了。週末はお持ち帰り仕事に勤しまなくてはならないのであった…


時間ができたらまた検討するつもりだけれど、CMU本体が悪いのか、私が作った基板が悪いのか、私がATmega88用にリビルドしたのが悪いのか(RJBさんのオリジナルはATmega168)、といったところを切り分けないといけない。

検討のための素材はふたつ。

  1. ATmega168を持ってきてRJBさんの実績のあるHEXファイルを焼いて使う
  2. もう一台CMU-800があるのでそっちでやってみる
    • ただしフラットケーブルが基板から取り外された状態のものなのでちょっとした作業を伴う

1番が手っ取り早いかな。168も88もサイズが違うだけでロングジャンプ以外は大差ないという認識ではじめたのだけど、なんか違いがあってタイミングが合っていないのかもというセン。ATmega168を購入するところからはじめないといけないわけだが。8255の勉強もしないとね。とくにACスペック。8253側はまだ見てもいない…

*1:鍵盤を弾かない状態でもCVのリチャージやDCOに対する設定がメインループの中で動いている。プログラムの動作に見合ったパルスが出ているように見えた。鍵盤を弾けばそれら定常パルス以外のパルスがぱらぱらと見られる。

*2:ACスペック的には WR のパルス幅は 100nsec min.

RJBRJB2008/11/17 22:00わーん、拙いプログラムでご苦労をお掛けしています。うっうっうっ…
これまで3台(Amdek製2、Roland DG製1)に改造を施して、特段問題なく動いておりましたが、コンパイラに依存するようなプログラムじゃダメですね。ちなみにWinAVRは20050214を使ってやってました。(古~)
一応、mega88で動作実績のあるHEXファイルをメールしておきます。
あと「PCB2」でコンパイルしてますよね。念のため…

RJBRJB2008/11/17 22:43あれー、メールが戻って来ちゃったのでここにも置いておきます。
http://www.rjblog.net/files/Cmu800MidiKit88.zip

ChuckChuck2008/11/18 08:41ありゃ、リターンしちゃいましたか? どうもHEXファイルをありがとうございます。
しばらく仕事が混んできたので作業はもうちょっと先になるかもしれません。いやしかし気になるので早朝検討するかも…

Cコードはそのままなので、PCB2がdefineされていました。AVR 13ピンの信号と同じものが8255の36ピンで確認できているので大丈夫だと思います(WR_n)。
ライブラリの違いはあれどCMUへの制御はパラレルI/Oを叩くだけなので、ACスペックさえ満たせばうまく行くはずで、付加回路やCMUに問題がある可能性が高いと考えています。まずは実績のあるmega88用HEXで試してみますね。

ChuckChuck2008/11/20 03:56うまくいきました! (取り急ぎ第一報)

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20081117