(此为示意图,详见实物) ISD4000语音组合精灵板是一块长时间的、最小化的语音模块,用户可以不需要了解语音芯片及语音合成等的内部机理,只需简单的外部串口控制,就可以直接在喇叭上获得理想的语音合成效果。板上语音芯片可插拔,可选ISD4002、ISD4003全系列2-8分钟芯片。 本精灵板结构紧凑体积仅半个烟盒大小,以标准组件模块方式灵活自如地应用在各种用户系统及各种产品空间中。该精灵板虽体积小巧但包含了大量最新的器件和技术成果,如先进数字音频录放芯片(ISD4002、ISD4003系列)音质好断电不丢信息可自由录入语音内容;片内可擦写程序存储器的单片机(AT89C2051)使控制灵活功能强大;低压差微功耗的三端稳压器使输入电源电压范围扩至5-12伏、板载LM386功放可提供0.5W的喇叭输出。 新版本(V2.0)以上增加了抗干扰模块,能有效解决使用中丢录音的问题。 一、设计 1、分段录制好音源ISD芯片。将需要的语音单词先通过磁带录音机或多媒体电脑录制好,分成若干段(最大256段),再通过“ISD3340K高级语音编程拷贝机”全部自动分段写入到ISD芯片中,将此音源芯片插入本精灵板,学习操作后即可使用。——ISD芯片可即录即放反复修改内容,内部语音及分段信息在断电后也能保持100年。 2、本精灵板上ISD语音芯片录好了若干段如下常用字词:“幺(01)、零(02)、壹(03)、贰(04)、叁(05)、肆(06)、伍(07)、六(08)、柒(09)、捌(0A)、玖(0AB)、十(0C)、百(0D)、千(0E)、万(0F)、温度(10)、度(11)、正(12)、负(13)、现在(14)、正常(15)、偏高(16)、偏低(17)、上升(18)、下降(19)、号(1A)、小时(1B)、分(1B)、秒(1D)、点(1E),嘟(1F)”以及一些音乐等。 ★如需其它专业广播级语音,请另行联系。 3、根据需要编写系统串行通讯程序,指令如下: 标准5V的RS232串口协议方式(TX、RX双线,串口方式一、无校验): 串口速率: 4800 bit/s(12M晶振时置FA) 引导码: AA AA 句结束放音存储码:FF FF(立刻语音合成放音,并存储该指令,以后可检查复听) 放音中途停止码:CC CC TX端放音忙信号:低电平有效(空闲为高电平,语音合成放音期间变为低电平输出。) 数据码: 单字节码址与语音段位序号对应,如01为第一段,02为第二段,03为第三段,…….每句话最多100段。 4、举例说一句“嘟,现在温度126.5度,偏高。”,应发码:AA AA 1F 14 10 03 0D 04 0C 08 1E 07 11 16 FF FF。 二、使用 1、性能:电源电压5-12V,静态电流15mA,工作电流150mA,接口电平5V,外接喇叭4-8W,输出音频功率0.5W。 2、合成:按需要和规定提供控制指令(5V的RS232方式),用户可使用控制单片机的任意口线模拟通讯,本板即调用ISD语音芯片的相应段语音内容连续播放出来,语音合成放音期间TX端输出低电平。注意,本板不能接受第127段(7F)的放音。 3、检听:给AN端提供高脉冲,即可听到最后一次的语音组合发音内容。 4、换片学习:如果更换语音芯片的型号和内容,即需要先让系统学习一遍。将短路跳针置于2-3位置,约几分钟后会听到一串杂音,杂音完毕后即将短路跳针置回1-2,断电后再上电即可使用。 5、通讯问题:如果用户使用微机、主频是11.0592MHZ的单片机控制,本板上的12M晶振也应改为11.0592MHZ晶振。另外在调试时如果发的数据码超过语音芯片上的分段数(如只有60段却发出42H)将会听到一段空白音,可以继续操作。 三、单片机软、硬件接口
发码测试程序: //ISD3340JL发码测试程序,51单片机采用11.0592M晶振,4800波特率传输 #include "REG51.H" void init(void); //单片机初始化 void send_3340jl(unsigned char addr_buff[40],vocNO);//发码函数 void delay(int t); //延迟 void main() { int j; unsigned char i,a; unsigned char buff[11]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b}; //要发送的语音组合数据,放在buff[]数组里,最大不能超过40个数组. //将需要发送的语音段数赋值到buff数组里即可。本例将01-0b,共11段发送出去。 init(); //初始化 for(a=100;a>0;a--) //延迟 {delay(1000); } while(RXD==0); //检测忙信号,等待340jl放音完毕 send_3340jl(buff,11); //将语音组合数据发送出去,buff是发送的数组数据, //11是数据的个数 } void init(void) { TMOD=0x21; TH1=0xfa; TL1=0xfa; //4800波特率 with 11.0592 TR1=1; SCON=0x50;//串行口工作方式1 PCON=0x00; //SMOD=0; REN=1; EA=0; } void send_3340jl(unsigned char addr_buff[40],vocNO) //发送子程序 { unsigned char i; //形参addr_buff[40]接受数组 //数据,vocNO接受数据个数 i=0; SBUF=0xaa; while(TI==0); //发送起始码aaaa TI=0; SBUF=0xaa; while(TI==0); TI=0; for (;vocNO>0;vocNO--) //逐个发送语音组合数据 { SBUF=addr_buff[i]; while(TI==0); TI=0; i++; } SBUF=0xff; //发送结束码ffff while(TI==0); TI=0; SBUF=0xff; while(TI==0); TI=0; } void delay(int t) { while(t!=0) { t--; } } |