2020年2月4日火曜日

Arduino 互換機での moco ファーム

2つのArduino互換機で、moco ファームを試しましたがだめでした。
互換機がすべてだめということはないとも思われますが、


???? MEGA 2560 R3
\1200くらい。
PC-USBのシリアルを担当するチップが
CH*****で、駄目




SainSmart MEGA 2560 R3
\2500くらい。
DFUモードで起動できないので
SainSmartにといあわせたところ、DFUモードはないということで。駄目
力技で書き換える方法もあるようですが・・・・




純正Arduino Mega 2560 R3
\5000くらい。
アクリルのボードもついてます
あぁやっぱり純正が「面倒」がないってことでしょうか・・・w

2つ目の moco ファームのMIDIデバイス

2つ目の mocoファームのMIDIデバイスを作成して成功





ただし、最初に接続したときには
先に作成した[CMP-MIDI Fader]と認識されてしまった。
一度削除して、接続はずして、再接続すると[MPU-MIDI 2]と認識された

その後、先に作成したデバイスを接続すると、
それは[CMP-MIDI Fader]と認識された。

.Product ID 変えないと駄目なのか?

別のPCに(この2つのデバイスを接続するの初めて)につないでみたところ
違う名前のデバイスとして認識

2021年2月4日追記

Desctiptor.cの

* for MIDI */
USB_Descriptor_String_t PROGMEM ProductStringMIDI =
.UnicodeString  を書き換えると Windowsのデバイスマネージャーでは
「一応」違う名前で表示されるが
Nuendoにつないでみたところ、同じ名前が二つ列挙される
名前が同じでも、違うポートとして使えるかと思ったら
片方のポートが両方とつながって?もう片方は反応なし・・・・

そこで,
Descriptor.c の105行の

.ProductID              = 0x2048, // LUFA USB-MIDI Demo application

これを、もう片方のものとは別物にしてみたところ、Nuendoでも正常に使えた

ArduinoにつなぐMIDI IN / MIDI OUTの回路

Arduinoに、接続する、MIDI IN/MIDI OUTの付加回路は
ネット上には、いろいろな回路が公開されていたけれど
これで成功した。
MIDIシールド買うほうが、時間・手間を考えると安いかもしれない。




作った基板



Arduinoに乗っけた図

Arduino-MIDI-mocoのサンプルソースコード

このサンプルは、ハードウェアシリアルが、4つある
Arudino MEGA用です
ハードウェアシリアルが、1つしかないArduinoでは
ソフトウェアシリアルというやりかたになるので・・・そちらは知りません。
たぶん SoftwareSerial




#include <MIDI.h>
    MIDI_CREATE_INSTANCE(HardwareSerial, Serial,    midiUSBPC);   //TX0/RX0 (TO PC-USB serial)
    MIDI_CREATE_INSTANCE(HardwareSerial, Serial1,    midiPORT);   //TX1/RX1(外部MIDI)
    MIDI_CREATE_INSTANCE(HardwareSerial, Serial2,    midiPORT_B); //TX2/RX2(外部MIDI)



//=================================================
//MIDIポート A   からPCへのへの処理(MIDIポートAに入力があると、ここに飛んでくる)
//=================================================
void handlePORTprocess(byte channel, byte number, byte value)
{
      midiUSBPC.sendControlChange(number, value, Channel); //send to TX0
}



//=================================================
//MIDIポート B   から PCへの処理(MIDIポートBに入力があると、ここに飛んでくる)
//=================================================
void handlePORT_Bprocess(byte channel, byte number, byte value)
{
      midiUSBPC.sendControlChange(number, value, Channel); //send to TX0
}



//=================================================
//PCからMIDIポートへの処理(PCからMIDIデータがくると、ここに飛んでくる)
//=================================================
void handleUSBPCprocess(byte channel, byte number, byte value)
{
        midiPORT.sendControlChange(number, value, Channel);// To TX1
        midiPORT_B.sendControlChange(number, value, Channel);// to TX2
}






//=================================================
void setup()
{
    midiUSBPC.setHandleControlChange(handleUSBPCprocess);
    midiUSBPC.begin(MIDI_CHANNEL_OMNI);
    midiUSBPC.turnThruOff();//これがないと、入力をスルーして出力してしまう



    midiPORT.setHandleControlChange(handlePORTprocess);
    midiPORT.begin(MIDI_CHANNEL_OMNI);
    midiPORT.turnThruOff();//これがないと、入力をスルーして出力してしまう



    midiPORT_B.setHandleControlChange(handlePORT_Bprocess);
    midiPORT_B.begin(MIDI_CHANNEL_OMNI);
    midiPORT_B.turnThruOff();//これがないと、入力をスルーして出力してしまう

}
void loop()
{
    midiPORT.read(); //read RX1
    midiPORT_B.read(); //read RX2
    midiUSBPC.read(); //reat RX0
  }
//この例では、MIDIコントロールチェンジにしか対応していません

x

ArduinoでのMIDIのポートについての覚書

ArduinoでのMIDIのポートについての覚書

Arduino Megaでは、シリアルポートが 4つある

TX0/RX0
TX1/RX1
TX2/RX2
TX3/RX3

当初、これらの4つのポートをすべて MIDIに使えると思ったが

1つのポートは、PCとの通信用ポートとなる。

で、残り3つのポートを物理的にMIDIとして使えるが
ArduinoとPCの通信には、1つのポートしかつかえないので
(使えるはずですが)
PCからみて、ソフトウェア的には、1つのMIDIポートしか使えない
(PCから見て、いわゆるマルチポートMIDIデバイスとしては使えない)

TX0/RX0は、PCとの通信専用

TX1/RX1
TX2/RX2
TX3/RX3
に、MIDIポートを割り当てる事ができる、が

PCとは、1ポートでしか通信できないので
擬似マルチポート的に使うなら
TX1/RX1 は、MIDIチャンネル1のみ
TX2/RX2 は、MIDIチャンネル2のみ
TX3/RX3   は、MIDIチャンネル3のみ
のようにすれば、つかえないこともない。
MIDIメッセージの種類でポートを分けることも可能

つまり
TX1/RX1に入力されたMIDIメッセージを、Arduinoで、全部1チャンネルにして、PCに送る
TX2/RX2に入力されたMIDIメッセージを、Arduinoで、全部2チャンネルにして、PCに送る
TX3/RX3に入力されたMIDIメッセージを、Arduinoで、全部3チャンネルにして、PCに送る
のようにすれば、PC側で区別できる。その逆も可


mocoのMIDIデバイス表示名の変更

2020年2月1日 windows 10 64bit環境にて・・・・・


mocoファームウェアに書き換えて
PCに接続すると、デバイスマネージャーの[サウンド、ビデオ・・・]カテゴリに[MocoLUFA]と表示される。
この表示名を変更するには、ファームウェアの再コンパイルが必要。

用意するもの------------------------
ソース
  LUFA-100807.zip
  mocolufa-master.zip

ツール
  Git-2.12.0-64-bit.exe
  WinAVR-20100110-install.exe
  mingw-w64-install.exe(202002使用せず)
  mingw-get-setup.exe(202002使用せず)

インストール-----------------------
Git
・Select Components [NEXT]
・Select Start Menu Folder [NEXT]
・Adjisting your PATH enviroment [USE Git from Git Bash only] に変更
・Configuring the line ending conversions
      [Checkout as-is, commit Unix-style line endingsに変更
・Configuring the terminal to use with GitBash [NEXT]
・Configureing extra options
      [Enable Git Credential Manager]をチェックはずす

WinAVR
・Choose Components[Install Files]のみ

msys-1.0.dllを、WinAVRの utils\bin に置く
  ※置かないと makeしたときに avr-gccが 0xc0000142エラーを吐く



ソースファイルフォルダの位置関係------------------------------------

hoge +----[LUFA-100807]
         |
        +----[moco(hoge)]-[mocolufa-master(ここにmocoのソース]
のようにおく

windowsのエクスプローラで、[mocolufa-master]フォルダを右クリック
[Git bush here]で、コマンドプロンプト(MINGW64)がひらく

そのGit bushコマンドプロンプトウィンドウで
export PATH=/c/WinAVR-20100110/utils/bin:/c/WinAVR-20100110/avr/bin:/c/WinAVR-20100110/bin
(ツールへのパスを通す。これは、WinAVRがインストールされたパス)
※このウィンドウは、下のmakeで使うので開いたままにしておく。


ソースの変更----------------------------------------
[mocolufa-master]にある Descriptors.cの450行目あたり
----------------------------------------------------------------------------------
USB_Descriptor_String_t PROGMEM ProductStringMIDI =
{
.Header                 = {.Size = USB_STRING_LEN(14), .Type = DTYPE_String},

.UnicodeString          = L"CMP-Midi Fader"
----------------------------------------------------------------------------------
・USB_STRING_LEN(14)の数字を、書き換えたい文字列の文字数にする
・CMP-Midi Faderなどのように””内を変更



保存したら、上記で開いたコマンドプロンプトウィンドウで、

make
([mocolufa-master]フォルダにある makefileにしたがってコンパイルが実行される)

make clean お掃除
(コンパイルで作成された、中間ファイル・出力ファイルの削除)




[mocolufa-master]フォルダに、dualmoco.hexができれば成功
エラーはでるかもしれないが、OKだった


複数つないだときはまだためしていない    成功


Arduinoで、dualmoco ファームウェアを使うための覚書

Arduinoで、dualmoco ファームウェアを使うための覚書

mocoファームウェアについて
http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/
http://www.dm9records.com/index.php/tips/arduino/moco/


1.Arduino IDEをインストールして(option はすべてcheckのまま)
2.Arduino MegaをPCに接続すると
3.COMポートに[Arduino Mega 2560]と認識される。


※moco ファームウェアに書き換えるためには
Arduino を DFUモード (Device Firmware Update)にしなければいけない。


カメラ3台

 DOCKのUSBに2台 3台目は、本体のUSB。 3台とも20メートル延長OK