電音の工場ブログ

趣味の電子工作を中心としたブログです.音モノの工作が多いです.

16bit PWM電圧設定スレーブ

16bit PWM電圧設定スレーブ

今作っているMIDI2CV3山下シンセのデュアルキーボードをマイコン+リレーに置き換えたものなのだが、オリジナルではピッチの可変抵抗器、あるいはオクターブ切替のセレクタがある。前に作ったMIDI2CVではVCO側に期待してコンバータ側にはオクターブ/ピッチチューニングのコントロールをおかなかったのだけれど、今回はMIDI2CV3側に置いてみようと思う。

可変抵抗器をそのまま置くのも芸がないので、マイコンから電圧を設定できるようにと考えた。オクターブ/ピッチチューニングの電圧を加算できるように回路図には手を加え済みだ。

MIDI2CV3単体では49鍵盤を想定してリレーを置いていて4オクターブ。オクターブコントロールとして+3から+4オクターブほどトランスポーズできればいいだろう。分解能はどうだろうか。これまでの経験からして4オクターブに対して8ビットでは明らかに足りない。よくわからないので、16ビットタイマをあてがって、16bitの分解能のPWMとしてみる。

以上をI2Cのスレーブとしてまとめて、まだ見ぬMIDI2CV3マスタコントローラから制御することを目指して、スレーブだけ作ってみた。

シミュレータではTIMER1の動作が実装されていないのでチェックできず、実機試験のほうが話が早いという。

ブレッドボードに組んで、I2CのテストマスタにはArduinoを使い、Arduino-IDEデバッグ環境にしてI2Cスレーブを叩いてチェック。

AVRには ATiny2313を使用、またこれまでの一連の ATtiny2313 I2Cスレーブで使っている usiTWIライブラリを使用してサクッと。

f:id:Chuck:20090823103145j:image f:id:Chuck:20090823103142j:image

よっしゃ動いた動いた。ここまでで週末の実機のお時間が終了。

クロックがまだ内蔵8MHzのままだけど、次回基板に組むときに水晶発振子20MHzのモードにしましょう。

ところで/実は/おりしも、pcm1723さん(d:id:pcm1723)のところでシグマデルタ変調PWMの実験と評価が成されていた(pcm1723さんの日記を「シグマデルタ変調」で検索)ので、これを利用させていただいて、ON/OFFで切り替えられるようにと考えている。

すでに週末の実機試験のあとに、今回のI2Cスレーブに合うようにコードを書いていて(といってもpcm1723さんのをほとんど丸写し)、cygwingccでシミュってそれっぽい値が出ているところまでできた。次回基板に組むときにこのファームウェアを焼くことにしましょう。

問題はアナログフィルタ。PWM周期が 20MHz/16bit ≒ 300Hz ということで、ちょっとね。