Hatena::Groupecrafts

Chuckの電子工作

趣味の電子工作を中心に書いています。音関係工作はg:emusic:id:Chuckどうぞ。


検索エンジンより飛んでこられたかたで、お探しのキーワードが見つからないかたは、↑の検索をご利用ください。

2009-09-15

I2Cスレーブをいくつか増やしました

| 08:11

ATtiny2313によるスイッチ/ロータリエンコーダ読み取りスレーブ
I2CUI - マイコンを使った工作 - アットウィキ
ATtiny2313による16bit PWMスレーブ
I2CPWM16 - マイコンを使った工作 - アットウィキ
ATtiny2313による7セグメントのLED表示器スレーブ
I2C7SEG - マイコンを使った工作 - アットウィキ
ATtiny2313によるLCD表示器スレーブ
I2CLCD - マイコンを使った工作 - アットウィキ
ATtiny85による正弦波生成スレーブ
1-chip DDS(I2C) - マイコンを使った工作 - アットウィキ

16bit PWM電圧設定スレーブ

作っている電子楽器周辺機器の部品として必要に迫られて、マイコンから電圧を設定できるようにしたくなりました。アナログシンセのオクターブ/ピッチチューニングの電圧を作りだそうとしています。

これまでの経験から8ビットでは明らかに足りない、しかしよくわからないので、16ビットタイマをあてがって、16bitの分解能のPWMとしてみました。

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

以上をATiny2313にI2Cのスレーブとしてまとめました。これまでの一連の ATtiny2313 I2Cスレーブで使っている usiTWIライブラリを使用しています。

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

実際に機器に組み込む時にはアナログフィルタが問題となります。PWM周期が 20MHz/16bit ≒ 300Hz ということでカットオフ周波数をかなり低くしたLPFが必要です。


UIスレーブ

lumさんとチャットしていてアイディアが浮かんだUIスレーブを思い立ったが吉日で形にしました。

マスタからの問い合わせに応じてスイッチとロータリエンコーダの状態をレポートするI2Cスレーブです。余ったポートでLEDを光らせてキー状態として表示できるようにしたり、ブザーをつけたり。ブザーなんかはワンコマンドでクリック音を出せるようにしたり。

これもATiny2313で、usiTWIライブラリ使用です。

f:id:Chuck:20090914043552j:image

マスタをArduinoにして動作チェック。一応は動作したものの反応が鈍いです。とくにロータリエンコーダ。無限ループで回転を検知したらクリック音を鳴らしてシリアルでArduino IDEにレポートするスケッチを書きました。

回転の検知は、ロータリエンコーダの状態取得のコマンドを送ってI2C受信待ちをして受信データをバッファから取り出す、という動作ですがこれまでのスケッチを流用していたもので受信待ちが100msecのディレイにしていたということに今さっき気がつきました。これでは反応が悪いはずです。後日これを Wire.available() のポーリングに変更しなくてはなりません。

ChuckChuck2009/09/17 04:20スイッチ/ロータリエンコーダ読み取りスレーブ がうまいこと動かない状況です。

ChuckChuck2009/09/21 17:01それなりに対策してFS03版としてwikiにアップロード。

トラックバック - http://ecrafts.g.hatena.ne.jp/Chuck/20090915