MT8880怎么接手机啊?接语音输出端??我用示波器测了,按键时波形没什么变化,不知道是不是示
路过的朋友可以提些意见,或者讨论一下!!!!MT8880怎么接手机啊?接语音输出端??我用示波器测了,按键时波形没什么变化,不知道是不是示波器问题。
MIC1P
麦克风 1 正极
MIC1N
麦克风 1 负极
SPK1P
受话器 1 正极
SPK1N
受话器 1 负极
个人认为DTMP-INPUT应该接SPKIP(语音端输入,翻译为受话器,英文为RECEIVER,翻译后为接收器、听筒)。
电路如下:mt8880提供
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_436825.JPG
(原文件名:dtmf.JPG)
cs接地了!!!
附上资料提供的:
http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_437071.JPG
(原文件名:dtmf1.JPG)
程序如下:dtmf接收中断模式
#include "port128.h"
#include <avr/io.h>
#include "avrlibdefs.h"
#include <avr/interrupt.h>
//PORTA0-PORTA3:D0-D3
//PORTA4:RW
//PORTA5:RS0
#defineDTMFPORTA
unsigned chardata;
unsigned char dt_number=0;
unsigned char r_buf;
/* MT8880芯片初始化子函数 */
void MT8880_initialize(void)
{
DTMF=0x3f;/* 读SR */
DTMF=0x20;/* CRA=0000 */
DTMF=0x20;/* CRA=0000 */
DTMF=0x28;/* CRA=1000 */
DTMF=0x20; /* CRB=0000 */
}
/* 接收初始化子函数 */
void MT8880_rece_init(void)
{
cli();
cbi(DDRD,1);
sbi(PORTD,1);
EIMSK=0xfd;//屏蔽int11111 1101
EICRA=0xfe;//int1下降沿沿触发1111 1110
EIFR |= 0x02;//清零intf1
EIMSK|= 0x02;//使能int1
sei();
}
/* 接收中断服务程序 */
SIGNAL(SIG_INTERRUPT1)
{
cli();
DTMF=0x3f;/* 读SR */
DTMF=0x1f;/* 读RDR */
r_buf=DTMF&0x0f;/* 保存 */
sei();
}
/*
英文mt8880资料:
点击此处下载 ourdev_436852.pdf(文件大小:318K) (原文件名:mt8880.pdf)
中文mt8880资料:
点击此处下载 ourdev_436839.pdf(文件大小:181K) (原文件名:mt8880-1.pdf)
没听880论文集:
点击此处下载 ourdev_436938.pdf(文件大小:9.52M) (原文件名:dtmf论文集.pdf) 1、找出点问题,中断一没打开。
2、clk通过一个电容接了晶振的一端。我用的片子是mega128,时序可能和51的不同。clk引脚接了porta。7,并加了延时。
问题还是多多。电话通后,按键没反应。不能进中断。(软件模拟可以的)
#include "port128.h"
#include <avr/io.h>
#include "avrlibdefs.h"
#include <avr/interrupt.h>
#include "dtmf.h"
#include "delay.h"
//PORTA0-PORTA3:D0-D3
//PORTA4:RW
//PORTA5:RS0
//PORTA6:CLK ++++++ avrµ¥Æ¬»úºÍ51µ¥Æ¬»úʱÐòÎÊÌ⣿¶ÔÓÚ51ͨ¹ýÒ»¸ö30pµÄµç×è½Ó¾§Õñ¹Ü½Å¡£¡£¡£¡£¡£¡£
#defineDTMFPORTA
unsigned chardata;
unsigned char dt_number=0;
unsigned char r_buf;
/* MT8880оƬ³õʼ»¯×Óº¯Êý */
void MT8880_initialize(void)
{
DTMF=0x3f;/* ¶ÁSR */
DTMF |= 0x40; //CS=0;
delay_1us();
DTMF=0x20;/* CRA=0000 */
DTMF &= 0xdf; //CS=1;
DTMF |= 0x40; //CS=0;
delay_1us();
DTMF=0x20;/* CRA=0000 */
DTMF &= 0xdf; //CS=1;
DTMF |= 0x40; //CS=0;
delay_1us();
DTMF=0x28;/* CRA=1000 */
DTMF &= 0xdf; //CS=1;
DTMF |= 0x40; //CS=0;
delay_1us();
DTMF=0x20; /* CRB=0000 */
DTMF &= 0xdf; //CS=1;
}
/* ½ÓÊÕ³õʼ»¯×Óº¯Êý */
void MT8880_rece_init(void)
{
cli();
cbi(DDRD,1);
sbi(PORTD,1);
EIMSK &= 0xfd;//ÆÁ±Îint11111 1101
EICRA = (EICRA|0x08)&0xfb;//int1ϽµÑØÑØ´¥·¢ ****10**
EIFR |= 0x02;//ÇåÁãintf1
EIMSK|= 0x02;//ʹÄÜint1
sei();
}
/* ½ÓÊÕÖжϷþÎñ³ÌÐò */
SIGNAL(SIG_INTERRUPT1)
{
cli();
DTMF |= 0x40; //CS=0;
delay_1us();
DTMF=0x3f;/* ¶ÁSR */
DTMF &= 0xdf; //CS=1;
DTMF |= 0x40; //CS=0;
delay_1us();
DTMF=0x1f;/* ¶ÁRDR */
DTMF &= 0xdf; //CS=1;
r_buf=DTMF&0x0f;/* ±£´æ */
sei();
}
试验中,请路过的高手多多指教。 LZ是打算把固定电话当成手机用嘛?利用老N或者老M的退休手机,又想避免家里人不会用手机。 不是的!想给手机加上自动语音提示的功能。就像拨打10086一样!!! 现在基本上确定dtmf_in就是接语音的输出端。
今天空闲时,又改了改程序严格按照资料上的来的。只是资料上的延时不是很确定说得不是很清楚。不知道怎么办。IRQ端的中断拨号时总打不开。
措施一:改查询方式,状态寄存器的接受位竟然一直是1。
措施二:自己写数据寄存器,然后在自己读。用jtag调试。一点反应没有。
现在想确定mt8880是不是坏的!!!!
各位大侠有没有什么高招啊!资料上有个测试的,看不太懂!!! 帖子沉了,顶一顶!!!! 帖子沉了,顶一顶!!!! 手机声音比较弱吧,可那检不出来。
页:
[1]