8ピンPICで極小疑似三角波MIDI音源を作ってみた

PICのF1シリーズのデータシートを眺めていたらどうやらDACが内蔵されているらしい。分解能は5ビットなのでたいしたことは無いのだが、ファミコン音源の疑似三角波が4ビットの分解能で波形を作っているのを思い出して、いつかこいつで音源を作ってやろうと思っていたので実験してみた。
簡単に言えば、普通に矩形波ピコピコサウンドを出す代わりに、16倍の速さでDACをコントロールして疑似三角波をつくろうということ。
すでにSSG690でMIDI inのMIDI解析ルーチンはPICに移植しており、実験用の教材で矩形波ピコピコも作っていたので、早速合体させてみた。
まずは回路図はこれ。

とりあえずMIDI inとDAC出力だけあれば作れるので、PIC12F1822を使用する。シリアルの端子はRA5に変更できる(便利!)ので変更する。MIDI outは後々何かに使えるかもしれないということでオプション。今は出力させるものがないが、ソフトウエアでは送信割り込みやその他必要なルーチンは組み込んである。DAC出力はかなり細いのでデータシートの推奨どおりオペアンプをいれておいた。実際、そのままアンプにつなぐと折角の三角波が歪んでしまった。データシートでは通常の使用を想定してかDAC出力にコンデンサが入っているが、LPFなので音色にかなり影響する。折角のカクカクの疑似三角波が丸くなってしまうので、いろいろ変えてみることをおすすめする。本物のファミコンでは100kΩと0.1μFのLPFが入っていたので適当に0.1μFが入っている。ソフトウエアは、いつものようにHi-Tech PIC C16で作成した。教材で使っている矩形波ピコピコサウンドプログラムから周波数テーブルをそのまま取ってきたので、まだ音痴です。この辺の調整が必要です。周波数を計算し直したので音痴がかなり改善しました(3/6)。タイマ0を使用しているけど、場合によっては16ビットのタイマ1を使った方がいいかも。

DACを使って三角波をつくるのにファミコンは分解能が4ビットらしく、上りと下りを考えると

0 1 2 3 … 9 A B C D E F E D C … 3 2 1 0 1 2 …

の順に出力すると、なん1周期30個になって気持ち悪い。キリが悪いのでどうなっているのか調べてみると、ファミコンでは

0 1 2 3 … 9 A B C D E F F E D C … 3 2 1 0 0 1 2 …

のように出力しているらしいことを見つけたので、これを踏襲。1周期32個なのですっきりした。

ということで、いつものごとくバイナリが欲しい人はどうぞ!

tri1822.hex(拡張子をdocからhexに変更して保存してください)

音痴改良版tri1822-2.hex(拡張子をdocからhexに変更して保存してください(2012/3/6更新))

一応、プリスケーラを駆使してC1~A7まで音が出ます。ノートON/OFFのみ対応です。

でも、すっごく音痴なので使い物にならないと思われwすこしは使い物になると思われw

  1. 周波数を計算し直して、音痴を改善しました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。