====== 簡易信号発生ユニット(PIC16F628) ====== ===== 概要 ===== PIC16F628は、ボルテージリファレンスモジュールを内蔵しており、16段階の電圧を出力することが出来ます。 これを利用して簡単な信号発生器を作成してみました。 スイッチ切り替えでサイン波とノコギリ波が選択出来ます。 {{:imgpaste:202004:admin-20200430-172139.png?500}} ===== 動作原理 ===== とても簡単です。 * サイン波 * 角度20°単位でのサインデータ18個を順次ボルテージリファレンスモジュールに出力します。 * ノコギリ波 * 0~15までのデータを順次ボルテージリファレンスモジュールに出力します。 尚、サイン波とノコギリ波の切り替えはスイッチで行います。 また、PICより出力された電圧を抵抗とコンデンサによるローパスフィルタを通して出力します。 ===== 回路図 ===== {{:imgpaste:202004:admin-20200430-172345.png}} ===== ソースコード ===== //********************************************************************** void main() { unsigned char tbl[] = { 0b11100000 | 7, 0b11100000 | 9, 0b11100000 | 11, 0b11100000 | 13, 0b11100000 | 14, 0b11100000 | 14, 0b11100000 | 13, 0b11100000 | 11, 0b11100000 | 9, 0b11100000 | 7, 0b11100000 | 5, 0b11100000 | 3, 0b11100000 | 1, 0b11100000 | 0, 0b11100000 | 0, 0b11100000 | 1, 0b11100000 | 3, 0b11100000 | 5, 0b11100000, 0b11100001, 0b11100010, 0b11100011, 0b11100100, 0b11100101, 0b11100110, 0b11100111, 0b11101000, 0b11101001, 0b11101010, 0b11101011, 0b11101100, 0b11101101, 0b11101110, 0b11101111, }; unsigned char i; CMCON = 0b00000111; TRISA = 0b11111111; while (1) { if (PORTA.F0 == 1) { for (i = 0; i < 18; i++) // サイン波 VRCON = tbl[i]; } else { for (i = 18; i < 34; i++) // のこぎり波 VRCON = tbl[i]; } } } //********************************************************************** ===== 動作確認 ===== いつものようにブレッドボードで確認しました。ブレッドボードは部品点数が少ないときは重宝しますよ。 {{:imgpaste:202004:admin-20200430-172451.png?500}} 先ずは、サイン波です。 上が、ローパスフィルタ前(B)の波形です。 下が、ローパスフィルタ後(A)の波形です。 {{:imgpaste:202004:admin-20200430-172505.png?500}} 次は、ノコギリ波です。 上が、ローパスフィルタ前(B)の波形です。 下が、ローパスフィルタ後(A)の波形です。こんな波形になるとは... {{:imgpaste:202004:admin-20200430-172521.png?500}} この時の周波数は約18Khzでした。 {{:imgpaste:202004:admin-20200430-172536.png?500}} 結果的には、16段階(4ビットD/A)では、実使用を考えると、少し厳しいのかもしれませんね。 このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]] This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]