無料ブログはココログ

広告

« コンタクト割る | トップページ | 地震? »

2009年2月14日 (土)

電子ボリューム一応動作

PICマイコン「16F877」を使用した電子ボリュームの動作テストが終わり、入力1系統なら問題ないレベルになりました。

プログラムにはCCS社のCコンパイルを使用してSPI通信にて制御しています。コンパイラの方でSPI通信を簡単にしていますので、プログラムは可也短くなります。CCSのコンパイラーはお試し版がありますので、それでコンパイル出来るはずです。

プログラムは開発途中なので、無駄があります。ボリュームは秋月で販売しているローターリーエンコーダーを使用することが前提となっています。

完全に完成したら、HPにアップします。

///// PGA2311 CON   /////
#include    <16f877.h>
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP
#use delay(CLOCK = 20000000)  //クロック20MHz
/// プロトタイピング
static  int  aux;
static  int  gain;
static  int  vr1_data;
static  int  vr2_data;
static  int  vr3_data;
static  int  vr4_data;
static  int  enca;
static  int  encb;
static  int  encc;
static  int  enc_cnt;
static  int  downcnt;
static  int  upcnt;
static  int  powron;

void spi_send(int spi_data);   //SPI出力関数
void vrup(void);
void vrdown(void);
void pictest(void);
void  lcdprint(void);

static long  vrcnt;
///// メイン関数
void main()
{
// pictest();

// MSSP初期設定 SPIモード
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_4 );
setup_adc(ADC_OFF);
setup_adc_ports(0x86);
//// ポートB初期設定
set_tris_a(0x03);
set_tris_b(0);  //全ピン出力モード
set_tris_d(0);
output_b(0xff);       //0クリア
output_d(0xff);       //0クリア
set_tris_C(0x17);      //SPIマスタ用入出力モード
delay_ms(1000);      //0.5秒待ち
while(1)
{
   encb = enca;
  enca  =((~(input_a())) & 0x03) ; 
  if (enca != encb)
  {
   lcdprint();
  }
}
}
void  lcdprint(void)
{
if (encb == 0      & enca == 0x02){enc_cnt --;}
if (encb == 0x02 & enca == 0x03){enc_cnt --;}
if (encb == 0x03 & enca == 0x01){enc_cnt --;}
if (encb == 0x01 & enca == 0     ){enc_cnt --;}
if (encb == 0     & enca == 0x01){enc_cnt ++;}
if (encb == 0x01 & enca == 0x03){enc_cnt ++;}
if (encb == 0x03 & enca == 0x02){enc_cnt ++;}
if (encb == 2      & enca == 0    ){enc_cnt ++;}
// ボリューム UP
if (enc_cnt == 8){ enc_cnt =4;vr1_data++;gain = vr1_data;}
if(vr1_data >199){vr1_data = 199;gain = vr1_data;}
// ボリューム DOWN
if (enc_cnt == 0){enc_cnt =4; vr1_data--; gain = vr1_data;}
if(vr1_data < 100){ vr1_data = 100; gain = 0;}

output_b(~(gain));  //ゲインモニタ    
output_d(0xfe);  //
spi_write(gain);   //左チャンネル
spi_write(gain);   //右チャンネル
output_d(0xff);   //
}

Pga2311

一旦ケースに入れて、検証してみたいと思っています。

これもオークションに出品予定です・・・・・(基板の発注費が無い)

« コンタクト割る | トップページ | 地震? »

オーディオ機器の自作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/511109/44052970

この記事へのトラックバック一覧です: 電子ボリューム一応動作:

« コンタクト割る | トップページ | 地震? »