PIC-12F683 デジタルアンプ

2015/04/26
無線機に取り付けるマイクの振幅制限(リミッティング)装置を作ろうと思ったが、アナログで制作すると
とんでもなく大変である。
そこで、デジタルなら簡単であろうという発想からとりあえずアンプということになった。
これは、その課程の産物であり ソフト開発用試作器である。
オーディオアンプほどではないが、無線に使う程度なら問題ない音質になった。
(と思ってる。)
SW部を大型にすればかなりのアンプになるが、オーディオ用でないため、やめた方が良いだろう。
小型の作動アンプをつけないと出力はフィルターのおかげでかなり小さい。


戻る

ソフトはかなり悩ましかった、ど素人が初めて作るPWM (パルスワイズモジュレーション)
訳もわからず、どなたかの切れ端をコピペして大筋作り いろんな数字をいじくり回して
何とかしたものです。

/*
デジタルアンプ12F683 2015/04/26にほぼ動くようになった。
PWMとA-D変換を行った。

*/
#include <htc.h>
#define _XTAL_FREQ 20000000


//PICの動作クロック __delay関数に必要

__CONFIG( FCMDIS // フェールセーフクロックモニタ動作禁止
& IESODIS // 内外クロックのスイッチオーバーモード動作禁止
& BORDIS // ブラウンアウト検出禁止
& UNPROTECT // データメモリ(EEPROM)のプロテクト禁止
& UNPROTECT // プログラムメモリのプロテクト禁止
& MCLREN // GP3/_MCLR端子は_MCLRで利用(自動的にプルアップされる)
& PWRTEN // パワーアップタイマ動作許可
& WDTDIS // ウォッチドッグタイマ動作禁止
& HS//INTIO // 内部クロック利用してRA4、RA5端子は入出力で利用
);
//__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & BOREN_ON & MCLRE_OFF & IESO_OFF& FCMEN_OFF & CP_OFF) ;
//コンフィグレーション設定//(内蔵クロックを使用(CLKOUTは汎用入出力) &
//ウォッチドッグタイマ無効化 & パワーアップタイマ有効
// & ブラインアウト有効 & MCLRは汎用入力 & 2速度スタートアップ切替負荷
// & クロックモニタ検出不可 & プロテクト無効)//旧版(MPLAB IDE v8.66以前)はコンフィグレーション
//設定やレジスタ名が異なるため注意
// アナログ値の入力処理
unsigned int adconv()
{
unsigned int temp;

GODONE = 1 ; // PICにアナログ値読取り開始を指示
//while(GODONE) ; // 本来19usだが、時間が惜しいので10にした。PICが読取り完了するまで待つ
__delay_us(10) ;
temp = ADRESH ; // PICは読取った値をADRESHとADRESLのレジスターにセットする
temp = ( temp << 8 ) | ADRESL ; // 10ビットの分解能力です 最大1023

return temp ;
}



void main(void){
ADCON0 = 0b10000001 ; // アナログ変換情報設定
__delay_us(20) ; // アナログ変換情報が設定されるまでとりあえず待つ

GPIO=0;

ANSEL = 0b1001; //GP0(AN0)以外デジタル設定
CMCON0 = 0b111;
//コンパレータオフ GP0 GP1 GP2はデジタル入出力で使用
TRISIO = 0b000001;
//GP 5,4,3,2,1,0 (1=入力; 0=出力) //命令サイクル = (1sec/8MHz)*4clock*16(プリスケーラ)
//=8usec
PR2 =200; //8usec*(124+1) = 1msec(周期) = 1kHz 周波数の設定
TMR2 = 0; //TMR2プリスケール値
CCP1CON= 0b101100; //Duty微調整|PWMモード

T2CON = 0b100;// 0b110; //TMR2ON | プリスケーラ 1:1

unsigned int num ;

while(1)
{
num=adconv()/4; //ここが最も肝心なせっていである。


//if (200<num){num=200;} //リミッターのつもり。


CCPR1L =num;



}
}

MPLAB  8.3 HI−TECH C 9.8

ずいぶんと苦労したが、小生と同じことをやり出した方 の時間の短縮に成ればとおもい公開


回路の細かな値は適当に選んでください。 何せ何百回と書き込みの繰り返し & TESTした。
体力のなせる技だ。
老人パワーの たまものです。 

今時は専用のマイコンがあるようだが、敷居はかなり高いので、長生きしたらやろうと
思ってるが..........? 目が、ショボショボ でありんす。

PNP,NPN
差動AMP

2SC1815
etc2SAA1015

オペAMPはなんでもよろし。 倍率30倍以上確保

100uH〜100 mH

0.1〜100uf

この辺もお好み

TRでやろうとしたが増幅率が悪く結局OPAMPになった。
ありがたいモノです。
注意
コンデンサーマイクはこのままでは動きません。
クイズです。
ヒント − 電源と負荷抵抗が必要?

20MHz

SPを成らすつもり無ければ
このTrは不要。