ソフト的な問題(システムエクスクルシブの処理の不具合)が解決できたので、基板実装しました。MIDI-INとシリアル入力でUSB接続のMIDI音源機器の制御が出来ます。今回の実験の成果物とします。回路図的なもの(画像をダウンロードして表示すると大きい図になります)基板実装図プログラムソース未熟なソースですが置いておきます。追記かずぽんさんのご指摘で、動作確認したところ、システムエクスルシブメッセージの処理にミスがありました。かずぽんさんをはじめ、ご利用頂い方々に対しまして、ご迷惑おかけしました。修正して差し換えました。IchigoJamで動作確認しました。eVY1とBASICを使ったお手軽DTM」にて公開しているプログラムを改造して利用しました。福野さんの記事ではeVY1を使ってIchigoJamで演奏させています。RTN21行から24行が歌詞用でデータです。27行でそのデータをポケットミクに送っています。データの作成は下記のサイトを利用しました。・ポケットミクで好きな歌詞を歌ってくれるMIDIファイルを作成http://aisot.org/39/mikuex上記のサイトの「歌詞入力」にて、かえるのうたがきこえてくるよががががいちごじゃむうたと入力して、対応する歌詞データを作成します。05:03:71:43:02:29:0a:06:09:03:2c:07:71:6e:0a:0a:0a:0a:01:36:0e:24:66:02:29:これをテキストエディタで置換等の加工します。歌詞の登録は次のコマンド(システムエクスルシブメッセージ)を送ります。F7歌詞スロットは0,歌詞データ分は作成したデータを指定します。本当は歌詞データの参照位置を指定したりする必要がありますが省略しています。何回か再生すると、歌詞がずれたりします。4MIDI-IN端子を取り付けて、シーケンサーソフトを使った動作テストを出来るようにしました。回路的には、MIDIの作法に従って間にフォトカプラを入れています。MIDIのプロトコル自体はシリアル通信ですが、物理層的にUARTとは違いますね(たぶん)。カレントループという方式(電流の大小を1、0とする)なのでその対処が必要です。回路図を作成してから結線しました。TXDをPICマイコンのRxDに接続してデータを拾います。この端子にamazonで購入した安いUSB-MIDI変換アダプタを取り付けてパソコンに接続しました。Dominoにて適当なmidiファイルを使って演奏させると、ポケット・ミクから音が出ました。ミク声を出すためのシステムエクスクルシブ命令を使うと、ミクの声が出るものの、奇声でなんか違う。全体的な演奏も怪しくなります。演奏を止めても、音が鳴りっぱなしになったりもします。システムエクスクルシブの処理がダメそうです。可変長データの処理がまずそうです。MIDIメッセージからMIDIイベントパケット4バイトずつに分割する箇所が怪しいかも..デバッグはやるとして、異常時の音の鳴りっぱなしはマズイですね。自動・手動でポケット・ミクをリセットする機能も欲しい。3方向的にMIDIコンバーターの実装に進んでいます。シリアル通信で外部MIDIメッセージを受信し、USB-MIDIインターフェスのMID音源I機器に演奏データを送信します。下図のように真ん中でインタフェース変換を行います。実装し、動作確認としてIchigoJamからMIDIメッセージを送信してみました。IchigoJam間はGNDとTX-RX接続の2本だけです。一方向だったんですね。この接続で初めて知りました。相手からの応答の通信仕様が無いので疑問に思っていました。実際にやってみて初めて理解出来ることってありますね。eVY1とBASICを使ったお手軽DTM」にて公開しているプログラムをそのまま利用しました。福野さんの記事ではeVY1を使ってIchigoJamで演奏させています。IchigoJamは単体で動作し、プログラム修正が容易なので実験や動作確認には良いですね。「4MHzの外部クロック供給、内部オシレータ(FRC)でもいけるんじゃね?」と思い、試してたところ動いちゃいました。システムクロックの精度に敏感なUSB、シリアル通信とも取りあえず動作しているので以後これでいっちゃいます。4MHzのセラミック発振子を取り外せてちょっとすっきりしました。回路図(電源供給の三端子レギュレータとmicroUSBコネクタを除く)的にも、パスコンと抵抗とコネクタだけです。・USB周りの異常系(USBデバイスの抜き差し、USBデバイス電源落ち等)・電源管理(USB機器が未接続の場合はアイドル状態にする)です。動作不安定なところがあります。・USBデバイスを切断した場合に割り込みで呼ばれる関数から復帰後、フリーズしたような状態になります。原因が分からず、仮対処として割り込み発生時にソフトウェアリセットをして復旧しするようにしました。これは後々何とかしたい。・でたらめなMIDIメッセージ(内容が正しくない)を流し続けるとポケット・ミクで演奏できなくなる。接続している間、MIDIメッセージとしてでたらめなメッセージも送ってきます。MIDIメッセージ→MIDIイベントパケットの変換で不正メッセージは取り除いているのですが、何故か演奏出来なくなります。なると手動でリセットしないと復旧で出来ない。これは原因を見つけて対処が必要。ソフト的な問題なのでハードとしてはMIDI端子を付けて、基板実装いたしましょう。インストールして利用していたのですが、これだけでは、肝心のマイコンの周辺機器(I/O、I2C、UART、PWM等)のライブラリが使えないことに疑問を持っていました。Libraries)が別配布になったと判明。Compilersのサイトに別途公開されていました。Windows早速ダウンロードしてインストールしてみました。追記エラーが発生したのは、プロジェクト内のヘッダーファイルの中の宣言等が競合を起こしているためでした。2ここ数日、マイコンによるUSB機能の利用、MIDI関連の利用に関する試行錯誤をやっていましたがPIC24FJ64GB002で何とかUSB-MIDIの利用が出来るようになりました。それにしてもPIC24FJ64GB002に関する情報が少ないです。USBH_MIDIを流用しました。https://github.com/YuuichiAkagawa/USBH_MIDI後はMIDI端子を付けたり、SDカード上のMIDIファイルを再生したりやってみたいと思います。1ポケット・ミクをArduino+USBシールドで制御出来ることが分かったのですが、ちょっと大がかりな構成です。そこで、USBホスト機能をもつPICマイコンでもっと簡単に制御出来ないものかと思い、インターフェス誌2014年12月号の記事を思い出して、実験を開始しました。USB周りの知識は無いので今回を機会に勉強したいと思います。なんとか、USB-MIDIホストを1チップマイコンで実装してI2Cまたはシリアル通信で他マイコンから簡単に制御できるようにしたいです。レガシーMIDI端子への変換やってみたいです。USB探偵団の記事の回路をブレッドボードに実装しました。PIC24FJ64GB002という、Microchip社のUSBホスト機能付きのマイコンを利用します。8kバイトと比較的容量が大きいです。回路は単純で電源とUSB接続周りだけの結線です。これだけでUSBホストが実装出来るのなら、何とか使いこなしていきたいですね。プログラム領域が大きいのでUSB機器の制御+αが出来ますね。開発環境は念のため最新版にしました。v1.25インターフェス誌記事のプログラムソース類をダウンロードしてソースをコンパイルします。PICマイコンはあまり使い込んでいないというか、書き込み方法等忘れていました。コンパイルは問題ないものの、書き込みでエラーが出ます。手持ちのPICkit3(ぱちもん)で書き込みを行うも、接続エラーが発生して書けません。もんを使うのは入門としては良くないですね。問題なく書き込み出来ました。3.25の書き込み関連の設定に問題があるようですが、今回は諦めることにしました。書き込み出来たのでこれで良しとします。3.25でも書き込み出来ました。✔を外すにて対応出来ました。プログラマとの接続、PICマイコンへの接続が順に追って確認出来るので接続確認に良いです。HEXファイルを指定して書き込みます。次にインターフェス誌記事のツールを実行し動作確認を行うと問題なく利用出来ました。PICマイコン経由でポケット・ミクからデスクプリタ情報を取得出来ました。このツールを使うとUSBデバイス利用の作法を手順を追って確認出来ます。あとは、インターフェス誌記事を読んでUSB関連の理解をしていきます。(日)初めてのPICマイコンの利用(Lチカ)この前買った秋月電子の「お楽しみ袋」にPICマイコン(PIC16F84A)が入っていました。このマイコンは古いけど割と人気のあるもの見たいです。programmerを購入し、試してみました。PICマイコンについては知識0です。本日朝からネットで資料を参照し試行錯誤です。試したのはLチカなのに意外と手こずってしまいました。以下は、作業メモです。評価が高くて安いのもを選択しました($15.93)まあ、ぱちもんですよね。これ2)開発ツールの入手とプロジェクトの作成まずはC言語で開発したいと思い、次のツールダウンロードしてインストールしました。XC8(xc8-v1.33-full-install-windows-installer.exe)入手方法およびインストール等の情報は下記の情報を参考にさせて頂きました。MacでPICマイコン電子工作入門C言語のプロジェクトの作成手順は上記2)の情報が大いに役立ちました。12Mhzを使ってクロックを供給しています。デバッガの使い方を参考にしました。超入門編(C言語)を参照して作成しました。configでPICマイコンに設定する方法です。12Mhzでシステムクロックを供給したのですが、その設定方法が全く分かりませんでした。_XTAL_FREQで12Mhzを指定します。関数をAVRと同じように使ったらLEDが点灯したままの状態でした。__delay_ms()を使ったらうまく行きました。書き込みこれもかなりハマってしましました。開発環境からpickit3は認識するのですが、pict3とPICマイコン間の接続でエラーとなりました。何回やってもダメです。回路やプログラムを見直してもダメです。使うもんじゃないですねぇ何もかも信用できずです。自分のやり方も含めて..基本に戻って、テスターで信号を調べると、「pickit3が怪しい」と判明。5Vが出ていないです。これではPICマイコンに電源供給が出来ません。今度は正常に書き込み出来ました。う〜ん、明らかにおかしいがまあ、良しとします。いう仕様なのかもしれません。一日がかりで、1ビットのLEDピコピコが出来ました。内部クロック(CR発振)での動作も試してみましたがちゃんと動きました。Lチカですが、多くことを学べました。