音量調整をアナログ VR からデジタルポテンショメータ(以下、デジ POT)に変更しました。
現在流通しているデジ POT には SPI タイプと各ピンを直接制御するタイプがあるようで、マイコンと一緒に使うなら SPI で制御した方が断然簡単なのですが、今回は CW オシレータとして独立させて汎用性を持たせたかったので、各ピンを直接制御するタイプを使うことにしました。
SPI で制御可能な MCP41010
今回使ったロジック制御の X9C103 (10KΩ)
今回は中華で @60 程度で入手可能な 8Pin dip の X9C103(10KΩ)を使いました。
ちなみにデジ POT ですが、今どきの電子工作においては需要が高いと思いますが、国内のパーツショップで在庫を抱えているところは極めて少なくて、かろうじて秋葉原のマルツで AD5220 を探し当てることはできましたが、@450 と少々お高い価格設定になっています。
で、X9C103 ですが、データシートに掲載されている真理値表やタイムチャートの情報によれば、
となっているので・・・
(このテスト回路では POT 可変で LED の輝度を変化させています。)
最初、スイッチと抵抗だけの簡単な回路でテストしてみましたが、この方法で音量を下げるには UP と DWON の2つのボタンを操作しながら、押しては離す動作を繰り返す必要があります。ボタンを押し続けての連続可変もできないのでユーザインタフェースが悪すぎで。
まぁ、回路的には簡単なんですが、これだと操作性の面でイマイチなので今回は却下してロジックを追加して対応することにしました。
で、ネットで適当な回路を探してたら、シュミット NAND ゲート IC を使う方法を見つけたので、74HC132(シュミット NAND × 4 入り)をひとつ使って上の真理値表を満足するように実装してみました。
(回路図は KiCad のパーツ 74LS132 になってますが、実際は 74HC132 を使ってます。)
U1C のシュミット NAND で 50ms(20Hz)のパルスを発振させて X9C103 の INC に入力します。
これは X9C103 のデータシートによれば、内部の抵抗アレイが 0 から 99 の 100 通りの抵抗で構成されているので、0Ω から 10KΩ まで(最小から最大)を5秒間で可変させることを考えると、抵抗アレイの抵抗ひとつを 50ms の速度で進めていく必要があります。(POT全体を5秒・・・というのは、私の全くの主観です。)
5秒(5000ms)÷ 100 通り = 50ms(20Hz)
まぁ、簡単に言えば U1C で 20Hz のクロックを作って、UP と DOWN の各ボタンを押している間だけ INT にパルスを与えてやるということです。
で、このシュミット NAND の発振周波数 f は、R1 と C1 の値で決定し、
f = 1 / T = 1 / C1R1
で求められるので、ここではf が 20Hz、R1を 100KΩ と決め打つと、
C1 = 1 / f R1 = 1 / 20 * 100 * 10^3 = 0.5 * 10^-6 = 0.5uF
と、C1 が求められるので、U1C のシュミット NAND に 100KΩ の抵抗と 0.5uF のケミコンを付けて 20Hz で発振させることにしました。
ちなみに、抵抗 R2 は保護抵抗です。
データシートには、アレイは 99個 の抵抗で構成されていると記述されています。
最後に、これらの回路が期待通りに動作してくれるか LTSpice でシュミレーションです。
UP ボタン押下時、UD が アクティブハイに、そして INC 端も期待通り 20Hz になっています。
DOWN ボタンでは、今度は UD がアクティブローになっています。
全ての動作は期待どおりです。
で、この回路をブレッドボードに実装して確かめてみましたが・・・いい感じに可変してくれました。
0.5uF のケミコンなんて持ってないので、1uF 2つを直列にしました。
ゆっくり可変するなら 1uF のままでも良いのですが、本実装では 1uF と 50KΩ を使うことにします。
一応、最後に簡易オシロでシュミット NAND の発振周波数を確認しておきました。
この後の作業は、
今 Fusion PCB に発注している「RasPi 電源コントローラ基板」が届いてから考えることにします。