====== 簡易信号発生ユニット(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]]