HOME       2015/4/24


TS780用レピーター トーン88.5Hz発信機の作成

TS780を修理したのですが、TONEスイッチはあるのですが、ユニットはオプションで内蔵していません。

レピーターアクセスのため88.5Hzのトーン発信機を作成しました。

PIC 10F322 ¥45のNCOを使ってみました。

電源は5Vでないので定電圧ダイオートを使用して減圧

クロックは内蔵オシレーター

http://www.geocities.jp/zattouka/GarageHouse/micon/MPLAB/12F1501/NCO/NCO.htm

を参考にしました。

88.5Hzは1/88.5=11.23ms   50%ですので11.23/0.5=5.65ms

クロック31Khzの場合は1/31000=32.26ms

5.65/32.26=175   1048575/(175-1)=6026

クロック2Mhzの場合 1/2M=0.5ns

5.65/0.5=11300  1048575/(11300-1)=92

クロックはどちらにしようか迷いましたが31Khzで作ってみました。

ICから出力される信号は方形波ですのでCRフルターで少し丸くしました。

少々低い88Hz位が出力されています。レピーターアクセスしてみると反応しますのでOKとします。

クロックは工場出荷時に+-1%に校正されています。

#include <xc.h>
#pragma config FOSC = INTOSC // Oscillator Selection bits (INTOSC oscillator: CLKIN function disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
#pragma config LPBOR = OFF // Brown-out Reset Selection bits (BOR disabled)
#pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), high trip point selected.)
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)

// メインの処理
void main()
{
OSCCON = 0b00000000 ; // 内部クロックは31KHzとする
ANSELA = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる)
TRISA = 0b00000000 ; // ピンは全て出力に割当てる(RA3は入力専用)
PORTA = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)
// NCOの設定
NCO1ACCL = 0 ; // アキュムレータレジスタ(下位バイト)初期化
NCO1ACCH = 0 ; // アキュムレータレジスタ(上位バイト)初期化
NCO1ACCU = 0 ; // アキュムレータレジスタ(最上位バイト:bit3-0)初期化
NCO1INCH = 6026 >> 8 ; // インクリメントレジスタ(上位バイト)初期化(10KHz出力)
NCO1INCL = 6026 & 0x00ff;// インクリメントレジスタ(下位バイト)初期化
NCO1CLK = 0b00000001 ; // CLCのクロックはFoscとする
NCO1CON = 0b11000000 ; // CLCは有効でピンに出力する、固定デューティサイクルモード
while(1) {
}
}