ISD1700語(yǔ)音芯片SPI使用總結(jié)
一
該語(yǔ)音芯片的使用要仔細(xì)分析英文PDF的資料,電路可按中青世紀(jì)論壇上面所給的電路搭建,也可按英文PDF后面所畫(huà)的電路圖焊接。
本芯片使用不單純是一個(gè)放音電路,還含有其他的控制。因此程序首先要能完成指定地址的放音工作,其次還應(yīng)能嵌入整個(gè)費(fèi)額顯示程序中,即語(yǔ)音程序不能與電路其他功能相影響。費(fèi)額顯示中里面主要有八字板,點(diǎn)陣等其他的控制。
SPI放音操作設(shè)計(jì)參考了網(wǎng)絡(luò)上的部分程序,各取所長(zhǎng)設(shè)計(jì)了放音程序。在最后附上了部分程序,僅供參考。
二
479+1=480;480*125MS =60S,也就是說(shuō)8K采樣率時(shí)每1個(gè)地址最小語(yǔ)音長(zhǎng)度為125MS,因此如果知道單個(gè)語(yǔ)音的長(zhǎng)度,暫時(shí)無(wú)編程器的時(shí)候,也可自己推斷每個(gè)語(yǔ)音所占的地址長(zhǎng)度。
三
1,
2,
接下來(lái)遇到的問(wèn)題就是準(zhǔn)確放單個(gè)音和連續(xù)播放多個(gè)語(yǔ)音。播放單個(gè)語(yǔ)音首先是地址的編譯。1730以下的地址可定義為BYTE,從1740開(kāi)始就需要定義為WORD,其實(shí)也可定義為BYTE,就是發(fā)送地址的時(shí)候先發(fā)0x10和后兩位即可。本程序定義為WORD,做一個(gè)偏移發(fā)送即可。
接下來(lái)的問(wèn)題就是連續(xù)播放的問(wèn)題,這個(gè)問(wèn)題直到最后才正確的解決。一開(kāi)始的程序中只是一直發(fā)送SETPLAY,可以連續(xù)讀,就是讀的亂,其實(shí)就是錯(cuò)誤操作,后來(lái)嘗試在后面添加一個(gè)2秒的延時(shí),可以連續(xù)讀出語(yǔ)音了,就是每個(gè)要停頓一下才能放出第二個(gè)語(yǔ)音,自認(rèn)為就這樣就可以了,導(dǎo)致了以后還得解決此問(wèn)題!因?yàn)榇朔乓舴绞椒艞壛伺袛嘈酒瑺顟B(tài)寄存器,根本沒(méi)有實(shí)現(xiàn)連續(xù)放音,實(shí)際是單個(gè)語(yǔ)音人為把它們連起來(lái)播放,聽(tīng)起來(lái)很不自然。問(wèn)題拖到最后又衍生了別的問(wèn)題,由于此放音方式的聲音輸出信號(hào)是有高有低,當(dāng)電平跳變時(shí)對(duì)功放產(chǎn)生影響,喇叭會(huì)出現(xiàn)“噗噗”聲,術(shù)語(yǔ)可以稱之為“過(guò)載”,如果人距離喇叭很近的話很容易聽(tīng)出來(lái)。
因此需修改程序,芯片內(nèi)部有個(gè)緩沖器,如果連續(xù)發(fā)送相同的兩個(gè)setplay命令,芯片會(huì)發(fā)完第一個(gè)音后接著連續(xù)發(fā)第二個(gè)音,并且兩音之間的間隔時(shí)間幾乎沒(méi)有。利用這個(gè)特點(diǎn),可以在發(fā)完一個(gè)語(yǔ)音命令后一直發(fā)送讀芯片狀態(tài)命令,從返回來(lái)的數(shù)據(jù)判斷RDY,PLAY,INT位,當(dāng)?shù)谝粭l放音指令發(fā)送完,讀音播放完,立即發(fā)送第二條setplay,并以此類推。這樣實(shí)現(xiàn)了連續(xù)放音,并且聲音輸出一直為高電平(除了開(kāi)始和結(jié)束音),解決了噗噗聲的問(wèn)題。
但是要一直發(fā)送讀芯片狀態(tài)指令就會(huì)影響其他指令,如本實(shí)驗(yàn)是執(zhí)行串口指令,點(diǎn)陣刷新,八字板的顯示和亮度調(diào)整等,推薦在do{ISD_Rd_Status;}while();內(nèi)添加以上命令,便可解決只讀音不響應(yīng)其他命令的問(wèn)題。串口可判斷標(biāo)志位;點(diǎn)陣可在連續(xù)刷新16行(16*16點(diǎn)陣)后執(zhí)行下一判斷芯片標(biāo)志位程序;八字板的顯示可以鎖存,因此有改變顯示時(shí)執(zhí)行一次即可;八字板的亮度需要一直執(zhí)行,但是當(dāng)亮度為3以下時(shí)(即16MS內(nèi)有3MS是點(diǎn)陣亮,13MS是不亮),放音時(shí)八字板會(huì)有閃爍現(xiàn)象,原因可能是執(zhí)行除了亮度調(diào)整指令外其他指令占用了大約3MS的時(shí)間,暫時(shí)還沒(méi)有好的解決辦法。
四
正在放音的同時(shí)用串口發(fā)送調(diào)節(jié)音量也遇到了問(wèn)題,一開(kāi)始的解決辦法是打斷當(dāng)前語(yǔ)音,延時(shí)超過(guò)最大語(yǔ)音長(zhǎng)度的時(shí)間,再發(fā)送修改APC的指令。這樣做的原因是如果用本程序在發(fā)完當(dāng)前音后突然發(fā)送修改APC的指令時(shí)候,芯片會(huì)從頭到尾讀所有音?。〉阶詈笞屑?xì)研究才發(fā)現(xiàn)這個(gè)程序中有個(gè)修改永久內(nèi)部寄存器的指令,當(dāng)正在進(jìn)行讀音操作發(fā)送修改內(nèi)部永久寄存器時(shí)會(huì)導(dǎo)致以上現(xiàn)象,把此程序剝離后實(shí)現(xiàn)了邊播放語(yǔ)音邊調(diào)節(jié)音量。發(fā)送時(shí)也要注意判斷芯片狀態(tài),RDY為1后發(fā)送,RDY再次為1時(shí)繼續(xù)發(fā)放音指令。
五
本芯片的錄音采用拷貝機(jī),拷貝機(jī)燒錄語(yǔ)音時(shí)也需注意以下問(wèn)題:首先是在最后的語(yǔ)音后添加一空語(yǔ)音,以保證錄音不會(huì)出現(xiàn)問(wèn)題;其次是燒錄語(yǔ)音時(shí)電腦除了運(yùn)行燒錄語(yǔ)音的程序,其它什么都不要開(kāi),什么QQ,殺毒軟件等都要關(guān)閉,最好鼠標(biāo)都不要?jiǎng)?!燒錄語(yǔ)音前最好檢查下聲卡驅(qū)動(dòng),保證有驅(qū)動(dòng)并且最新,最好將聲卡聲音輸出設(shè)置(本機(jī)為AC97 Audio)中喇叭組態(tài)設(shè)置為耳機(jī),不要什么立體聲等其他狀態(tài)。音量大小可以隨意,本試驗(yàn)設(shè)置最大。官方意見(jiàn)是三分之二的狀態(tài),總之,在噪音最小的情況下也要保證音量。
六
七
拷貝機(jī)很貴,并不是必須買,本芯片燒錄語(yǔ)音的拷貝機(jī)也不是自己的,囧!燒錄語(yǔ)音的試驗(yàn)還沒(méi)做過(guò),將來(lái)會(huì)做這方面的試驗(yàn)。另外芯片也有次品,主要表現(xiàn)是在放音時(shí)有很大的“咔嚓”聲,還有一個(gè)干脆就是燒不了音!拿去退貨!試驗(yàn)樣本100只ISD1760,次品率十五分之一。
聯(lián)系客服