このサイトはInternet Explorerに対応していないためページが正しく表示がされない場合があります。
他のブラウザ(Microsoft Edge等)で閲覧してください
製作期間 : 2014年4月ごろ ~ 2015年1月ごろ
記事作成 : 不明
最終更新 : 不明
PICのタイマー割り込みができるようになったので
電子オルゴールをつくっていました。
でも単音だとなんか物足りない感じがしていたときに
(別々のパートを別々のPICで演奏すればいいのです…)
という声が聞こえた気がしたのでやってみたところ…
音がズレて聴けたもんじゃねぇ
それもそのはず、命令実行時間を無視して何千とループを続けていたらタイミングはどんどんずれていきます。
(だったら外部からテンポを送ってやればすればいいのです…)
んん?
外部からテンポ入力
↓
外部(PC)から演奏データも入力?
↓
メモリ気にせず長時間の演奏も可能?
↓
最強?
そんな感じでこの作品をつくりはじめました。HDDを使おうとしたのはもう少し後です
MIDIとは電子楽器の演奏データの転送の規格のことです
MIDI信号は31.25kbpsのシリアルデータです。
基本3byte=24bitを1つのデータとして扱います
最初の1バイト(ステータスバイト)で機能の選択(音のON/OFF等)をし、
2番目と3番目のバイト(データバイト)で選択した機能の設定
(音程、音の強さ等)をします。
ステータスバイトとデータバイトはMSBで区別することができ、
ステータスバイトは1、データバイトは0です。
また、前に送ったデータとステータスバイトが同じ場合
ステータスバイトを省略することができます。(ランニングステータスという)
データはLSBから送っていき、5Vの状態が0、0Vの状態が1です。
最終的な回路図がこちら。
突っ込みどころがたくさんあるかもしれませんが言わないでください(迫真)「PC1 TLP250」というのはフォトカプラです。指定電源電圧が10V以上なのですが5Vでも動いたので使っています
PICは秋月で1つ80円の「PIC12F1822」を使っています(画像では「16F1822」となっていますが間違いです)
基板をPCBEで設計します。 基板を何層も重ねて拡張できるようにしました
フローチャートを考えます
突っ込みどころがたくさんあるかもしれませんが(ry
開発環境はMPLABX、C言語、コンパイラはXC8を使って書いていきます。
音程の定義はオルゴールのプログラムから流用しました。
```c /音程定義(半周期の時間[us])/
```
これを2^n倍していろいろな音の高さに対応していきます。
MIDIデータはDOMINOというフリーのソフトを使って作っていきます。自分は耳コピとかで慣れ親しんでいるので苦労はしませんでした
むしろ6和音制限の縛りで耳コピするのって新鮮で楽しかったです
けっこう適当なネタだったのですが、「HDDの動きが面白い」と、あまりこういうことに詳しくない方にもウケがよかったのは嬉しかったです。