MT8888向TEA1062可以正确发送DTMF信号,TEA1062也成功地把DTMF驱动到电话线上了,但是拨号不成功,也无提示音

中流砥拄   2009-3-11 01:46 楼主
我照着经典电话电路搭了一个板,原理图见下面。
MT8888是DTMF收发器,TEA1062是带拨号接口的电话语音芯片。
MT8888的TONE引脚输出DTMF信号,连到TEA1062的DTMF输入端;
电话线的TIP、RING信号经过桥接后,提供给MT88888的IN-端。

我写了一个拨号程序:
① 先设置TEA1062为mute状态
② 设置MT8888,发出一个手机号码(11位)
③ 设置TEA1062退出mute状态
可以从声音上听出已经发出了DTMF信号,但是发完后就并没有拨号成功,也没有其他提示音,只有嘟嘟嘟的声音。

先是怀疑DTMF没真正发送成功,TEA1062接收到DTMF信号后会将它驱动到电话线上,所以可以利用MT8888将电话线上的这些DTMF解出来。
修改程序,证实了这点:MT8888从电话线上接收到的数据与发送给TEA1062的数据是一样的,这表示TEA1062已经成功地向电话线发出了DTMF信号。

令我奇怪的是,为什么就是拨号不成功?
① 难道现在的电话机不是使用DTMF拨号吗?我知道深圳电信的来电显示格式是FSK,是不是拨号也不用DTMF了?
② 会不会是信号的幅度不够,MT8888可以解码并不保证远端的交换机可以解码?
③ 是不是进行DTMF拨号时,需要增加某些特殊的格式?

回复评论 (10)

1. 我用的是MT8888的burst模式,时间是51ms波形、51ms停止
2. pin 1电压是4V左右
另外,我用手机拨通单板,然后在按手机的数字键,单板是可以解出DTMF信号的,这证明晶振是准确的;
通话过程中用手机按数字键时,我用万用表测pin1的交流电压是180mv左右;
但是单板发出DTMF信号时,我测pin1的交流电压是1.4v左右;
问:DTMF信号过大会否导致这问题?

点赞  2009-3-11 09:37
看不到附件
点赞  2009-3-11 10:28
搞定了,把MT8888的TONE用两个100K电阻分压,再经过1uF电容接到1062的PIN 11;
现在已经可以拨号了。
未改过的原理图在这:http://pe.images22.51img1.com/6000/thisway_diy/e03562ed88e084e7ac70df546898e7ce.jpg
希望对后来者有用
点赞  2009-3-11 10:58
我有几个关于电话电路设计上的问题想请教你一下。如有说错之处,请不要见笑。
我查看多许多有线智能电话的电路图,从中可以总结电话电路一般包括如下几个部分:
1、振铃及振铃检测电路   2、手柄通话电路  3、摘挂机检测电路  4、按键拨号电路  5、DTMF FSK信号检测、接收、译码电路    6、免提电路  7、来去电显示显示电路    8、电源及其他电路
在这些电路中有些功能是专用芯片就可以完成的,但是我不清楚那些功能是由纯硬件就可以实现而不需要CPU去控制,哪些功能需要由CPU控制也就是说需要编程啊?你能针对如上的电路说明吗?
还有:
从网上寻找的电话机的工作原理只是宏观的说明了一下,请问如果分别按照来电和去点的话如上电路是如何工作的(只要把顺序和大致过程介绍一下就行) 哦,我看的电路中用到的芯片是有HT9315D,KA2411,TEA1062可以结合他们说明一下。


十分感谢!
点赞  2009-8-15 21:03
辅导费
点赞  2009-11-1 20:19
本人刚刚接触电话拨号,有一些问题需要各位大侠指教...
请问MT8888不能直接驱动电话线吗?电话拨号不是只要是DTMF信号就可以了吗?
如果用MT8888直接拨号是不是有什么特殊要求?

点赞  2009-11-1 20:27
请教楼主mt8888的接收问题
以下是我的程序:可以发送,接收有中断,但是读不到数,老是读的是发送的数,请教高手,谢谢!!!/*
sbit WR=P2^6;
sbit CS=P2^7;
sbit RS=P2^4;//RS0
sbit RD=P2^5;//RD
*/
/////////////////////////////////////////写控制RD=1,CS=0,RS=1,WR=0
void writemcu(unsigned char dataa)
{
RD=1;CS=1;RS=0;WR=1;
_nop_();_nop_();_nop_();
CS=0;RS=1;
_nop_();
WR=0;
_nop_();
P2=(P2&0xf0)|dataa;
_nop_();_nop_();
WR=1;
_nop_();
CS=1;RS=0;
_nop_();
WR=0;
}
/////////////////////////////////////////读状态RD=0,CS=0,RS=1,WR=1
unsigned char  ReadStatus(void)
{unsigned char DATA1;
  RD=1;CS=1;RS=0;WR=1;
  _nop_();  _nop_();
CS=0;RS=1;
_nop_();  
  RD=0;
_nop_();_nop_();  
DATA1=P2&0x0f;
_nop_();
RD=1;
_nop_();
CS=1;RS=0;
_nop_();_nop_();
RD=0;
return(DATA1);
}
/////////////////////////////////////////////读数据RD=0,CS=0,RS=0,WR=1
unsigned char read_data()
{
unsigned char DATA2;
RD=1;CS=1;RS=1;WR=1;
   _nop_();  _nop_();
CS=0;RS=0;  
_nop_();
RD=0;
_nop_(); _nop_();
DATA2=P2&0x0f;
_nop_();
RD=1;
_nop_();
CS=1;RS=1;
_nop_(); _nop_();
RD=0;
//}
//else
//DATA2=0xff;
return(DATA2);
}
///////////////////////////////////////////初始化
void   ini_mt8888(void)
{
unsigned char i;
delay_1ms(250);
i=ReadStatus();
writemcu(0x00);
writemcu(0x00);
writemcu(0x08);
writemcu(0x00);
i=ReadStatus();
writemcu(0x0d);//CRA
writemcu(0x00);//CRB
delay_1ms(150);
}
/////////////////////////////////////////////////发送数据程序RD=0,CS=0,RS=0,WR=0
void send_data(unsigned char datab)
{
RD=1;CS=1;RS=1;WR=1;
_nop_();_nop_();_nop_();
CS=0;RS=0;
_nop_();
  WR=0;
_nop_();
P2=(P2&0xf0)|datab;
_nop_();_nop_();
WR=1;
_nop_();
CS=1;RS=1;
_nop_();
WR=0;
}
/////////////////////////////////////////////////////主程序,P3^7接IRQ
void main()
{ unsigned char h;
  sys_ini();
timer0_init();
EA=1;
ini_mt8888();
delay_1ms(250);
while(1)
{
if(get_key()==0xef)
send_data(0x01);
else;
if((P3&0x80)!=0);
else
{P7=read_data();
ReadStatus();}
}
//////////////////////////////////////////////////////////////////////
急死人,请求高手指点!
感谢!!!!!!!!!!!!!!
点赞  2010-1-2 10:44
  DTMF模式下,不能同时发送和接送双频信号,你的发送和接送是接在一起的吧?
  在发送信号时它会也接到接受端,所以你这时读的就是发送的数据。关键是接收与发送数据不能同时进行,要分时完成,还有建议做一个标记,用来表示工作状态,这样应该会好点!
点赞  2010-2-17 21:30
为什么P3^7接IRQ呢?用中断不是更好吗,接P3.2用中断试试吧
点赞  2010-3-14 09:33
你可以把图纸发来看看,以便整体分析,zzlcdq@163.com
点赞  2010-3-14 09:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复