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 |