ISD1700语音组合精灵板是一块最小化的语音模块,用户可以不需要了解语音芯片及语音合成等的内部机理,只需简单的外部串口控制,就可以直接在喇叭上获得理想的语音合成效果。板上语音芯片可插拔,可选用ISD1700全系列的芯片。 本精灵板结构紧凑体积仅半个烟盒大小,以标准组件模块方式灵活自如地应用在各种用户系统及各种产品空间中。本模块特点是音质好,断电不丢信息并可自由录入语音内容;片内可擦写程序存储器的单片机(AT89C2051)使控制灵活功能强大;板载LM386功放可提供0.5W的喇叭输出。 一、设计 1、将音源分段录制ISD1700芯片。将需要的语音单词先通过磁带录音机或多媒体电脑录制好,分成若干段(最大1000段),再通过“ISD1700s高级语音编程拷贝机”全部自动分段写入到ISD1700芯片中,将此音源芯片插入本精灵板。——ISD芯片可即录即放反复修改内容,内部语音及分段信息在断电后也能保持100年。 2、本精灵板上ISD1700语音芯片录好了31段如下常用字词:“幺(00)、零(01)、壹(02)、贰(03)、叁(04)、肆(05)、伍(06)、六(07)、柒(08)、捌(09)、玖(0A)、十(0B)、百(0C)、千(0D)、万(0E)、温度(0F)、度(10)、正(11)、负(12)、现在(13)、正常(14)、偏高(15)、偏低(16)、上升(17)、下降(18)、号(19)、小时(1A)、分(1B)、秒(1C)、点(1D),嘟(1E)”等。 ★如需其它专业广播级语音,请另行联系。 3、根据需要编写系统串行通讯程序,指令如下: 标准5V的TTL串口协议方式(TX、RX双线,串口方式一、无校验): 串口速率: 4800 bit/s 引导码: AA AA 句结束放音存储码: FFFF(立刻语音合成放音,并存储该指令,以后可检查复听) TX端放音忙信号: 低电平有效 (空闲为高电平,语音合成放音期间变为低电平输出。) 停止语音播放:给AN端一个低电平信号,即可停止播放语音。 数据码:码址与语音段位序号对应,如00为第一段,01为第二段,02为第三段,…….每句话最多70段。 ★厂家免费提供范例式的接口源程序供参考,也可以提供其他特定要求的接口设计。 4、举例说一句“嘟,现在温度126.5度,偏高。”,应发码:AA AA 1E 13 0F 02 0C 03 0B 07 1D 06 10 15 FFF。 二、使用 1、性能:电源电压5V,静态电流13mA,工作电流150mA,接口电平5V,外接喇叭8W,输出音频功率0.5W。 2、合成:按需要和规定提供控制指令(5V的TTL232方式),用户可使用控制单片机的任意口线模拟通讯,本板即调用ISD语音芯片的相应段语音内容连续播放出来,语音合成放音期间TX端输出低电平。 3、停止放音:给“AN”端提供低电平信号,即可停止正在播放的语音。 4、换片学习:如果更换语音芯片的内容或更换芯片,即需要先让系统学习一遍(将语音芯片的分段地址都搜索并存储起来)。将短路跳针置于Learn位置,给模块加电,此时模块读出1700芯片的语音地址并储存,学习完毕后会将语音芯片内最后一段语音播放一遍表示放音完毕。学习完毕后即将短路跳针置回Speach,系统断电再通电即可控制使用。 5、通讯问题:本板采用11.0592MHZ晶振的单片机控制,采用4800波特率。 6、放音停顿:如果在语音组合时需要语气停顿,则可以在语音芯片内录一段0.3秒左右的静音,在需要语音停顿的地方,将这段加上。这样的效果比单纯的单片机延时更好。 三、单片机软、硬件接口 ISD1700JL与单片机连接图 发码测试程序: //ISD1700JL发码测试程序,51单片机采用11.0592M晶振,4800波特率传输 #include "REG51.H" void init(void); //单片机初始化 void send_jl(unsigned char addr_buff[40],vocNO);//发码函数 void delay(int t); //延迟 void main() { int j; unsigned char i,a; unsigned char buff[11]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a, };//要发送的语音组合数 //据,放在buff[]数组里,最大不能超过40个数组. //将需要发送的语音段数赋值到buff数组里即可。 //本例将01-0a,共11段发送出去。 init(); //初始化 for(a=100;a>0;a--) //延迟 {delay(1000); } while(RXD==0); //检测忙信号,等待ISD1700jl放音完毕 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_jl(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--; } } |