« MINI EZ-USBキット | トップ | ADuC7026のA/Dで遊ぶ »

ADuC7026でMIDI受信

DWM3月号おまけ基板でMIDIの受信実験をしてみました。
以前、chuckさんが紹介されていたMIDI受信検討用治具がとって~も便利そうだったので、同様な治具をパクって製作して実験をすることに…

IMG20060221A

ADuC7026はUARTが1つしか無く、DWM基板ではシリアルポート用に使用済み?かと思ったのですが、GPxCON MMRの設定により、シリアル入力をIO0[7]に設定することが出来ますので、基板のCN3:A07に治具の出力(MIDI信号)を接続しました。
以下は実験プログラム(gcc版)の抜粋です。

// 32kHz外部水晶
*pllkey1 = 0xAA;
*pllcon = 0x01;
*pllkey2 = 0x55;

// CD設定
*powkey1 = 0x01;
*powcon = 0x00;
*powkey2 = 0xF4;

// UART設定 31.25kbps 8bit none 1bit
*comcon0 = 0xF0; // DLAB=1
*comdiv0 = 0x29; // DL=41
*comdiv1 = 0x00; //
*comdiv2 = 0x8827; // M=1 N=39
*comcon0 = 0x03; // DLAB=0 WLS=8bit

// GPIO設定
*gp0con = 0x20000000;
*gp1con = 0x00000000;
*gp2con = 0x00000000;
*gp4con = 0x00000000;
*gp4dat = 0xFFFF0000;
midi_clk = 0;

while(1)
{
while((*comsta0 & 0x01) == 0) {}
buf = *comrx;

if( buf == 0xF8)
midi_clk++;

if( midi_clk == 24)
{
midi_clk = 0;
*gp4dat = 0xFF7F0000;
continue;
}

if( midi_clk == 6)
{
*gp4dat = 0xFFFF0000;
}
}

動作としては、単純にMIDIクロック(F8H)をカウントして、拍子に合わせて基板上に実装しているLEDをチカチカさせるものです。
UARTボーレート設定には、フラクショナル・デバイダを使用して正確に31.25kbpsとなるようにしたつもりです。
で、MIDIキーボードCBX-K1からMIDIクロックを発生させると、基板上のLEDがチカチカして、とりあえず実験は成功。
あとは、ADuC7026には12bitDACが4ch内蔵されていますので、MIDI NOTEコマンドを適切に処理する部分を実装すれば、MIDI-CVコンバータの出来上がりなんですけどね。
(CVスパン合わせる回路とGATEバッファ回路は必要ですけど…)

それにしても、「volatile」宣言の意味が、未だに良く理解できません(^_^;)

トラックバック

この一覧は、次のエントリーを参照しています: ADuC7026でMIDI受信:

» RJBさんのMIDI受信器 from 酔漢電子工作手帳
面白いこと考えるなぁ、と思ったら、g:emusic:id:Chuckさんのアイデアでしたか。それにしても、「volatile」宣言の意味が、未だに良く理解できません(^_^;)volatileはコンパイラに釘を刺す宣言です。volatileなしで変数を宣言すると、コンパイラは最適化をするときに読み書きをすっ飛ばすことがあります。たとえば「3回連続で読んでるけど、どうせ書き換えてないし、最初に読んだ値を流用してもいいジャン」といった形です。しかし、それでは困ります。たとえばADCは3回読んだら3回値が... [詳しくはこちら]

» [雑] from 歪み歪め歪んでくれ(Fuzz研川崎出張所)
DWM3月号を買いそうになったが「ちょっと待て、俺はAVRすらまともにいじっていないからお金を捨てるようなものじゃないか」と思ったのでAVRで遊ぶことにしました。 [http://www.rjblog.net/2006/02/aduc7026midi_c34e.html:title=RJB]さんがやっているのと同じ実験をしてみようと思います。 もちろんソースはChuckさんの「さんハイッペダル」からの流用しようと思います^^; ... [詳しくはこちら]

» PIC、AVR、そしてARM7へ from 虹的電子音楽機器
MicrochipのPICが日本で紹介されたのは、秋葉原の秋月電子界隈が最初だっ... [詳しくはこちら]

コメント

うわー、すごい。
なんだかAVRほっぽってこっちがメインになりそうな勢いですね。

進んでますね!

ほとんど勢いっす(笑)
落ち着いたらAVRもやりますよ~

volatile は 「揮発性の」 という意味ですが
volatile宣言した変数は、コンパイラには判らない「どこか」でデータが書き換えられる可能性がありますよ
とコンパイラに教える仕掛けです。
コンパイラが最適化したりするときに、その変数がその関数内で変化しないからといって、削除してしまうのを禁止します。

橋本さん、はじめまして。
なるほど、そー言うことなんですね…
ありがとうございました。

« MINI EZ-USBキット | トップ | ADuC7026のA/Dで遊ぶ »