正弦波発振器(クロック可変方式)
概要
PICとD/A変換を利用して正弦波発振器を作った場合には次のような問題があります。
- 正弦波の精度を良くすると発振周波数をあまり高く出来ない。
- 連続的(1Hz単位)に変化させることが難しい。
そこでこの問題をある程度、緩和させたく取り組んでみました。
動作原理
今回の発振器の仕様を次のように設定しました。
- D/A変換の精度は、8ビットとする。
- 1度単位(つまり360データ)で出力する。
- 連続的に周波数の可変を可能とする。
- 発振周波数の範囲は、10Hz~10kHzとする。
この仕様を満足させるために、次の2点に注目しました。
- PICの内部処理では、360のデータを只管(ひたすら)出力するだけにする。
- PICのクロックを連続的に可変できるようにする。(秋月電子の1kHz~30MHzオシレータ基板を使用)
<1kHz~30MHzオシレータ基板の仕様>※2008年2月時点で600円で販売しています。
- LTC1799モジュールを基板上に実装
- 外付け抵抗1個で周波数を設定可能
- 周波数範囲(1kHz~30MHz)
- 分周比の設定が可能(1/1、1/10、1/100)
回路図
ソースコード
- sin.c
void main() { CMCON = 0b00000111; ANSEL = 0b00000000; TRISA = 0b11111111; TRISB = 0b00000000; // while (1) { PORTB = 127; PORTB = 129; PORTB = 131; PORTB = 134; PORTB = 136; PORTB = 138; PORTB = 140; PORTB = 142; PORTB = 145; PORTB = 147; PORTB = 149; PORTB = 151; PORTB = 153; PORTB = 156; PORTB = 158; PORTB = 160; PORTB = 162; PORTB = 164; PORTB = 166; PORTB = 168; PORTB = 170; PORTB = 173; PORTB = 175; PORTB = 177; PORTB = 179; PORTB = 181; PORTB = 183; PORTB = 185; PORTB = 187; PORTB = 189; PORTB = 191; PORTB = 192; PORTB = 194; PORTB = 196; PORTB = 198; PORTB = 200; PORTB = 202; PORTB = 203; PORTB = 205; PORTB = 207; PORTB = 209; PORTB = 210; PORTB = 212; PORTB = 214; PORTB = 215; PORTB = 217; PORTB = 218; PORTB = 220; PORTB = 221; PORTB = 223; PORTB = 224; PORTB = 226; PORTB = 227; PORTB = 228; PORTB = 230; PORTB = 231; PORTB = 232; PORTB = 234; PORTB = 235; PORTB = 236; PORTB = 237; PORTB = 238; PORTB = 239; PORTB = 240; PORTB = 241; PORTB = 242; PORTB = 243; PORTB = 244; PORTB = 245; PORTB = 246; PORTB = 246; PORTB = 247; PORTB = 248; PORTB = 248; PORTB = 249; PORTB = 250; PORTB = 250; PORTB = 251; PORTB = 251; PORTB = 252; PORTB = 252; PORTB = 252; PORTB = 253; PORTB = 253; PORTB = 253; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 254; PORTB = 253; PORTB = 253; PORTB = 253; PORTB = 252; PORTB = 252; PORTB = 252; PORTB = 251; PORTB = 251; PORTB = 250; PORTB = 250; PORTB = 249; PORTB = 248; PORTB = 248; PORTB = 247; PORTB = 246; PORTB = 246; PORTB = 245; PORTB = 244; PORTB = 243; PORTB = 242; PORTB = 241; PORTB = 240; PORTB = 239; PORTB = 238; PORTB = 237; PORTB = 236; PORTB = 235; PORTB = 234; PORTB = 232; PORTB = 231; PORTB = 230; PORTB = 228; PORTB = 227; PORTB = 226; PORTB = 224; PORTB = 223; PORTB = 221; PORTB = 220; PORTB = 218; PORTB = 217; PORTB = 215; PORTB = 214; PORTB = 212; PORTB = 210; PORTB = 209; PORTB = 207; PORTB = 205; PORTB = 203; PORTB = 202; PORTB = 200; PORTB = 198; PORTB = 196; PORTB = 194; PORTB = 192; PORTB = 191; PORTB = 189; PORTB = 187; PORTB = 185; PORTB = 183; PORTB = 181; PORTB = 179; PORTB = 177; PORTB = 175; PORTB = 173; PORTB = 170; PORTB = 168; PORTB = 166; PORTB = 164; PORTB = 162; PORTB = 160; PORTB = 158; PORTB = 156; PORTB = 153; PORTB = 151; PORTB = 149; PORTB = 147; PORTB = 145; PORTB = 142; PORTB = 140; PORTB = 138; PORTB = 136; PORTB = 134; PORTB = 131; PORTB = 129; PORTB = 127; PORTB = 125; PORTB = 123; PORTB = 120; PORTB = 118; PORTB = 116; PORTB = 114; PORTB = 112; PORTB = 109; PORTB = 107; PORTB = 105; PORTB = 103; PORTB = 101; PORTB = 98; PORTB = 96; PORTB = 94; PORTB = 92; PORTB = 90; PORTB = 88; PORTB = 86; PORTB = 84; PORTB = 81; PORTB = 79; PORTB = 77; PORTB = 75; PORTB = 73; PORTB = 71; PORTB = 69; PORTB = 67; PORTB = 65; PORTB = 63; PORTB = 62; PORTB = 60; PORTB = 58; PORTB = 56; PORTB = 54; PORTB = 52; PORTB = 51; PORTB = 49; PORTB = 47; PORTB = 45; PORTB = 44; PORTB = 42; PORTB = 40; PORTB = 39; PORTB = 37; PORTB = 36; PORTB = 34; PORTB = 33; PORTB = 31; PORTB = 30; PORTB = 28; PORTB = 27; PORTB = 26; PORTB = 24; PORTB = 23; PORTB = 22; PORTB = 20; PORTB = 19; PORTB = 18; PORTB = 17; PORTB = 16; PORTB = 15; PORTB = 14; PORTB = 13; PORTB = 12; PORTB = 11; PORTB = 10; PORTB = 9; PORTB = 8; PORTB = 8; PORTB = 7; PORTB = 6; PORTB = 6; PORTB = 5; PORTB = 4; PORTB = 4; PORTB = 3; PORTB = 3; PORTB = 2; PORTB = 2; PORTB = 2; PORTB = 1; PORTB = 1; PORTB = 1; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 0; PORTB = 1; PORTB = 1; PORTB = 1; PORTB = 2; PORTB = 2; PORTB = 2; PORTB = 3; PORTB = 3; PORTB = 4; PORTB = 4; PORTB = 5; PORTB = 6; PORTB = 6; PORTB = 7; PORTB = 8; PORTB = 8; PORTB = 9; PORTB = 10; PORTB = 11; PORTB = 12; PORTB = 13; PORTB = 14; PORTB = 15; PORTB = 16; PORTB = 17; PORTB = 18; PORTB = 19; PORTB = 20; PORTB = 22; PORTB = 23; PORTB = 24; PORTB = 26; PORTB = 27; PORTB = 28; PORTB = 30; PORTB = 31; PORTB = 33; PORTB = 34; PORTB = 36; PORTB = 37; PORTB = 39; PORTB = 40; PORTB = 42; PORTB = 44; PORTB = 45; PORTB = 47; PORTB = 49; PORTB = 51; PORTB = 52; PORTB = 54; PORTB = 56; PORTB = 58; PORTB = 60; PORTB = 62; PORTB = 63; PORTB = 65; PORTB = 67; PORTB = 69; PORTB = 71; PORTB = 73; PORTB = 75; PORTB = 77; PORTB = 79; PORTB = 81; PORTB = 84; PORTB = 86; PORTB = 88; PORTB = 90; PORTB = 92; PORTB = 94; PORTB = 96; PORTB = 98; PORTB = 101; PORTB = 103; PORTB = 105; PORTB = 107; PORTB = 109; PORTB = 112; PORTB = 114; PORTB = 116; PORTB = 118; PORTB = 120; PORTB = 123; PORTB = 125; } } //**********************************************************************






