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ライブラリを使用してサクッと。
よっしゃ動いた動いた。ここまでで週末の実機のお時間が終了。
クロックがまだ内蔵8MHzのままだけど、次回基板に組むときに水晶発振子20MHzのモードにしましょう。
ところで/実は/おりしも、pcm1723さん(d:id:pcm1723)のところでシグマデルタ変調PWMの実験と評価が成されていた(pcm1723さんの日記を「シグマデルタ変調」で検索)ので、これを利用させていただいて、ON/OFFで切り替えられるようにと考えている。
すでに週末の実機試験のあとに、今回のI2Cスレーブに合うようにコードを書いていて(といってもpcm1723さんのをほとんど丸写し)、cygwinのgccでシミュってそれっぽい値が出ているところまでできた。次回基板に組むときにこのファームウェアを焼くことにしましょう。