akira.kei が 2026年02月22日19時01分30秒 に編集
コメント無し
タイトルの変更
PIC16F1705を使う(その1):正弦波などを発生
PIC16F1705を使う(その1):正弦波などを発生してシンセサイザー
タグの変更
PIC16F1769
本文の変更
: [次の記事はまだ書いてない>]() ## 8bitDACだと? [別の記事](https://elchika.com/article/f1ee4828-abab-4617-8071-ffd5e4f429bf/)でPWMのデューティを8bitで増減させて正弦波にしていた。ところがPIC16F1705なら8bitDACを(PIC16F1769なら10bitDACを)持つので、さらに滑らかな正弦波(または任意波形)を出せる。 先のことを考えてちょっと心が折れたので、ここではMCC Classicを使って楽をさせてもらった。FOSCはPLLを使って32MHz、TMR2モジュールは1/4プリスケーラで32μs割り込み(31.25kHz)、DACはDACOUT2にモニタ用出力を、OPA1でDACを受けてユニティゲイン設定としてRC2に出力した。この他にオシロスコープの同期用にトリガー信号を出力するようにしたが、ジッターがあることが明確になっただけだった。 RC2の先には2段のRCフィルタを入れているが、カットオフが8〜10kHzくらいに設定されている。 ## 正弦波を出す 下図は波形テーブルに正弦波を入れた時の様子だが、上(C2、水色)が正弦波出力、下(C1、黄色)がトリガーである。ほぼ440Hzで出力されており、そうなるようにOSCTUNEを調整した。時間が経つとそれなりに変動する。 
8bitDACで変調信号はなく、一定のサンプリング周波数(31.25kHz)なので固定のフィルタで落としやすいことから、俺なりの高品質の正弦波が得られている。 MIDIノート番号の0から127まで出せるようになっており、最大の127だとDDSの仕組み上かなり歪んで小さい出力になってしまうが、周波数は正しく制御される。
8bitDACで変調信号はなく、一定のサンプリング周波数(31.25kHz)なので固定のフィルタで落としやすいことから、それなりの高品質の正弦波が得られている。 プログラムの内容的にはMIDIノート番号の0から127まで出せるようになっており、最大の127だとDDSの仕組み上かなり歪んで小さい出力になってしまうが、周波数は正しく制御される。
 ## 任意波形出力 矩形波、鋸波、逆鋸波および三角波など、プログラムチャンジを受けると変更できるようにしてある。     ## MIDI対応 USARTも31250bpsのMIDIデータを受けられるように初期化されており、MIDI信号のパーサーとゲート変換をやればシンセサイザーのDCOとして機能できるかもしれない。夢が広がりんぐw