ISD1420使用的单片机控制
*********编写人: 杜洋 *********
ISD1400系列芯片是较为常用了语音录放集成电路,一般多用于语音电话、留言机等设备。更可于单片机实现接口,进行语音分段录放音的功能,可用于自动报时器,汽车自动报站器等设备,如果采用具有语音处理的16位或32位处理器实现同样的功能将会增大开发的周期和成本,会使本来简单的系统更加的复杂。 开发简单的语音录放系统时,ISD的芯片(或者台湾巨华APR系列芯片)将成为开发工程师的必然选择。 下面让我们来了解一下ISD系列芯片吧! ISD1420为美国ISD公司出品的优质单片语音录放集成电路,由振荡器、语音存储单元、前置放大器、自动增益控制电路、抗干扰滤波器、输出放大器组成。一个最小的录放系统仅由一个麦克风、一个喇叭、两个按钮、一个电源、少数电阻电容组成。录音内容存入永久存储单元,提供零功率信息存储,这个独一无二的方法是借助于美国ISD公司的专利——直接模拟存储技术(DAST TM)实现的。利用它,语音和音频信号被直接存储,以其原本的模拟形式进入EEPROM存储器。直接模拟存储允许使用一种单片固体电路方法完成其原本语音的再现。不仅语音质量优胜,而且断电语音保护。 目前,ISD1420录放时间为20秒,(APR9301录放时间为20秒-30秒,RPR9600录放时间为50秒-60秒) 。。。。
我了解的ISD芯片是PDIP(双列直插)封装形式,其分为软封装和硬封装两种。软封装的芯片是在一个电路板上嵌入芯片内核,它是比较便宜的,而且还可以剪裁的更小嵌入到电路里。(合能单片机软封装的单价为12元,硬封装为17元) 下面我将以ISD1420为例,说说我对ISD芯片的理解和使用,希望可以给大家一个参考。 一、ISD最小化系统的录放音: ISD1400芯片可以和少量的外围元件构成一个最小化的录放音电路。下面是经典的最小化录放音电路图: 。。。。。
这个最小化系统有一个LED指示灯、三个微动开关,可以对芯片的录音、播放、停止进行控制。S3(RECORD)为录音键,按住它时LED灯点亮,此时为录音状态,当录放达到最大时间值或中途放开S3录音按键即停止录音。S2(PLAYL)为放音键,按一下它就可以播放录音,当放音达到录音的尾声时或中途按下了S1停止键则停止放音。S1为停止键,当放音过程中按下S1停止键停止放音。如果有待机时按住S1则开始放音,放音直到录音的尾声或中途放开S1键。 当芯片处于录音状态时LED点亮,当芯片放音结束时LED会闪亮一下。 只要按电路图接好电路,一般不用调试就可以使用。
二、用微处理器对ISD芯片的分段录放音控制: 用微处理器对ISD芯片的分段录放音控制时,才算是发挥了芯片的优势。ISD芯片通过8位并行地址线实现分段录放音,地址线的功能如下表: 。。。。。
ISD1420地址输入端具有双重功能,根据地址中的A6、A7的电平状态决定A0~A7的功能。如果A6、A7有一个低电平,A0~A7输入全解释为地址位,作为起始地址用,此时地址线仅作为输入端,在操作过程中不能输出内部地址信息。根据PLAYE、PLAYL或REC的下降沿信号,地址输入被锁定。如果A6、7同为高电平时,它们即为模式位。 在这里我们只用到地址功能来分段控制,所以我们需要保证A6、A7不可同时为1,这里我们可以用软件进行保护。 地址输入端A0~A7有效值范围为00000000~10011111,这表明最多可被划分为160个存贮单元,可录放多达160段语音信息。由A0~A7决定每段语音的起始地址,而起始地址又直接反映了录放的起始时间。其关系见公式: TQ=0.125s×(128A7+64A6+32A5+16A4+8A3+4A2+2A1+0) 例如: 第一段语音从0秒开始,地址设置为00000000; 第二段语音从2秒开始,地址设置为00010000; 第三段语音从5秒开始,地址设置为00100000; 第四段语音从12秒开始,地址设置为01010000;
。。。。。 ISD芯片与微处理器(单片机)的硬件接口电路:A0~A7接单片机的一组I/O口上,再用3个I/O口分别作录音使能(接REC[27脚])、放音使能(接PLAYL[23脚])和停止反馈(接RECLED[25脚])。此时就可以用单片机对ISD分段录放音了。 为了方便录音工作,我设计了一个录音专用电路板。CPU采用89S51,由两位静态数码管显示十六进制数据,还据有选择录音起始位,清除上一次录音等功能。非常适用于分段放音电路的前期录音与调试。下面就是录音板的电路图及源程序(汇编),供大家参考: 。。。。。 以下是程序(汇编):
/*------------------------------------------- 项目号: 212-0001 项目名: 家电中央控制系统工程 程序名: ISD1402语音芯片分段录放音调试 编写人: 杜洋 初写时间: 2005年9月4日 程序功能: 实现对ISD1420语音芯片的分段录放音 实现方法: 用定时器产生最小125MS的录音长度值 CPU说明: 89S52 24-PC 12MHZ晶振 接口说明: (详见初定义) 信息说明: 修改日志: NO.1-2005.9.19 增加了地址极限保护功能,防止录音出错。 -------------------------------------------*/
;------------------------------------------初定义
ISDDAT EQU P1 ;语音地址线
KEYRED EQU P3.3 ;录音按键
ISDRED EQU P3.0 ;录音使能(低有效)
KEYPLAYL EQU P3.4 ;长放音键
ISDPLAYL EQU P3.2 ;长放音使能
KEYPLAYS EQU P3.5 ;短放音按键
ISDPLAYS EQU P3.1 ;短放音使能
KEYSET EQU P3.6 ;
XX EQU P1.7 ;调试用灯
STOPIN EQU P3.7 ;放音停止脉冲输入
LED1 EQU P0 ;静态数码管第一位 ;数码管显示第一位(十位)
LED2 EQU P2 ;静态数码管第二位 ;数码管显示第二位(个位)
WRAM EQU 20H ;录音地址寄存器 ;数码管显示值寄存器
WBIT1 EQU 21H ;放弃此次录音寄存器 ;
WW EQU 22H ;
WBIT3 EQU 23H ;
;-------------------------------------------------------------------程序入口 ORG 0000H
JMP ISD_START
ORG 000BH
JMP TT0
ORG 0030H
;----------------------------------------------程序开始 ISD_START: MOV R1,#8 MOV R0,#WRAM RAM1: MOV @R0,#0 INC R0 DJNZ R1,RAM1
SETB ISDPLAYL SETB ISDRED SETB ISDPLAYS SETB KEYSET MOV R2,#3 MOV TMOD,#01H ;定时计数器工作方式 MOV TH0,#9EH ;初值(9E58H--25MS) MOV TL0,#58H ; SETB ET0 ;开T0允许 SETB EA ;开总中断
MOV ISDDAT,#0FFH MOV WRAM,#00H CALL DISPLAY MOV WBIT1,#0 LOOP: ;录音部分 JB KEYRED,N1 CALL DL20MS JB KEYRED,N1 MOV ISDDAT,WRAM MOV WBIT1,WRAM MOV WBIT3,WRAM CLR ISDRED SETB TR0 ;启动定时器 M0: JNB P1.6,M1 ;地址极限值保护 JNB P1.7,M1 JMP M2 M1: JNB KEYRED,M0 M2: SETB ISDRED CLR TR0 N1: ;回放刚才录音 JB KEYPLAYL,N2 CALL DL20MS JB KEYPLAYL,N2 MOV ISDDAT,WBIT1 CLR ISDPLAYS CALL DL60MS SETB ISDPLAYS N2: ;加地址功能,设定放音地址 JB KEYPLAYS,N3 CALL DL20MS JB KEYPLAYS,N3 INC WBIT1 MOV ISDDAT,WBIT1 CALL DISPLAY2 CALL DL60MS N3: ;清除刚才录音 JB KEYSET,N4 CALL DL20MS JB KEYSET,N4 MOV ISDDAT,WBIT3 MOV WRAM,WBIT3 MOV WBIT1,WBIT3 CALL DISPLAY N4: JMP LOOP ;-------------------------------------------数码管显示程序 DISPLAY: MOV WW,WRAM JMP GO DISPLAY2: MOV WW,WBIT1 GO: MOV A,WW ;静态数码管显示 MOV DPTR,#TAB1 ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV LED1,A MOV A,WW ANL A,#0FH MOVC A,@A+DPTR MOV LED2,A RET ;----------------------------------LED数码管显示表(0-F) TAB1 TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0A7H,0A1H,86H,8EH ;---------------------------------------------------------T0中断 TT0: MOV TH0,#9EH ;重装初值(25MS) MOV TL0,#58H ; DJNZ R2,TT0EXIT ;1位的录音时长(125MS) MOV R2,#3 ; INC WRAM CALL DISPLAY TT0EXIT: RETI ;T0中断结束 ;-----------------------------------延时子程序 DL20MS: ;20毫秒延时,主要用于去抖动。(100,100) MOV R6,#100 DL20MS_1: MOV R7,#100 DJNZ R7,$ DJNZ R6,DL20MS_1 RET DL60MS: ;60毫秒延时 CALL DL20MS CALL DL20MS CALL DL20MS RET DL05S: ;1秒延时,用在了开始等待。(50) MOV R5,#50 DL05S_1: CALL DL20MS DJNZ R5,DL05S_1 RET ;---------------------------------------结束 END
在录音板上按一下录音键,并录入第一个段音。完成后LED上显示了第二段的起始地址,按重放键放音,感觉满意后记下这个数据,开始下一段录音。如果感觉不满意则按清除键回到上次的地址位重新录音。录好后,在放音时只要给出放音的起始地址即可放音,当放音结束后RECLED将输出一个低电平脉冲。程序查寻此脉冲并停止放音或开始另一段放音。程序如下: PLAY EQU P3.3 ;语音播放__
STOPIN EQU P3.0 ;语音停止信号输入__
MOV SPDAT,#00H;放入放音地址 CLR PLAY ;开始放音 JB STOPIN,$;查寻停止反馈 SETB PLAY;有停止信号,停止放音 CALL DL20MS;延时等待芯片恢复 MOV SPDAT,#27H;放入第二段放音地址 CLR PLAY JB STOPIN,$ SETB PLAY CALL DL20MS
这种方法非常的方便实用。 |