wwwdege 发表于 2011-7-9 16:29:22

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.
**************************************/      
voidstart()
{

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 <0x43))         //ch up   
          {   
                PT2314_INIT_DATA ++;         
          }   
    else if((ch_UpDown==0)&&(PT2314_INIT_DATA >0x40))    //ch down   
          {   
                PT2314_INIT_DATA --;   
          }          
          else
                  {                         
                          return;
                  }               
   // dis_fre=PT2314_INIT_DATA ;               
                PT2314_INIT_DATA = 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 >0x00))      //vol up   
          {   
                PT2314_INIT_DATA --;         
          }   
    else if((Vol_UpDown==0)&&(PT2314_INIT_DATA <0x3F))    //vol down   
          {   
                PT2314_INIT_DATA ++;   
          }          
          else
                  {
                         
                          return;
                  }
       // dis_fre=PT2314_INIT_DATA ;               
    PT2314SetReg(PT2314_INIT_DATA);   
   
}   

/**************************************************************
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;                               
PT2314_INIT_DATA=(TONE_TAB|0x60);                   
PT2314SetReg(PT2314_INIT_DATA);   
   
}
/**************************************************************
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;                                       
PT2314_INIT_DATA=(TONE_TAB|0x70);                   
PT2314SetReg(PT2314_INIT_DATA);   
}
/**************************************************************
function name :speak_lChange 左声道衰减控制
parameter:      
function:         
**************************************************************/   
void speak_lChange(unsigned char speak_lUpDown)   
{ //Tonetreble   
    if((speak_lUpDown== 1)&&(PT2314_INIT_DATA >0xC0))      //vol up   
          {   
                PT2314_INIT_DATA --;         
          }   
    else if((speak_lUpDown==0)&&(PT2314_INIT_DATA <0xDF))    //vol down   
          {   
                PT2314_INIT_DATA ++;   
          }          
          else
                  {               
                          return;
                  }
          //        dis_fre=PT2314_INIT_DATA ;       
    PT2314SetReg(PT2314_INIT_DATA );
}
/**************************************************************
function name :speak_rChange 右声道衰减控制
parameter:      
function:         
**************************************************************/   
void speak_rChange(unsigned char speak_rUpDown)   
{ //Tonetreble   
    if((speak_rUpDown== 1)&&(PT2314_INIT_DATA >0xE0))      //vol up   
          {   
                PT2314_INIT_DATA --;         
          }   
    else if((speak_rUpDown==0)&&(PT2314_INIT_DATA <0xFF))    //vol down   
          {   
                PT2314_INIT_DATA ++;   
          }          
          else
                  {               
                          return;
                  }
       //         dis_fre= PT2314_INIT_DATA ;       
    PT2314SetReg(PT2314_INIT_DATA );
}
/**************************************************************
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) (原文件名:PT2313CSC2313三组立体声输入带响度的数字控制立体声音质处理器IC应用电路原理图及使用指导说明.doc)
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_656237MCU6J8.jpg
(原文件名:1.jpg)

http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_656238PIX348.jpg
(原文件名:2.jpg)

http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_656239YB6TDY.jpg
(原文件名:3.jpg)

http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_656240IT72I9.jpg
(原文件名:4.jpg)

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

wwwdege 发表于 2011-7-9 16:31:12

漏发原理图了现补上:
点击此处下载 ourdev_656245CWGFDY.pdf(文件大小:43K) (原文件名:SCH_PT2314.pdf)

mcu_mouse 发表于 2011-7-9 17:32:24

嗯。不错

Bicycle 发表于 2011-7-9 19:24:13

airfex 发表于 2011-7-9 19:24:44

不错

wwwdege 发表于 2011-7-9 23:19:19

我是木耳 个人觉得高音 低音控制很不错现在工作电压时5V把他电压提升到9V音质不知道会不会更好

HYLG 发表于 2011-7-9 23:29:33

不错,谢谢.

damoplus 发表于 2011-7-10 00:19:16

不错...台机更不错...

zhangyang86 发表于 2011-7-10 09:28:36

感觉这个片子左右声道的分离度太差了点.
按住左声道输入,右声道同样很大输出.基本区分不出左右声道的差别.

wwwdege 发表于 2011-7-10 12:41:26

回复【8楼】zhangyang86 张洋
感觉这个片子左右声道的分离度太差了点.
按住左声道输入,右声道同样很大输出.基本区分不出左右声道的差别.
-----------------------------------------------------------------------

我的不会呀 控制的很好 不过我的PT2314E的参数比PT2314更好 详细对比手册

molink 发表于 2011-10-3 20:33:45

GOOD!

kingboy100 发表于 2011-10-5 08:40:23

mark

zsq1991 发表于 2011-10-11 10:24:08

mark!!

rj44444 发表于 2011-10-21 23:29:39

mark,谢谢

wwq123030627 发表于 2011-10-29 20:34:09

用过TDA7135的飘过

xingzhong 发表于 2012-3-8 15:22:20

-----------------------------------------------------------------------

mark,谢谢

lengshuicha 发表于 2012-3-8 16:00:24

对电台流口水

liangws201 发表于 2012-7-10 14:42:29

我来学习的~~~

redwind 发表于 2012-9-6 08:54:21

PCB焊的不错

huangyiqing1982 发表于 2012-11-20 13:50:41

mark,谢谢

windyde 发表于 2012-11-20 21:57:09

主控部分电路呢??我想问用的什么单片机,

huangxuankui 发表于 2013-7-14 15:46:51

mark                  

1501697860 发表于 2013-8-15 16:56:36

多谢楼主分享
页: [1]
查看完整版本: DIY:PT2314E 控制音量音调IC(图+pdf手册+代码+sch)