10F222 + 3bit R-2R DACによる正弦波サイドトーン発振回路
45円のPIC10F222-I/Pを使った正弦波サイドトーン発振回路を検討してみました.出力に使えるGPIOは3本しかありませんので,3bitです.
![]() |
回路図 |
回路図です.GP2〜GP0の3bitで正弦波データを出力してR-2R DACを通し,遮断周波数800Hzの2次LPFで正弦波を復元するものです.LPF先頭の抵抗は,設計上の値は36kΩですが,DACの出力インピーダンスが10kΩありますので,これを差し引いて27kΩとしました.ブレッドボード試作では,出力段の1μFと10kΩ半固定抵抗を省略しています.
ソースコード(ライセンス:CC BY-NC-SA 4.0 International)は以下のとおりです:
* File: sidetone222.c
* Author: JH5ESM, Cosy MUTO
* License: CC BY-NC-SA 4.0 International
* Copyright (c) 2025, Cosy MUTO (aka JH5ESM)
*
*/
// PIC10F222 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config IOSCFS = 4MHZ // Internal Oscillator Frequency Select bit (4 MHz)
#pragma config MCPU = ON // Master Clear Pull-up Enable bit (Pull-up enabled)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config CP = OFF // Code protection bit (Code protection off)
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 4000000
const unsigned char wave[] = {4, 6, 7, 6, 4, 2, 1, 2};
void main(void) {
int i = 0;
OSCCAL = 0b00000000; // GP2 as GPIO
OPTION = 0b10000000; // Weak pull-up enabled on GP3, GP1 & GP0 / GP2 as GPIO
ADCON0 = 0b00001100; // AD off, GP0 & GP1 as GPIO
TRIS = 0b00001000; // Input setting for GP3
GPIO = 0b00001100; // Initial output
while(1)
{
if(GP3){
GPIO = 12; // 0b00001100 キーアップ時はVDD/2を出力
i = 0; // キーダウン時はwave[0]からスタート
}else{
GPIO = wave[i];
i = (i + 1) % 8;
__delay_us(100);
}
}
}
hexファイルはこちらからダウンロード可能です.
トーン周波数700Hzの場合は,__delay_us()の引数を130程度にして下さい(要調整).
![]() |
DAC出力波形 |
DAC出力波形です(LPFとの接続を外して測定).3bit 8ポイントですので,正弦波というより三角波の方が近いかも.事実,DAC出力に0.018μFを付けて平滑化してもピーククリップした三角波しか得られませんでした.
![]() |
LPF出力波形 |
LPF出力波形です.見てわかるような歪のない正弦波が得られました.DAC出力端子の波形は元の階段状波形から歪んでいますが,実際はDAC出力波形ではなくLPF先頭の抵抗設計値(36kΩ)を10kΩ:27kΩで分割した点の電圧を見ているためです.余っているOPアンプでバッファを作って間に挟めば(この場合27kΩは設計値どおりの36kオームに変更),きれいな階段状のままになります.バッファを間に置くかどうかは趣味の問題ですね.
![]() |
LPF出力のFFT結果 |
LPF出力のFFT結果です.高調波,スプリアスとも45dB程度以上抑圧できていて,ちょっとビックリしました.
=
3種類のサイドトーン発振回路を検討しましたが,実機ではどれを使いましょうかね?この記事をご覧の皆さんはどうしますか?
=
関連記事
AR de JH5ESM VA