fc2ブログ
としえのへたえ - TOSHiÉtti GRAFFitti
6和音出るワンチップ音源作った
こんばんは、デジタルとしえです。

あるものを作りたいなーーーーという構想がありまして、そのためには音源が必要なのです。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))

とすればよいことがわかります。

音階平均律[Hz]分周率設計値[Hz]実測値[Hz]
C130.8137130.3130.3
Cis=Des138.6129138.4138.4
D146.8121147.6147.6
Dis=Es155.6115155.3155.3
E164.8108165.3165.3
F174.6102175.1175.0
Fis=Ges185.097184.1184.1
G196.091196.2196.2
Gis=As207.786207.6207.6
A220.081220.5220.4
Ais=B233.177231.9231.9
H246.972248.0248.0

んで、土曜日に秋葉原の秋月電子通商さんで買った下の機械でPICにファームを書き込みます。そして、基板に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音が出るようにしてチップを焼きました。

[MP3] 音を出してみた♪

単音でも、和音でも、全部同時に鳴らしても、一応大丈夫そうです♪

[ASM] ファームウェアのソースコード

じゃ、寝るわ☆

(ソースコードの説明は追記にございます。)
というわけで、大きな画像ですみません。

ソースコードの説明

以上で~す♪
電気・電子」の前後記事

テーマ:オーディオ | ジャンル:趣味・実用

[2011/02/07 03:01] | 電気・電子 | Trackbacks(0) | Comments(8)
<<としえ実はピチピチ | ホーム | 恵方巻き - Rolled Sushi "Eho-Maki">>
コメント (COMMENTS)
何だか 〇×△×#・・・・
じぇんじぇん分かんないでしゅが・・・・????(・・
スゴイ!!(@^^)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[ 編集 ]













トラックバック
トラックバック URL
http://toshietchi.blog70.fc2.com/tb.php/176-41c537d0
この記事にトラックバックする(FC2ブログユーザー)

カレ俊 カノ俊 ブログ としえのへたえ - TOSHiÉtti GRAFFitti

としえのへたえ
著者紹介 Profile

ひろしまとしえ

なまえ: ひろしまとしえ
ペンネーム: としえってぃ
Handle: Toshiétti
主宰サークル: 車運舎
職業: 主婦・求職者・エンジニア
出身: 静岡県御殿場市
住所: 東京都
所属: AKB1048
   (エーケービー トーシーエイト)
年齢: 自称 21歳
FC2のトリップ: #MNmjYmiU

Twitter: @Toshietti
pixiv: 85125903
YouTube: @toshietti

【廣島家のウェブサイト】
 廣島研究所
 http://www.hrsm.net/
 製作記事へのショートカット集です

T and T
三崎港にて

としえ船長
としえ船長です

【好きな場所】
 海!
【クリエイティブ系趣味】
 お裁縫、電子工作、激辛料理、
 デジタルヘタ絵、写真
【アウトドア系趣味】
 星見、海外旅行、崖鑑賞
【スポーツ系趣味】
 スキューバダイビング(過去形)、
 テニス(大過去形)、
 アイススケート(超大過去形)

【としえの訪問地】
国内: 全47都道府県
国外: 33ヶ国+7地域くらい
北限: Longyearbyen (北緯78°)
南限: Puerto Iguazú (南緯25°)
東限: 納沙布岬 (東経145°)
西限: Honolulu (西経157°)

カテゴリー
Categories

カレンダー Calendar

12 | 2023/01 | 02
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 - - - -

コメント Comments

リンク
Favorite Sites

メールフォーム
Mail Form

お名前 your name:
メール e-mail:
件名 subject:
本文 message:

新着 Latest Articles

月別アーカイブ
Monthly Archives

ご案内 Notes

コメントとトラバは、ひろしまとしえの承認後に表示されます。即時性なくてごめんなさい。不承認のときもごめんなさい。間違って投稿された場合は、続けて修正版または削除指示等のコメを再投稿いただければ、それらしくファジィに対応いたします。

鍵コメは投稿できなくしてありますのでメールフォームをご利用ください。

検索 Text Search

RSSs

ランキングサイト
Ranking Sites

ご訪問者数 Visitors

QR Code

QR

携帯電話からはいま一つご覧いただけません。