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) |
|