(続) PIC de MIDI

長嶋洋一


RE:PIC de MIDI 99/02/21 07:56


うーーーむ、ドカンときましたね。(^_^)
PICシリーズが参入したことで、ここはAKI-80とAKI-H8とPICと、
いよいよ役者が揃ってきました。(^_^)

PICについては、たしかDOS/V機で開発して、PICへのソフトの
書き込みは、シリアルポートから専用ライタに送るのでした
よね。そのあたり、初めての人に向けて補足していただければ
最高かと(他にもPIC派はいましたよね)(^_^;)。

たしか、まだCQからはPICでMIDI本は出ていない(AKI-80は僕が
一昨年に出しましたし、AKI-H8は今年の夏に出る予定です(^_^))
ので、PIC版を書くのならお知らせ下さい。編集長に紹介します。
以下、ちらっとだけコメントをば。

> PIC16F84を使ったMIDI小物、その1をお贈りします。
> DTM仕様の音源モジュールやキーボード(R社SK-50,Y社CBX-K1XG)をリアル
> タイム演奏に使おうとすると音色切替が面倒です。
> そこで、ワンタッチで音色番号を選択するために作りました。

こういうのをライブで使うためには、本来のキーボードからの情報と
このプログラムチェンジをマージする必要が出てきます。すると、PIC
ではちょっとキツくなってきて、AKI-H8などの出番となります。(^_^;)
でも、入力デバイスとしてMIDIを送る、というのはもっとも入門的な
アプローチなので、ここから始まるというのはとても教育的です。(^_^)
この製作は、某ギョーカイの新人研修に使えるのでは。(^_^;)

> キー・スイッチはジャンク屋で電話用のものを買ってきて、キー・トップを
> 適当に並べ変えました。
> スイッチ・マトリクスを組む場合、同時に押されるスイッチの個数が2個ま
> でならばダイオードは不要です。

僕が作ったのも、スイッチは同時には多数押されないことを
前提としています。(^_^;)

> さて、電源まで省いて相手の MIDI OUT から電流をもらおうという暴挙も公開
> してしまいましょう。(だって、電池もACアダプターも面倒なんだもん。)
> 短距離で1対1で使う分には一応動きますが、相応のリスクはあるでしょう。
> ここで使う三端子レギュレータはMOS型の低ドロップ電圧、超低消費電力のもの
> です。(例)リコー RE5RL33A(3.3V)

うーーーむ、やってしまったか禁断の手を。(^_^;)(^_^;)

これはまぁ、MIDI送り機器ではイケる手です。MIDI協議会としては
たぶん推薦しませんけど。(^_^;)
そっか、PICは3.3Vでいいわけですね。
このリコーの3端子は、実はICCで常設展示している、前林さんの作品
の中でも使っています。(^_^) たしか心拍センサのワイヤレスだった
かな。ちょっと入手が面倒でしたが、石としては使いやすいですね。

> PIC小物その1、ソフト篇をお贈りします。
> いきなりオープン・ソースにて失礼します。

うーーむ、自分のを見てもそうですが、新しいCPUのソースとなると
まるで苦しいですね。(^_^;)

> start
>     bcf     STATUS,RP0
>     movlw   0xFF
>     movwf   out_b
>     movwf   PORTB

ラベルにコロンが付かないのがシンプルかな。PICのアセンブラは
未経験なので、コメントはパス。(開発キットまで一式、買った
まま眠っています。エミュレータまであるのに(^_^;))

> PIC16F84を使ったMIDI小物(今度は大物?)、その2をお贈りします。
> さてお待ちかねの光ハープです。
> 要はキー・スイッチのマトリクスと同じで、スイッチの接点部分をLEDと
> フォト・トランジスタに置き換えたものです。

なるほど、僕が研究助成金を取って、キーエンスのFA用光モジュールで
作ったもののアマチュア版ですね。前から言ってましたよね。やります
ねぇ、さすが。(^_^)

> RB0-3の出力は、どれか1本だけがローになるようにスキャンし、LEDを点灯
> させると同時に対応するHC244の出力をアクティブにします。

はい、隣接させるためにはどうしても時分割スキャンが必要となります。
ICCの前林作品でも、3人の来場者のCCD位置センシングのためには、
それぞれの頭上の2個のLED(計6個)を、ワイヤレスで時分割点灯して
います。これと同じですね。(^_^)

> 面倒なのは、筐体の木工とLED,PhotoTrの取り付け、光軸合わせです。
> 光軸合わせは、テスト・モードでLEDを1系統ずつ点灯させ、PhotoTrの
> コレクタ側の電圧を測りながら行います。

うーーむ、ここらがかなり大変ですね。キーエンスのものの場合(オムロン
でも同様でした)、光軸はかなりのマージンがあり、アバウトにだいたい
そのへん、という角度で確実にセンシングできます。さらに、受光部に
外来光が入っても大丈夫です。光になにやら変調をかけて、ノイズ光と
分離しています。さらに、個々のモジュールを次々につないで差し込む
だけで、それぞれのモジュールが時分割動作して干渉防止するように
なっているので、僕は実は、各モジュールからの情報をスイッチのような
スタティックなものとして見るだけでMIDI化できます。手抜きをしている
のです。その意味で、このシステムの方が高度なのです。(^_^)

RE^2 PIC de MIDI 99/02/21 15:06


みなさんこんにちは。PIC 派というわけではないのですが 最近 PIC と戯れている者です。

ありがとうございました。とても参考になります。それにしても
皆さんのテキストでの回路図の描画の巧さに驚いています。(読む
のは訳ないんですが) なんかコツでもあるのでしょうか。

ところで質問なのですが、 音色切り替えに御使用の 3.3V/2Mhz で動
作させている PIC16F84 は、現在もっとも流通していると思われる PIC16F84-10
なのでしょうか?他に 4Mhz までの動作規格の物で PIC16(L)F84-04 なるものが
あるらしいのですが、もしかしてこっちなのでしょうか?もしそうなら入手方法
を教えて頂ければ有り難いです。

PIC の話題になったので、PIC の自己レスを兼ねて TIPS(失敗談?) を書きたい
と思います。 
  
PIC のポートからのダイレクト MIDI 出力:
  PIC16F84 のポートから HC04/05 等の外部バッファを使わないで MIDI データを
  出力するのは吸い込み、吐き出しでも動作を確認しました。でも吸い込み動作の
  ほうが無難だと思われます。今までできなかったのは、シリアル通信の負論理の
  理解が誤っていたためでした。(^^;)

クロック回路:
 主に  I/O 数確保のため PIC16F84 を4回路並べて同じレギュレターから電源を
  とるという回路を去年作ってしまった (^^;) のですが、 1回路ごとの動作は問
  題ないのですが、4回路同時に動かそうとすると非常に不安定になりました。こ
  れはそれぞれの回路の独立した同じ周波数のクリスタルが動作するため猛烈な干
  渉?が発生しているらしいことがわかりました。(^^;) こういう場合は、外部の
  クロックマスターから同一のクロックを供給しなければイケナイのですよね。こ
  んな初歩的なミスに気がついたときには、 すでに CAD で基板のパターンを起こ
  した後でした。その後基盤のパターン配置からやり直すはめになったことは言う
  までもありません。

マトリクスキー回路のプルアップ抵抗値: 
  マトリクスのプルアップ抵抗の抵抗値が小さいとキーの押し下げが認識できませ
  ん。 PIC だと 10K オームではキーの押し下げが認識できませんでした。逆に大
  きいと次のスキャン時に電圧値が完全に復帰しないため、 'L'状態と誤認されて
  しまいます。 1M オームのプルアップではこういう状態になりました。というこ
  とで、 確実に押し下げが判定できて、少な目な抵抗値として大体 47K オーム数
  字に落ち着くのだと思います。 マトリクス式は必要な I/O ポート数が劇的に節
  約できるので、PIC などでは覚えていると本当に便利ですね。短所としては、単
  純に I/O を読むよりプログラム容量が少し大きくなるので CPU のプログラム容
  量があまり大きくない場合には、  この容量を越えないように注意が必要です。
  PIC16F84 では 0000-03FF までの 1000 命令です。
 ちなみに CS01 の MIDI 送信回路ではこの CPU を使って 6*6 で 32CH のマトリ
  クスを読んでいすが、冗長なコードでモノフォニック式発音にさせていますがま
  だ結構余っています。 (I/O はもう残っていません。) ただし高級言語で記述す
  る場合、プログラム容量は PIC16F84 の場合、結構な制約になる可能性があるよ
  うな気がします。

デバッグ用オシロ: 
 なければないで開発は可能。しかしデバッグ時ハードの問題かソフトの問題かを
  切り分けるには、非常に有益な道具になります。 MIDI のデバッグだけならそれ
  ほど早いものでなくとも実用になりますが、アナログオシロの場合、単発の信号
  は、あっと言う間に消えてしまうので、プログラムに細工をして同じ信号を繰り
  返せば、信号の立ち上がりや、落ち具合が確認できます。ジャンク扱いのものは
  かなり安く入手可能ですが、(私は 10K で入手しました。 ) あたり外れが確実
  にあります。私のははずれに近かったような気がしますが十分役に立っています。
  
ICE: 
 これがあるとデバッグが楽になるらしい。デバッグ時間の短縮に役立ちます。当
  然機種依存なものであるのと、 高価 (最低 50k 以上) といえるので高嶺の花で
  す。 ちなみに私は長嶋さん式の"書き込み→ソース修正"のみで ICE は当然使っ
  ていません。(^^;)


丈夫: 
 素手でべたべた触っていますが、全然壊れません。 フラッシュ ROM の書
  きこみ回数制限の上限に達する前に、ピンが度重なる抜き差しに耐え切れずに途
  中からとれてしまいました。この時点で、デバッグ用の最前線は退いて頂き、組
  み込み用に最利用しています。

開発ソフトの充実:
 純正の WIN9x・DOS 用のアセンブラ・シミュレーターはなんと無償です。DOS のア
  センブラと秋月さんのライターは AT/XT 互換の HP200LX でも動きますのでいつ
  でも・どこでもなプログラミング環境が実現可能です。なおサードパーティから
  は Mac 用の開発キットが出ている模様です。

安い:
  一個 \600 です。駄菓子感覚でこの素晴らしい工業製品を入手可能なのです。

まとめ:
 H-8 は PIC16F84 ではほぼ実現不可能と思われる受信バッファ領域が余裕を持っ
  て確保できたり、I/O 数の豊富さなど PIC16F84 と比べリソースの豊富さが魅力
  ですね。 それにお仕事もいっぱいありそうだし。。やはり用途に応じて CPU は
  選択すべきと改めて感じます。 僕も早く H-8 を使いたいのですが全く極私的な
  理由で、まだ進展してません。Y 社の H-8 用 C コンパイラが、使い慣れた PDA
  での動作が不可能であることことが判明したため (プロテクトメモリ必須らしい)
  で、動作可能なコンパイラがあればすぐにでも挑戦したいのですが、もう少しあ
  たってみようと思います。
 
*私は上記の製造企業とはなんら関係はありません。念のため。

RE:RE^2 PIC de MIDI 99/02/21 23:33


>PICについては、たしかDOS/V機で開発して、PICへのソフトの
>書き込みは、シリアルポートから専用ライタに送るのでした
>よね。そのあたり、初めての人に向けて補足していただければ
>最高かと(他にもPIC派はいましたよね)(^_^;)。

あ、そうですね。(^_^;)
専用ライタを使わず、PICを基板に実装したままプログラム転送するワザ(と
いうほどものではありませんが...)も含めて、近日発表ということで。

>こういうのをライブで使うためには、本来のキーボードからの情報と
>このプログラムチェンジをマージする必要が出てきます。すると、PIC
>ではちょっとキツくなってきて、AKI-H8などの出番となります。(^_^;)

MIDI信号のマージを考えるとPICではつらいところです。
あくまでも、一方的に送りつけるだけ、しかもMIDI送信中はMIDI送信にのみ
専念するのでスイッチやセンサーからの入力は受け付けられない、という制
約があります。まぁ、MIDIの送信は640μsから960μsで済みますが。

> ところで質問なのですが、 音色切り替えに御使用の 3.3V/2Mhz で動
> 作させている PIC16F84 は、現在もっとも流通していると思われる PIC16F84-10
> なのでしょうか?他に 4Mhz までの動作規格の物で PIC16(L)F84-04 なるものが
> あるらしいのですが、もしかしてこっちなのでしょうか?もしそうなら入手方法
> を教えて頂ければ有り難いです。

PIC16F84-4 を使いました。(残念ながら'L'ではありません)
大阪日本橋の共立、デジットでは'-4'が普通で、'-10'は100円増です。
'L'は2.0Vでも動作するようですが、詳しくはチェックしていませんでした_o_

> デバッグ用オシロ: 

予算が許せば欲しいですよね。
長嶋さんお薦めのパソコン接続タイプがよさそうです。
ちなみに私は秋月で扱っているOsziFoxを買いました(約1万7千円)が、
あまりうまく使いこなせていません。

#アナログオシロで単発信号を観測するには、部屋を暗くして画面の輝度を
#上げて目の残像を利用する... 

> ICE: 

職場で感じているのですが、最近の若い人はICEがないとCPUプログラムの開発
はできないと思っているようで...
基本的には、「書き込み→ソース修正」で良いのですが、いちいちROMを焼く
のも面倒ですから、RAMを使ったROMエミュレータが便利です。
もう少し開発効率をアップするには、実機上に簡易モニターを載せると良い
です。いずれ、AKI-H8の簡易モニター方式もご紹介しようと思っています。

最近のCPU(DSPも)はクロックが100MHzを超え、今までのようなICE(In Circuit
Emulator)は使えないような状況になってきています。そのため、CPUチップ自
体にテスト機能を兼ねてJTAG端子経由で On Chip Emulation ができるように
なっています。JTAGは単純なシリアル通信ですから、従来のような大掛かりな
ハードが不要です。例えば日立のSH-1,2では100万円近いICEが必要でしたが、
SH-4では9万8千円のPCMCIAカードで済みます。

+------------+ 
|   NotePC   |
|   +--------+       +-----------+
|   | PCMCIA |=======| Dreamcast |
+---+--------+       +-----------+

...などというハッキングもできるはずです。

> 
> 素手でべたべた触っていますが、全然壊れません。 フラッシュ ROM の書
> きこみ回数制限の上限に達する前に、ピンが度重なる抜き差しに耐え切れずに途
> 中からとれてしまいました。

始めに述べたように、PICを実機に実装したままプログラムすると楽ですョ。

> 純正の WIN9x・DOS 用のアセンブラ・シミュレーターはなんと無償です。DOS のア
> センブラと秋月さんのライターは AT/XT 互換の HP200LX でも動きますのでいつ
> でも・どこでもなプログラミング環境が実現可能です。

私もHP200LXを愛用しています(^_^)

RE^3 PIC de MIDI 99/02/22 23:25


  |PIC16F84-4 を使いました。(残念ながら'L'ではありません)
  |大阪日本橋の共立、デジットでは'-4'が普通で、'-10'は100円増です。
  |'L'は2.0Vでも動作するようですが、詳しくはチェックしていませんでした_o_

  どうも御情報ありがとうございます。 大阪方面には 16F84 の-4 が流通している
  のですね。早速問い合わせてみようと思います。

 |専用ライタを使わず、PICを基板に実装したままプログラム転送するワザ(と
 |いうほどものではありませんが...)も含めて、近日発表ということで。

  ISP:
  PIC の DIP パッケージを使う段階では、 ライターにて書きこみ→取りだし→基
  盤へ差し込みの工程は熟練してしまったので時間的には  10秒もあれば終了して
  しまう (^^;) のですが、 頻繁な書き換えにはお薦めできないですものですね。
  16F84-10  の SOP パッケージ (筑波のアイ・ピイ・アイさんにて入手しました)
  を書きかえることになったときには一度基板からはんだごてで剥がして書き直す
  ことになったことがあって、非常に気が進まない作業をすることになった気憶が
  残っているので、基板を ISP 対応の構造にしておいた方が無難と思っています。

 基板と線材:
 感光基板作成は CAD で基板パターン作成→基板作成の工程で、今は CAD ソフト
  出力をプリンターで  OHP フィルムに出力して感光基板に感光させてエッチング
  しているのですが、この工程が、Roland ディージーさんの CAMM2 とかの切削式
  のものがあると基板製作が楽しくてしょうがなくなるとは思うのですが(^^;)
  個人で利用してらっしゃる方はあまり多くはないでしょうね。SOP 用の非常に細
  いパターンの基板を作ったときは、感光時間等の調整とエッチングの工程で内側
  の細かいパターン部は侵食しにくいため侵食が早い外側のパターン部がいつのま
  にか千切れてしまい何枚か感光基板を捨てる結果になりました。もちろん十分な
  厚さが確保できる  DIP の配線パターンは感光基板で快適です。

  デバッグ用の基板は、ユニバーサル基板と秋月さんとこの丸ピン IC ソケットな
  どを使用して作成していますが、 I/O 部の配線は 0.2mm のジュフロン線を縫い
  ものをするように配線しています。切り口は熱で表面の絶縁コートが溶けやすく
  なるようで被覆を剥がす工程を省けるので利用しています。注意するのは、切り
  口でない部分でも摩擦や熱で表面のコーティンがはがれてしまうと短絡する心配
  があるのですが、思ったよりこのコーティングは丈夫だという印象を持っていま
  す。 特にごちゃごちゃしていて、短絡の心配がある部分は直径 2mm の (入手可
  能だったなかで最も細かった) 収縮チューブを被せています。本当は直径1mm
  以下のものが欲しいと思っています。ジュフロン線の経年変化による接触不良や
  短絡を心配していたのですが1年やそこらは問題なさそうなので、デバッグ用基
  板には十分と考えています。皆さんはどのような配線をしているのでしょうか。

 |#アナログオシロで単発信号を観測するには、部屋を暗くして画面の輝度を
 |#上げて目の残像を利用する... 

 修行不足のせいか僕にはできませんでした(^^;)
 世の中には残像観測の達人がいたりして。

 |基本的には、「書き込み→ソース修正」で良いのですが、いちいちROMを焼く
 |のも面倒ですから、RAMを使ったROMエミュレータが便利です。
 |もう少し開発効率をアップするには、実機上に簡易モニターを載せると良い
 |です。いずれ、AKI-H8の簡易モニター方式もご紹介しようと思っています。

 I/O がからむと少し面倒にはなりますがソフト上のシミュレータで代用が効くケ
  ースも多いと思っています。 H-8 ではいずれ ROM エミュレータ式を使ったデバ
  ッグ方法に落ち着きたいと思っているので実は期待しています。

RE:PIC de MIDI 99/03/01 22:22


>実はこの「筐体の木工」に興味があったりします(^^;)。
>ぜひ,どんなデザインにされたのか教えて下さい。

基本コンセプトは
1) 貧乏
2) づぼら
ですから、御期待にそえるかどうか... (^_^;)

光ハープ 木工篇:
材料は、ホームセンター等で売られている角材です。
厚さ10mm・幅30mm・長さ900mmを3本、それぞれ半分に切ります。
計6本の板が取れますから、まず4本を図1のように組みます。
PhotoTr,LEDを取付けた後、残りの2本を図2のように重ねます。


PhotoTr,LEDの取付けは図3のようにしました。
10mm角ぐらいの角材を長さ20mm程度に切り分けた木片を貼付けて、余分な光
を防ぐためのトンネルを構成すると共に、基板を取付ける足場とします。
今回使用したPhotoTrはリード線が光軸と直角に出ていますから、リード線を
曲げて取付けました。


ホームセンターで手に入る木工材料で最近よく使っているものは、「すのこ」
です。398円から698円ぐらいで、分解すれば厚さ10mm・幅60mm・長さ600mm程度
のヒノキ材が5本ほど取れます。

RE:RE^2 PIC de MIDI 99/03/13 13:11


>専用ライタを使わず、PICを基板に実装したままプログラム転送するワザ(と
>いうほどものではありませんが...)も含めて、近日発表ということで。

PICをライタに挿すかわりに、ライタの信号線を実機まで遠征させるという
イメージです。
ですから、すでにライタをお持ちの場合は次のようになります。

[1] RB6,7を使用していない場合
(RB6,7に外部からのアクティブな信号が来ていない場合も可。
 ただし、RB6,7に接続されている回路によっては不具合が発生
 することも考えられます。)

 書き込みを行うときは、SWをOffにし、ケーブル・ソケットをピン・ヘッダ
 に接続します。


[2] RB6,7を使用する場合

 ライタからのケーブル・ソケットの#1,3,5,7,9は未接続です。
 書き込み終了後、PICを動作させるときには、
 ピン・ヘッダの 1-2, 3-4, 5-6, 7-8, 9-10 をそれぞれショートさせます。


さて、ライタをお持ちでない皆さん、自作は簡単です。
AKI-PICプラチナ・セットは部品が揃っているというだけで、ライタ部分は
基板の蛇の目部分に自作する手間がかかります。
PICの製造元、マイクロチップ社のホームページからリンクされているサイト
では色々なライタ回路が公開されています。
まずは、http://www.microchip.com/ から入り、アセンプラやマニュアルを
入手します。
Developer's Toolbox
 Related Sites
  Microchip Enthusiast's Web Sites
   David Tait's Links
と進んで行くと、
http://www.man.ac.uk/~mbhstdj/piclinks.html
に飛びます。この中に、
DIY PIC programmer というのがあり、様々なライタ回路へのリンクが張られて
います。

私は、その中から最も簡単な回路を改造して作りました。
元の回路は、RS-232Cの+12Vを利用してVppを得るため、
 抵抗4本、ダイオード2本、コンデンサ1個
という超シンプルな構成でしたが、私の場合HP-200LXを使う都合上、
Vppは別途用意することにしました。
ソフトは Ludipipo を使わせて頂いてます。

一般的にはまずソフトをダウンロードし、皆さんのPC環境で動かしてみて
それなりの反応をしたらハードを作る、という手順がよろしいかと思います。


7805,7812は三端子レギュレータ。電流容量はLタイプで十分。
Vppはちょっと低めですから、7812のCommon端子とGndの間にダイオードを
入れて、出力電圧をかさ上するという手もあります。
(7812側がアノード、Gnd側がカソード)

RE^3幻の単行本 99/04/19 23:23


 H-8 本のコンテンツ御公開おめでとうございます。
 あの"熱い"文体が Web で読めることはちょっと新鮮です(^^;)
 本で出版されるより早く読める結果になりました。 
  
  PIC  なんですが 16F84 の 5 倍以上のプログラムエリアと RAM 容量をもってい
  てしかもフラッシュタイプなモデルの出荷が近いようです。これはこれで注目か
  もしれません。
  PIC のインストラクション数は RISC タイプなので非常に少ない (35 位) ので、
  インストラクションはフィーリングがあえば直ぐに暗記してしまうと思います。
  ちょっと便利なのは,
  
  *アセンブラ固有のマクロ命令
  *PC(プログラムカウンタ) の値の下位 8bit を演算対象にして、PCの値を進めたり
  することができる(ちょっと注意必要後述)
 
  PICプログラムで気をつけるところ
  
  *Cキャリーフラグ
  C=1 演算結果の桁上がりなし
  C=0 演算結果の桁上がり発生
  
  PIC のキャリーフラグの値の指す意味は通常と逆のようなので特にはまり易いところ
  かもしれません。

  *Zゼロフラグ
  Z=0 演算結果は0ではない
  Z=1 演算結果は0
  
  これはノーマルでしょうか。
  
  *PCプログラムカウンタへの加算
  ジャンプテーブルを作る時にプログラムカウンタへ加算する(カウンタを進める)
  ことで、結構簡潔なテーブルを構成できることがあるのでつい使ってしまうので
  すが、この場合 8bit の加算になるので 13bit アドレシングな PIC ではページ
  切り替え命令を併用するかアセンブラが出力するリストファイルなどで実アドレ
  スの割当てを見ながら下位 8bit アドレスの桁上がりをまたがない位置に配置す
  るなどの配慮が必要になります。 8bit 以上のテーブルを作るときは、ジャンプ
  の中継点を設けるなどの工夫が必要になるかも知れません。
  
  *誤りがある場合はご指摘頂ければ幸いです
  
  PIC  で作ったものは公開するつもりなのですが、  ちょっとした回路図  
  (私は text で書いたことがないので GIF ファイルです多分) とドキュメントを
  作らないといけませんが、 完成したら Web の方へ御投稿させて頂いてよろしい
  でしょうか?
  
  第一段は  PIC16F84@10Mhz で 32 鍵盤 (CS-01) の送信プログラム (MONO) で
  ポリフォニックに改造しやすいバージョンなものを投稿予定です。ローテクを駆
  使しているのでわかり易いかもしれませんが逆にわかりにくいかもしれません。
  
  今後は H-8 の方へ着手するつもりです。 まず HITACHI さんの H-8 の参照資料
  でもプリントアウトしなければならないですね。枚数が心配です(^^;)