![]() こんばんは、デジタルとしえです。
あるものを作りたいなーーーーという構想がありまして、そのためには音源が必要なのです。PSG音源のICなんかも買ってはみたのですが、音を出すためにはコマンドを送らないとダメで、めんどくさいわけです。 わたしとしては、ドとミとソのスイッチをONにしたら、ドとミとソがすぐに鳴って欲しいわけです。いちいち、分周率をチャンネルごとにセットしてからドン☆とトリガして音を出すみたいなのはやってらんないのです。 ないものは仕方がないので、自分で作ります。今回は久々にマイコンを使います。 【仕様】 ・6チャンネル用意する ・各チャンネルには固定した音程を割り振る ・6チャンネルに対応したピンをLレベルにするとその音が鳴る(負論理) ・複数のピンをLレベルにすると和音になる ・波形はデューティー比50%の矩形波 ・エンベロープはかけない ・ビブラートもかけない ・ノイズも付加しない これを2個作って12チャンネルにすれば、1オクターブの12セミトーンがカバーできます。(15個作れば理論上は90音出せるので、88鍵盤をカバーできます。しかし、クロックの都合で高い音の精度が出ないので実際にはムリです。) というわけで、回路図ドン☆ 真ん中のPIC16F84A(U2)が今回の要となるマイコンです。上の抵抗たち(R9~R16)はラダー型の4ビットD/Aコンバータになっています。とりあえず今回は、鍵盤代わりにDIPスイッチ(SW1)を繋いでいます。クロック周波数は手持ちの水晶(X1)の都合で12MHzにしました。C3とC4の容量はイイカゲンです。 これマイコンですから、これだけじゃ動きません。ファームウェアが必要です。今回の開発環境はMPLABを使い、アセンブリ言語でコーディングしました。 【アルゴリズム】 (1) 6チャンネル分のカウンタ(CNT0~CNT6)、カウンタ(OCT0~OCT6)を用意する (2) 出力信号レベルを計算するためのカウンタ(OUT)を用意する (3) 各カウンタCNTxに(とりあえず)値1をセット、OUTはクリア (4) 各カウンタCNTxをデクリメント (5) CNTxが0になったら、CNTxに分周率をセットし、OCTxをインクリメント (6) PORTBをスキャンし、Lレベルのピンを探す (7) Lレベルのピンnを発見したら、OCTnのLSBをチェック (8) LSBがHレベルならOUTをインクリメント (9) PORTBの第0~5ビットをチェックし終えるまで(6)~(8)を繰り返し (10) OUTの値(値域0~6)をPORTAの第0~3ビットに出力(←実は3ビットで足りるが) (11) (4)へ戻る PIC16F84Aはクロック周波数(今回は12MHz)の1/4の周波数が1サイクルになります。よって、1サイクルあたり1/3000000秒です。上のアルゴリズムの(4)~(11)のループ1周で84サイクルあります。また、波形のデューティー比を50%にするため、波形を2分周しています。 よって、周波数fの音を出すためには、分周率Nを N = round(3000000 / (84 * 2 * f)) とすればよいことがわかります。
んで、土曜日に秋葉原の秋月電子通商さんで買った下の機械でPICにファームを書き込みます。そして、基板にPICを挿してテスト。 実測値は設計値にほぼ一致しました。すばらしい! ただし、比較的低い周波数を分周していますので、どうしても(設計値自体が)誤差を含んでしまいます。Dの音が約+8.8セント、Ais (B)の音が約-8.7セントずれています。音痴のわたしにはまったく無縁の話ですが♪ ほんとは、1個めのチップに {C, C#, D, D#, E, F} の6音を、2個めのチップに {F#, G, G#, A, A#, H} の6音を割り当てるつもりなのですが、とりあえずデモ用に {C, D, E, F, G, A} (ドレミファソラ)の6音が出るようにしてチップを焼きました。 ![]() 単音でも、和音でも、全部同時に鳴らしても、一応大丈夫そうです♪ ![]() じゃ、寝るわ☆ (ソースコードの説明は追記にございます。)
というわけで、大きな画像ですみません。
以上で~す♪
![]() |
![]() 何だか 〇×△×#・・・・
じぇんじぇん分かんないでしゅが・・・・????(・・ スゴイ!!(@^^)v
[2011/02/07 09:38]
URL | チビとこ #-[ 編集 ]
No title
チビとこさん、おはようございます♪
すみません、またデムパヲタク記事を書いてしまいました。 ここのところのモノづくりは、ヒカリものと鳴りものばかりでマンネリなので、なんか別の系統のモノも作ってみたいのですが…。 イケメン執事ロボットとか♪ ^^; 最近の休日は、インドア or アキバ往復になってます。文字どおりのヲタ生活ですね…。 ああ、デートに誘われて外を歩いてみたいものです…。
[2011/02/07 09:51]
URL | としえ #MNmjYmiU[ 編集 ]
鳴ってる鳴ってる
ちゃーんと鳴ってますね。すんばらしいっ!
でも・・・何に使う音源?? 「あるもの」が気になります。 そして、、、分周率ってなんだろう??? まぁ、いいや、わかんないけど、デジタルとしえさんはやっぱりすごいや!
[2011/02/07 16:03]
URL | nekomoca #-[ 編集 ]
nekomocaさん、こんにちは♪
「あるもの」とは、いよいよ来週の月曜日に活躍するアレですよぉ♪ 憧れの 分 周率さま に贈るの♪ (*^_^*) (↑どこの国の男やねん!) このように病みすぎですので、きょうは病院に行ってきました。 分周(ぶんしゅう)は、繰り返しの頻度を2回に1回とか、3回に1回に間引くことです♪ 「ペットボトルの回収は隔週です。」と言う代わりに、「毎週の頻度を2分周した頻度でペットボトルは回収される。」と言います。 分周とは逆に、頻度を何倍かにすることは、「逓倍(ていばい)」と言います♪ 「お茶を飲みすぎちゃって、お手洗いの頻度が3逓倍よ♪」のように使います。
[2011/02/07 16:37]
URL | としえ #MNmjYmiU[ 編集 ]
だいじょうぶです!(^_-)-☆
・・・・また ナンパ! されますよっ(^_^)v
[2011/02/07 18:10]
URL | チビとこ #-[ 編集 ]
No title
チビとこさん、こんばんは☆
>・・・・また ナンパ! されますよっ(^_^)v ありがとうございます♪ ん…?? 何げにすごいこと仰ってません?! (*^_^*) あまり受け身でもアレですので、こんどは逆ナ(ry
[2011/02/07 19:01]
URL | としえ #MNmjYmiU[ 編集 ]
No title
としえちゃん、すごい!!!!
文系の私には、さっぱりわからないけどすごい!!! 私、自分で何かを作ろうって思うことが無いからなぁ。。。
[2011/02/10 00:49]
URL | みくりやせりこ #-[ 編集 ]
No title
みくりやせりこちゃん、おはよー!!
もっとちゃんとしたものを作りたんだけどね…。「お嬢様お帰りなさいませ」みたいな執事ロボットとか。あぁ、ダメだ、発想がアキハバラだ…。 今週末はキッチンに引きこもります♪ (また、風邪ひいちゃって…。)
[2011/02/10 05:15]
URL | としえ #MNmjYmiU[ 編集 ]
![]() |
![]() ![]() |
著者紹介 Profile
|
![]()
なまえ: ひろしまとしえ ![]() 三崎港にて ![]() としえ船長です 【好きな場所】 海! 【クリエイティブ系趣味】 お裁縫、電子工作、激辛料理、 デジタルヘタ絵、写真 【アウトドア系趣味】 星見、海外旅行、崖鑑賞 【スポーツ系趣味】 スキューバダイビング(過去形)、 テニス(大過去形)、 アイススケート(超大過去形) 【としえの訪問地】 国内: 全47都道府県 国外: 33ヶ国+7地域くらい 北限: Longyearbyen (北緯78°) 南限: Puerto Iguazú (南緯25°) 東限: 納沙布岬 (東経145°) 西限: Honolulu (西経157°)
|
![]() |
カテゴリー
Categories |
|
![]() |
カレンダー Calendar
|
|||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
リンク
Favorite Sites |
|
![]() |
メールフォーム
Mail Form |
|
![]() |
新着 Latest Articles
|
|
![]() |
ご案内 Notes
|
コメントとトラバは、ひろしまとしえの承認後に表示されます。即時性なくてごめんなさい。不承認のときもごめんなさい。間違って投稿された場合は、続けて修正版または削除指示等のコメを再投稿いただければ、それらしくファジィに対応いたします。
鍵コメは投稿できなくしてありますのでメールフォームをご利用ください。
|
![]() |
検索 Text Search
|
|
![]() |
RSSs
|
|
![]() |
ランキングサイト
Ranking Sites |
|
![]() |
ご訪問者数 Visitors
|
|
![]() |
QR Code
|
![]() 携帯電話からはいま一つご覧いただけません。 |
![]() |