フォト
2025年3月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
無料ブログはココログ

« コンパイラ XC16 V1.25用の Peripheral Libraries のインストール | トップページ | PIC24FJ64GB002を使ったUSBホストの実験 4 »

2016年3月 3日 (木)

PIC24FJ64GB002を使ったUSBホストの実験 3

方向的にMIDIコンバーターの実装に進んでいます。

シリアル通信で外部MIDIメッセージを受信し、USB-MIDIインターフェスのMID音源I機器に
演奏データを送信します。下図のように真ん中でインタフェース変換を行います。

04

取りあえず実装し、動作確認としてIchigoJamからMIDIメッセージを送信してみました。
IchigoJam間はGNDとTX-RX接続の2本だけです。

03

MIDI端子(IN/OUT)ってピンが5本あるのでてっきり双方向かと思っていたのですが、
一方向だったんですね。この接続で初めて知りました。
相手からの応答の通信仕様が無いので疑問に思っていました。

実際にやってみて初めて理解出来ることってありますね。

動作の様子



IchigoJam用の演奏プログラムは、IchigoJam開発者の福野さんのブログ「福野泰介の一日一創」
の記事「YAMAHA NSX-1 x IchigoJam eVY1とBASICを使ったお手軽DTM」にて公開している
プログラムをそのまま利用しました。福野さんの記事ではeVY1を使ってIchigoJamで演奏
させています。

IchigoJamは単体で動作し、プログラム修正が容易なので実験や動作確認には良いですね。

今回の実験において、
  「4MHzの外部クロック供給、内部オシレータ(FRC)でもいけるんじゃね?」
と思い、試してたところ動いちゃいました。

システムクロックの精度に敏感なUSB、シリアル通信とも取りあえず動作しているので
以後これでいっちゃいます。

01

4MHzのセラミック発振子を取り外せてちょっとすっきりしました。

回路図(電源供給の三端子レギュレータとmicroUSBコネクタを除く)的にも、
パスコンと抵抗とコネクタだけです。

(2016/03/08 修正 回路図のD+とD-の接続が間違っており、修正しました)

02


ソフト的に追加した機能は、
・シリアル通信周りの機能の実装
・MIDIメッセージ→MIDIイベントパケットに変換処理の実装
・USB周りの異常系(USBデバイスの抜き差し、USBデバイス電源落ち等)
・電源管理(USB機器が未接続の場合はアイドル状態にする)
です。

まだまだ、動作不安定なところがあります。
・USBデバイスを切断した場合に割り込みで呼ばれる関数から復帰後、フリーズした
  ような状態になります。全く原因が分からず、仮対処として割り込み発生時に
  ソフトウェアリセットをして復旧しするようにしました。
  これは後々何とかしたい。

・でたらめなMIDIメッセージ(内容が正しくない)を流し続けるとポケット・ミクで
  演奏できなくなる。
  IchigoJamのシリアル出力は、画面に表示される内容も垂れ流しとなるので、
  接続している間、MIDIメッセージとしてでたらめなメッセージも送ってきます。
  MIDIメッセージ→MIDIイベントパケットの変換で不正メッセージは取り除いて
  いるのですが、何故か演奏出来なくなります。こうなると手動でリセットしないと
  復旧で出来ない。これは原因を見つけて対処が必要。

ソフト的な問題なのでハードとしてはMIDI端子を付けて、基板実装いたしましょう。

« コンパイラ XC16 V1.25用の Peripheral Libraries のインストール | トップページ | PIC24FJ64GB002を使ったUSBホストの実験 4 »

IchigoJam」カテゴリの記事

PIC」カテゴリの記事

コメント

既知かもしてませんが、IchiugoJamで「UART1」でPRINT文のみシリアル出力にできます

後田さん

UART1の命令の存在、すっかり忘れていました。
情報ありがとうございます。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: PIC24FJ64GB002を使ったUSBホストの実験 3:

« コンパイラ XC16 V1.25用の Peripheral Libraries のインストール | トップページ | PIC24FJ64GB002を使ったUSBホストの実験 4 »