中科因仑“3+1”工程特种兵精英论坛

标题: DIY:PT2314E 控制音量音调IC(图+pdf手册+代码+sch) [打印本页]

作者: 脑经急转弯    时间: 2016-4-14 22:09
标题: DIY:PT2314E 控制音量音调IC(图+pdf手册+代码+sch)
SCH是网上找的,也可参照手册的:
我用的是PT2314E低电压(4~10V) 我仔细看了一下操作方法跟PT2314一样,也有喝多其他兼容的IC
PT2314/CSC2314四声道输入音质处理器IC应用电路原理图及使用指导说明
功能概述和特性
PT2314四组立体声输入,两声道输出。输入带响度的数字控制立体声音质处理
器,IIC控制,6V-10V,兼容PT2314/CSC2313/TC7314/CD3314,采用SOP-28/DIP-
28封装。它适用于车载收音机和高保_真音质系统。本产品提供可选择的输入增益和外部
响度功能,并且由微处理器串行I2C总线介面控制。主要功能如下:
① 使用CMOS技术
② 输入多路复用:
4个立体声输入
对不同的音源具有最佳适应的可选择的输入增益
③ 带响度功能,高音,低音控制
④ 音量控制(每级1.25dB)
⑤ 高音和低音控制
⑥ 二个喇叭衰减器:
二个独立的扬声器均衡和音量控制装置
独立的静音功能
⑦ 通过串性I2C总线可实现所有功能的程序化。
代码:

/******************************************************
START condition:

SCLK: -----------|______
                     
SDIO:-----|_____________
       1  |   2  |  3

STOP condition:

SCLK: ____|--------------
                     
SDIO:____________|-------
              1 |  2   |   3

DATA:

SCLK:_______________|---|________|----|_______
                     
SDIO:___________|------------|____________|----
                            |<==========>|


RESET:

SENB:__|---------------------------------------------
SDIO:_________________________________________|------
RST:  ___________|------------------------------------
SCLK:__|---------------------------------------------
       |    1    |             2                                |   3

********************************************************/
/////////I2C///////////////////
////////////////延时程序///////////////

//////////I2C开始///////////
/****************************************
START condition:

SCLK: -----------|______
                     
SDIO:-----|_____________
       1  |   2  |  3
falling edge of SDIO while SCLK is
high) does not occur within 300 ns before the rising edge of RST.  
**************************************/      
void  start()
{

P0CONL  = 0xB8; // 输出 // Configure SDIO as push-pull
  set_sdio;
        set_sclk;
        __NOP();__NOP();// tSU:STA
        clr_sdio;
        __NOP();__NOP();// tHD:STA
        clr_sclk;
}
void iic_stop()
{
P0CONL  = 0xB8; // 输出 // Configure SDIO as push-pull
  clr_sclk;
  __NOP();__NOP();// tf:IN + tLOW
        clr_sdio;
        __NOP();__NOP();
        set_sclk;        
        __NOP();__NOP();        // tf:IN + tSU:STO
        set_sdio;
}
/////////////////////////////////////////////
//////////////////I2C不应答//////////
void noack()
{
P0CONL  = 0xB8;// 输出// Configure SDIO as push-pull
        set_sdio ;
__NOP();__NOP(); // tf:IN + tLOW
        set_sclk;;        
  __NOP();__NOP();// tf:IN + tHIGH  
}
////////////*发送应答位*/////////////////////
void mack( )
{
P0CONL  = 0xB8;// 输出// Configure SDIO as open-drain
        clr_sdio;
  __NOP();__NOP();  // tf:IN + tLOW
        set_sclk;;        
  __NOP();__NOP();// tf:IN + tHIGH
}
//////////I2C等待器件应答///////////////
void ack()
{
        unchar i=200;
  P0CONL  = 0x88; // 输入
         clr_sclk ;
        __NOP();__NOP();// tf:IN + tLOW
         set_sclk ;
         __NOP();__NOP();// tf:IN + tHIGH
        while (--i)                           //等待ASK
        {
                __NOP();__NOP();
                //set_sdio ;                           //释放总线
                if (!test_sdio) break; //跳出
                //clr_sclk ; //??????????????????????????????
        }
        clr_sclk ;
        __NOP();__NOP();// tf:IN
}
/////////I2C读一个字节//////////////
unsigned char rd(void)
{
        unchar out=0;
        unchar i; //有8位数据
P0CONL  = 0x88; // 输入
        for(i=0;i<8;i++)
        {        
          set_sclk;
          __NOP();__NOP();
                if(test_sdio)set_bit(out,bit0);                                 
                else clr_bit(out,bit0);
          if(i<7) out<<=1;//下一位                           
                clr_sclk ;
          __NOP();__NOP();// tf:IN
          __NOP();__NOP(); // tLOW                  
        }            
        return out;
}
/////////////////////I2C写一个字节/////////////////////////
void wd(unsigned char dd) //
{
        unchar i=8;
  P0CONL  = 0xB8;// 输出
        while(i--)
        {
                if(dd&0x80)set_sdio ;  
                else       clr_sdio;
          __NOP();__NOP(); // tLOW
          set_sclk;
          __NOP();__NOP();  // tf:IN + tHIGH;
          clr_sclk ;
                __NOP();__NOP();// tf:IN
                dd<<=1; __NOP();
        }  
        ack();
}



#include "i2c.h"
#define PT2314_ADD        0x88   //PT2314的地址码
#define A_NORMAL    0X01
#define A_BASS            0X02
#define A_TREBLE                0X03
#define A_SPL       0X04
#define A_SPR       0X05
#define A_CH        0X06
#define PT2314_UP          0X01
#define PT2314_DOWN        0X00
unchar PT2314_INIT_DATA[] =
  {
        0x41, // switch    选择第二通道
        0x10, // volume    -10DB
        0xC0, // speaker-l 0DB
        0xE0, // speaker-r 0DB
        0x60, // bass      -14DB  
  0x70 //  treble    -14DB
  };   //0x41为选择第二通道   
                        
__code const unchar TONE_TAB[] =        
  {
          0x00,        //-14dB
    0x01,        //-12dB
    0x02,        //-10dB
    0x03,        //-08dB
    0x04,        //-06dB
    0x05,        //-04dB
    0x06,        //-02dB
    0x07,        //+00dB
    0x0E,        //+02dB
    0x0D,        //+04dB
    0x0C,        //+06dB
    0x0B,        //+08dB
    0x0A,        //+10dB
    0x09,        //+12dB
    0x08        //+14dB
        } ;
        unchar bass=0  ;
        unchar treble=0 ;  
        unchar mode_set=0 ;            
/***************************************************************************
************************* PT2314 写入一个字节*****************************
***************************************************************************/

void PT2314SetReg(unchar dat)         //register value  //写入一个字节   
        {   
          start();
                wd(PT2314_ADD);
                wd(dat);
                iic_stop();         
        }
/****************************************************************************
************************PT2314 写入多个字节***************************
****************************************************************************/   
         
void PT2314SetNRegs(unchar *pRegVal,unchar n)//*pRegVal=pointer to register value,n=data length   
        {                                        //写入多个字节
            unchar   i;   
            start();   
                        wd(PT2314_ADD);  
            for(i = 0; i < n; i++)   
                    {   
                                wd(pRegVal);  
                    }   
            iic_stop();  
        }         
/****************************************************************************
************************通道转换选择(0~3)**************************
****************************************************************************/     
void SwitchAudioOuputChannel(unchar ch_UpDown)   
        {  
    if((ch_UpDown==1)&&(PT2314_INIT_DATA [0]<0x43))         //ch up   
            {   
                PT2314_INIT_DATA [0]++;         
            }   
    else if((ch_UpDown==0)&&(PT2314_INIT_DATA [0]>0x40))    //ch down   
            {   
                PT2314_INIT_DATA [0]--;   
            }           
          else
                  {                           
                          return;
                  }               
   // dis_fre=PT2314_INIT_DATA [0];                 
                PT2314_INIT_DATA [1] = 0x18;              //音量输出 -30dB
                PT2314SetNRegs(PT2314_INIT_DATA, 6);   
        }         
/**************************************************************  
function name :  RdVolChange 声音控制  
parameter:      if UpDown is true,turn up vol,else turn down  
function:       adjust the vol   
**************************************************************/   
void RdVolChange(unsigned char Vol_UpDown)   
{   
    if((Vol_UpDown== 1)&&(PT2314_INIT_DATA [1]>0x00))      //vol up   
            {   
                PT2314_INIT_DATA [1]--;         
            }   
    else if((Vol_UpDown==0)&&(PT2314_INIT_DATA [1]<0x3F))    //vol down   
            {   
                PT2314_INIT_DATA [1]++;   
            }           
          else
                  {
                           
                          return;
                  }
         // dis_fre=PT2314_INIT_DATA [1];                 
    PT2314SetReg(PT2314_INIT_DATA[1]);   
   
}   

/**************************************************************  
function name :  bassChange 低音控制  
parameter:      if UpDown is true,turn up vol,else turn down  
function:       adjust the vol   
**************************************************************/   
void bassChange(unsigned char bass_UpDown)   
{ //ToneBass  
if((bass_UpDown==1)&&(bass<0x0e))               
        {
                bass++;        
        }
else if((bass_UpDown==0)&&(bass!=0))
        {
                bass--;
        }               
else
        {
                 
                return;
        }
        //dis_fre=TONE_TAB[bass];                                
  PT2314_INIT_DATA[4]=(TONE_TAB[bass]|0x60);                     
  PT2314SetReg(PT2314_INIT_DATA[4]);   
   
}
/**************************************************************  
function name :  trebleChange 高音控制  
parameter:      if UpDown is true,turn up vol,else turn down  
function:       adjust the vol   
**************************************************************/   
void trebleChange(unsigned char treble_UpDown)   
{ //Tonetreble   
if((treble_UpDown==1)&&(treble<0x0e))        
        {
                treble++;        
        }                    
else if((treble_UpDown==0)&&(treble!=0))
        {
                treble--;
        }               
else
        {
                 
                return;
        }                        
        //dis_fre=TONE_TAB[treble];                                       
PT2314_INIT_DATA[5]=(TONE_TAB[treble]|0x70);                     
PT2314SetReg(PT2314_INIT_DATA[5]);   
}
/**************************************************************  
function name :  speak_lChange 左声道衰减控制  
parameter:        
function:         
**************************************************************/   
void speak_lChange(unsigned char speak_lUpDown)   
{ //Tonetreble   
    if((speak_lUpDown== 1)&&(PT2314_INIT_DATA [2]>0xC0))      //vol up   
            {   
                PT2314_INIT_DATA [2]--;         
            }   
    else if((speak_lUpDown==0)&&(PT2314_INIT_DATA [2]<0xDF))    //vol down   
            {   
                PT2314_INIT_DATA [2]++;   
            }           
          else
                  {                 
                          return;
                  }
          //        dis_fre=PT2314_INIT_DATA [2];         
    PT2314SetReg(PT2314_INIT_DATA [2]);  
}
/**************************************************************  
function name :  speak_rChange 右声道衰减控制  
parameter:        
function:         
**************************************************************/   
void speak_rChange(unsigned char speak_rUpDown)   
{ //Tonetreble   
    if((speak_rUpDown== 1)&&(PT2314_INIT_DATA [3]>0xE0))      //vol up   
            {   
                PT2314_INIT_DATA [3]--;         
            }   
    else if((speak_rUpDown==0)&&(PT2314_INIT_DATA [3]<0xFF))    //vol down   
            {   
                PT2314_INIT_DATA [3]++;   
            }           
          else
                  {                 
                          return;
                  }
         //         dis_fre= PT2314_INIT_DATA [3];         
    PT2314SetReg(PT2314_INIT_DATA [3]);  
}
/**************************************************************  
function name :  PT2314Mute  
parameter:      if MuteOpen is ture,then mute PT2314,else turn to mormal  
function:       open ro close PT2314's mute function   
**************************************************************/   
void PT2314Mute(unchar MuteOpen)   
{   
        if(MuteOpen)   
        {   
                PT2314SetReg(0xFF);                     //mute speaker R
                PT2314SetReg(0xdF);                     //mute speaker L
        }   
        else   
        {   
                PT2314SetReg(0xe0);                     //open speaker R
                PT2314SetReg(0xc0);                     //open speaker L
        }   
}
//
/**************************************************************  
function name :  Audio_functions_UP  
parameter:        
function:       增加音量 音调     
**************************************************************/   
void Audio_functions_UP(unchar sel_mark)
{
        switch( sel_mark )
        {
                case 0:
                sel_mark=A_NORMAL;
                case A_NORMAL:
                RdVolChange(PT2314_UP);
                break;        
                case A_BASS:
                bassChange(PT2314_UP);
                break;
                case A_TREBLE:
                trebleChange(PT2314_UP);
                break;        
                case A_SPL:
                speak_lChange(PT2314_UP);
                break;        
                case A_SPR:
                speak_rChange(PT2314_UP);        
                break;        
                case A_CH:
                SwitchAudioOuputChannel(PT2314_UP);        
                break;               
                default:
                break;
        }

}
/**************************************************************  
function name :  Audio_functions_DOWN  
parameter:  减小音量 音调      
function:            
**************************************************************/
void Audio_functions_DOWN(unchar sel_mark)
{
        switch( sel_mark )
        {
                case 0:
                sel_mark=A_NORMAL;
                case A_NORMAL:
                RdVolChange(PT2314_DOWN);
                break;        
                case A_BASS:
                bassChange(PT2314_DOWN);
                break;
                case A_TREBLE:
                trebleChange(PT2314_DOWN);
                break;        
                case A_SPL:
                speak_lChange(PT2314_DOWN);
                break;        
                case A_SPR:
                speak_rChange(PT2314_DOWN);        
                break;        
                case A_CH:
                SwitchAudioOuputChannel(PT2314_DOWN);        
                break;               
                default:
                break;
        }

}

        
点击此处下载 ourdev_656236CICTLZ.doc(文件大小:38K) (原文件名T2313CSC2313三组立体声输入带响度的数字控制立体声音质处理器IC应用电路原理图及使用指导说明.doc)

(原文件名:1.jpg)


(原文件名:2.jpg)


(原文件名:3.jpg)


(原文件名:4.jpg)

点击此处下载 ourdev_656241YTSUMD.pdf(文件大小:715K) (原文件名T2314中文资料.pdf)
点击此处下载 ourdev_656242GVCY56.pdf(文件大小:1.18M) (原文件名T2314E V1.0-en.pdf)
点击此处下载 ourdev_656243VW7HA6.doc(文件大小:35K) (原文件名:音效集成PT2314,PT2313的使用指导.doc)






欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4