2013年12月30日

mbed関連の備忘録

LaunchPadMiniがVinculoと繋がらないので、mbedに乗り換えてあれこれやってみているが、こちらも認識が行われず、スタックした状態となっている。

mbedでは、midi_phaser.cに以下に抜粋した例文を追加してLEDを使ったデータ入力のモニターを行っている。 現在モニターしているのは、ControlChangeとNote_On/Off。

最初に、ピンアウトの宣言を行い、、、

DigitalOut mLED1(LED1);
DigitalOut mLED2(LED2);
DigitalOut mLED3(LED3);
DigitalOut mLED4(LED4);

条件分岐のところに、LEDの発光ルーティンを組み込む。

switch(PC){
case 0:
switch(RxByte & 0xF0){
case MIDI_NoteOff:
PC = 2;
mLED1 = 0;
break;
case MIDI_NoteOn:
PC = 4;
//mLED1 = 1;
break;
case MIDI_PolykeyPressure:
PC = 6;
break;
case MIDI_ProgramChange:
PC = 8;
break;
case MIDI_ControlChange:
PC = 10;
mLED2 = 1;
break;
case MIDI_ChannelPressure:
PC = 12;
break;
case MIDI_PitchBend:
PC = 14;
break;
} break;

// Note OFF
case 2:
PC = 3;
mLED1 = 0;
break;
case 3:
PC = 2;
NoteOFF();
mLED1 = 0;
break;

// Note ON
case 4:
PC = 5;
mLED1 = 1;
break;
case 5:
PC = 4;
if( MByte[1] == 0){
NoteOFF();
mLED1 = 0;
}
else{
NoteON();
//mLED1 = 1;
}
break;

// Control Change
case 10: PC = 11; break;
case 11:

wait(0.01);
mLED2 = 0;

switch(MByte[0]) {
case MIDI_CC_Moduration:
gModWheelBuf[MidiCh] = MByte[1] >> 2;
break;
case MIDI_CC_DataEntry:
break;
case MIDI_CC_RPN_LSB:
break;
case MIDI_CC_RPN_MSB:
break;
case MIDI_MM_AllSoundOff:
break;
case MIDI_MM_ResetAllControl:
break;
case MIDI_MM_AllNoteOff:
break;
}
break;

ControlChangeの表示にはディレイを設けて、点滅速度を落としておく。

結果を出せていない作業は以下のとおり。

1)midiUSB.cppのリングバッファー・サイズを32バイトから64バイトに増やした結果、一定時間後にmidi入力が固まってしまう。

2)AutoEvent.cppのcase CLASS_VENDOR_SPECIFIC:をいじってみたが、こちらもLaunchPadMiniを認識させることが出来ていない。

LaunchPadMiniのDescriptorの値が判明しているが、不具合の原因を発見するには至っていない。


追記:

御本家のJason Hotchkiss氏のblogに

The Launchpad is not a standard USB MIDI or HID device. Rather it has a custom interface using two interrupt endpoints. This can be accommodated on the PIC with a couple of mods to the “Generic” device driver code from Microchips stack.

とLaunchPadに関する解説があった。 mbedを対応させるには、それなりの手当を行わないとダメっぽい事が判った。

追記2:

LaunchPadはSモデル以降USBclassが変更されているので、VNC2が対応できるかどうか微妙になってきた、、、。

LaunchPadUSB.rtf
posted by Yasuski at 20:34| mbed

2013年11月30日

USBHOST/midiデバイスがRunningTime12時間強を達成する

mbedで試作しているUSBHOSTで受けたMidiをWiFiで飛ばすデバイスの実験を12時間継続している。

20度近い温度変化にも耐え、現時点でトラブルは発生していない。

IMG_4519.JPG

一方、コードの改変についてだが、ひとまずステータスバイト毎に光らせるLEDを選別する事が出来るようになった。 MidiChとCC#、それと出力値のLCD表示には未だ至っていない。



ちなみに、mbedとXBee共に3.3Vで動作するデバイスなのだが、現在は使用する電源の便箋上5Vで運用している。 電池駆動を行う際はこれを3.3Vに改変する必要があるが、製作中のVinculum系デバイスにも共通する電源仕様の変更となる。 デバッグ中は設定する電圧が混乱して、デバイスの破壊が発生する可能性があるので、組み込む直前までは電圧は5Vで維持したほうが良いだろう。
posted by Yasuski at 06:34| Comment(0) | mbed

2013年11月28日

mbedでUSBHOSTを実験する

mbedにXBeeを接続して通信を確認した。 実験中に偶にデータがシャックリを起こしていたので、リセットボタンが必須かもしれない。

 

信号ルーティンは、USB/midi楽器→mbed→XBee XBee→usbToMidiInterface→PC上のアプリで通信を確認、、、という流れになっている。

今回は、プログラムを製作したRadioJunkBoxさんのお陰で、昨年夏以来悩んでいたUSB機器のデータをWiFiで飛ばすことが実現出来た。 次は、本命のMonomeにトライするのだが、とりあえずmbedと接続したところ、予想通りmonome側があぼーん状態となった。 

やはり、FTDI系のデバイスには専用のドライバーを組み込まないとハンドリングは無理っぽいのだが、今週中に本家のディベロッピングボード、その名もVNCULOがやってくる。 

FTDI-VNCLO-MB1A_press image.jpg

Arduinoのパチもんというか、なんと読んでいいのか判らんネーミングではあるが、各種配線と電源の問題でスタックするいつものパターンはこれで避けられると思う。

が、計画の可否の判別に約5千円もかかっちゃうのはちょっと納得が遺憾ところもある。 Vinculum系のネタを検索しても引っかからないという不思議な現象は、やっても無駄ってことなのかもしれない。

posted by Yasuski at 02:44| Comment(0) | mbed

2013年11月27日

mbedのボードが来た

帰宅すると、注文していたmbedが到着していた。 今更こんなことを書いてると笑われてしまうが、データを「焼く」というよりもアップロードするという感覚が自分には新鮮だった。 

Webでコンパイルを行うのも、IDEをインストールして互換性にすったもんだすることを思えば超楽チンな方法だ。 ただし、この仕組みはコンパイラの「仕様」が変わってしまうと、昔書いたコードが使えなくなる問題も孕んでいるので、良いことばかりではない気がする。

以上、ちょろっと触ってみて得た感想は扱い易そうな仕組みなのだが、周辺機器に関してはShieldを用意すればなんとかなりそうなArduinoよりも敷居が高いという感触を持った。 Arduinoとはターゲットにしているユーザー層が微妙に違うのではないだろうか。

mbedチップを乗っけるホードは基板屋本舗さんから購入した。 日本国内の調達ではここが一番安いと思う。 なお、搭載されているLCDのデータピンの指定アドレスが本家のサイトにアップロードされているコードとは違うので、コンパイル前の修正が必要だ。

とりあえず、HelloWorldとか表示させて動作チェックを行っては見たが、USBHOSTがちゃんと動いているのかの確認を視覚的に行いたいので、明日はLCDにmidi受けの内容を表示するためのコードの追加に取り組む予定。 

同時に平行して、現物を絡めたシリアルデータの動作確認を行いたいところ。
posted by Yasuski at 02:18| Comment(0) | mbed