2007年12月08日

MIDI

突如 MIDI 規格の勉強始めました。以前からやろうと思ってましたが先延ばしになっていました。
とりあえず今週末のてもちぶさた時の読み物は MIDI 解説で決まり。

解説ページを色々探しましたが、ここが私には一番わかりやすかったです。
http://www.borg.com/~jglatt/tech/midispec.htm
いちおう通信プロトコルのレイヤーわけが若干意識されてかかれています。
これが私には一番とっつきやすいです。

MIDI ってなんじゃろ?と恐怖に思ってましたが、自分語に訳してしまうとあんまり恐くなさそうです。

以下自分語:

物理層: MIDI ケーブルまわりのもろもろ
データリンク層: 31.25kbps ボーレートのシリアル通信
ネットワーク層: 基本的にブロードキャスト
トランスポート層: 強いてあげればシリアルのストップビットかな?
セッション層: コマンド送りつけ型。非同期。ACK は戻さない。通信エラーなんて無視無視。
プレゼンテーション層: 機械語に近い。命令 + パラメータ、命令によって語長が異なる
アプリケーション層: シンセ! と演奏!

うーん、すごく納得。

つまり非同期通信なので、レシーバである MIDI-CV を作るのは難しく皆さん苦労されているのですね。

うーん、すごく納得。
posted by gan at 12:26| Comment(47) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2007年02月26日

PWM

AVR からの PWM 出力もなんとかできるようになりました。データシートによると、精度を出すには phase correct PWM を使うのじゃ、とのことなんですが、まずは動作のわかりやすい fast PWM で感覚をつかみました。
LED の明るさを調整、押しボタンの割り込みで光量調整するプログラムで練習。こ、これは楽しいです。

実は PWM は少してこずったのですが、一番の障壁になったのは、AVR Studio 備え付けのヘッダファイル 2313def.inc に TCCR0A, OCR0A, OCR0B レジスタの定義が抜けていたことでした。これらのレジスタ、使おうとするとコンパイルエラーになるので、あれー?何か勘違いしてるかなー?と迷いました。結局 2313def.inc に定義追加したら動くようになったのですが、あまりにもすぐに踏みそうな問題なのでやっぱり何か勘違いしてるかしら、と不安です。
posted by gan at 02:45| Comment(6) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2007年02月24日

AVR 勉強続く

AVR 使ってタイマ割り込みもできるようになりました。やっぱり本ではよくわからず、データシートとシミュレータとにらめっこでした。
また、何か真似できるネタがあるかも、と「AVRマイコン活用ブック」買いました。液晶表示や電圧計などマネしたくなるネタの宝庫でよい買い物でした。
次は、PWM 出力に挑戦。たのしいたのしい。
そろそろ実用に使いたいです。(ネタあたため中)
posted by gan at 22:52| Comment(0) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2007年02月22日

割り込み

思い出したように勉強している AVR
やっとこさ割り込みの仕組みが理解できました。
ピン・チェンジ・インタラプトできました。うれしー。おもしろーい。

本読んでもいまひとつわからず、結局データシートと AVR Studio のエミュレータが一番助けになりました。

次はタイマ割り込みに挑戦です。

AVR エキスパートの皆様に笑われてしまうような話ですが。
posted by gan at 01:31| Comment(47) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2006年12月02日

AT90S1200 から ATTiny2313 へ

せっかく意気揚々と始めたマイコンですが、AT90S1200 は、AVRISP mkII ではどうにも言うことを聞かず、あきらめて練習用チップを ATTiny2313 に取り替えました。ピンアウトはAT90S1200と同じなので差し替えるだけで OK。
なんだか近頃恐ろしく本業が忙しいですが、気晴らしに合間を縫って今日着手しました。

今度は ISP が対応しているので操作も簡単です。LED ちかちかのパタンを色々変えてレジスタを使う感覚をつかみ、ポートを入力に切り替えて、よしよし受け付けるぞ。次の課題は割り込みでーす、というところで恐怖の電話がかかってきました。

...業に戻りです。まさに割り込み処理。(その場合どっちが割り込み?)

ということで、今日はもうおしまいですが、次は割り込みと、いよいよ C コンパイラに挑戦です。

ところで、ヒューズビット、ぐりぐり変えられるので「おもしれー」と遊んでいたら、うっかりクロックを外部クロックモードへぱちっと切り替え...
応答しなくなりました。あらら。まあその外部クロックを与えてあげればいいんですが。めんどくさい。
posted by gan at 21:19| Comment(1) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2006年11月27日

マイコン始めました

AVR に必要なものは一揃い購入してあって、あとは気合だけ、という状態のままはや数ヶ月、そろそろマイコンが使えないと何かと困るぞ、と思い立って、週末のうちに「LEDぴかぴか」ができることを目標に着手。AVRStudio4 + ISP mkII の組み合わせは、買い置いてあったチップ AT90S1200 に対応していなくてえらく苦労しましたが、DOSツール STK500 をいじりまわしていたら突如動き始めました。

led-blink.jpg

うーん、まだわけがわかりませんが、とりあえず目標は達成したので今週は終了。
やっと先に進めるめどがたちました。先はまだまだ長いですが。
posted by gan at 02:13| Comment(2) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2006年09月01日

ボコーダ公開

ボコーダプログラムを本家記事にして公開しました。
このままじゃ実用にはならんのでサンプルです。
LGPL にしましたので興味があれば利用、改変してみてください。

http://gaje.jp/synth-old/wiki/doku.php?id=projects:vocoder

英語の訓練もかねているのでちょっと(かなり)読みづらいかもです。
ちっちゃなプログラムですが記事も含めてほとんど通勤電車の中で書きました。
時間がないとぼやいてばかりいないで
やればできるのだと、まずまず満足です。
posted by gan at 22:42| Comment(0) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2006年08月28日

ボコーダーのプログラム

8月はなぜか毎年本業がとても忙しく、ここ1ヶ月ハンダゴテを使っていません。かなりストレスがたまってきたので、ソフトでちょこっと遊んでみました。

C++ で大雑把に書いていたボコーダのプログラムを少し整理、C で書き直して、さらに色んなプラットフォームにのせやすいようにメモリ管理まわりをちゃんと設計してみました。

ボコーダの心臓部のプログラムをちょびっと公開。線形予測分析+合成フィルタ、以上。コーデックとして作るとかなり難しいですが、楽器だとあえていい加減に作ってかまわないので、拍子抜けするほど簡単です。
そのうちきちんと公開したいと思います。(ああ、もうこんな時間。寝なくては)

/**
* vocoder
* The vocoder process.
* Note: The voice input will be changed by this function. (because of hann())
*/
void
vocoder(Processor* processor,
float voice[], float excit[], float out[])
{
/* temporal buffers */
float* corr;
float* lpc;
float* ref;

/* parameters */
register int frameSize, np, ip, ismp;
float ratio, level, power;
VocoderParameters* params;

/* fetch frequently-used parameters from the processor */
frameSize = processor->frameSize;
params = (VocoderParameters*)processor->parameters;
np = params->np;

/* get temporal beffer memory from the stack */
corr = (float*)stack_push(processor->stack, (np + 1) * sizeof(float));
lpc = (float*)stack_push(processor->stack, (np + 1) * sizeof(float));
ref = (float*)stack_push(processor->stack, (np + 1) * sizeof(float));

/* get the LPC coefficients */
power = hann(voice, frameSize);
autoCorrelate(frameSize, voice, np, corr);
ratio = levinsonRecursion(np, corr, lpc, ref);

#ifdef _DEBUG
vocoder_debug_print(corr, lpc, ref, ratio, np);
#endif

/* The synthesis filter. */
{
float* buf = params->outBuffer;
level = (float)(sqrt(power*ratio/frameSize) * 0.5f);
iir(frameSize, out, excit, ip, buf, lpc, level);
}

stack_pop(processor->stack, (np+1) * 3 * sizeof(float));
}
posted by gan at 03:12| Comment(6) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2006年08月09日

DSP

本業にどっぷりでハンダゴテで遊べない今日この頃、つまらないので、まあソフトなら通勤電車で書けるでしょうと、ソフトで遊んでます。

たわむれに、こんなん作ってみました

ま、こんなとこだな。

なかなか楽しいです。
posted by gan at 23:47| Comment(9) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2006年06月19日

デザインウェーブ基板

シンセの話ではないです。シンセは作業が完全に止まってしまってます。

シンセ作業するほどじゃないけどソフトはいじれるぐらいのちょっとした時間があったので、デザインウェーブおまけ ADuC7026 基板を動かしてみました。ついでに開発環境を gcc に引越し。gcc には慣れているので、こっちのほうがかえって何をしているのか理解しやすくて良いです。割り込みがどういうものかやっと感じだけわかってきました(まだそんなことやってる)。
で、LEDちかちかをしばらくやっていたら、突然停止。
スイッチング電源を使っているし、どうも噂になっていたこれが起きたのではないかなと疑っています。
http://nahitafu.cocolog-nifty.com/nahitafu/2006/02/dwmarm_8956.html
(おお、これホットだったのはもう4ヶ月も前ですか)
うわー、面倒。
posted by gan at 01:43| Comment(8) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

2006年05月27日

いまさら DesignWave ADuC7026

ここしばらく仕事の谷間モードで、ラリーのサービスステージのように全速で(ええ、こんなに遅いんですけど全速)シンセ製作を進めてきたのですが、そろそろ次の仕事が立ち上がり、平日の作業はだんだん苦しくなってきました。今日も配線着手の気力がなく、気晴らしにずっと寝かしてあったデザインウェーブおまけのマイコン基板の使い方をいまさらですが学習してみました。(プという笑いが聞こえてきそうです :-)

led-blink.jpg

はじめてのマイコンなのでおっかなびっくりです。
続きを読む
posted by gan at 01:39| Comment(46) | TrackBack(0) | ディジタル | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。