第二次的TEA5767..还是没有声音..这是什么问题?
昨天焊的TE5767把一个电容焊下来了。。今天继续第2个。有了昨天的经验知道怎么把脚安全地焊出来。。
但是焊好之后。。接上单片机。。写上程序。。把输出端接到我的功放上。。一点声音都没有 这是什么问题。。。
难道程序问题??
#include"AT89X52.H"
#define uchar unsigned char
unsigned int iic_delay_time = 60;
sbit scl=P2^6;
sbit sda=P2^7;
sbit INT_0=P3^2;
sbit INT_1=P3^3;
sbit INT_2=P3^4;
sbit have=P0^0;
#define max_freq 108000
#define min_freq 87500
unsigned char radio_write_data; //要写入TEA5767的数据
unsigned char radio_read_data; //TEA5767读出的状态
unsigned int default_pll=0x2a73;//0x2a73; //默认存台的pll,95.3MHz 江苏交广
unsigned intpll;
unsigned long frequency;
//unsigned int max_pll=0x339b; //108MHz时的pll,
//unsigned int min_pll=0x9000; //70MHz时的pll`
// delay
void iic_delay(unsigned int m)
{
unsigned int n;
for(n=0;n<m;n++);
}
//启动I2C总线的函数,当scl为高电平时使sda产生一个负跳变
void iic_start()
{
sda=1;
scl=1;
iic_delay(iic_delay_time);
sda=0;
iic_delay(iic_delay_time);
scl=0;
iic_delay(iic_delay_time/2);
}
//终止I2C总线,当scl为高电平时使sda产生一个正跳变
void iic_stop()
{
sda=0;
scl=1;
iic_delay(iic_delay_time);
sda=1;
iic_delay(iic_delay_time);
}
//发送应答信号
void iic_ack()
{
sda=0;
scl=1;
scl=0;
sda=1;
}
//等待应答信号
bit waitack(void)
{
unsigned char errtime=255;//因故障接收方无ACK,超时值为25。
sda=1;
iic_delay(iic_delay_time);
while(sda)
{
errtime--;
if (!errtime)
{
iic_stop();
return 0;
}
}
scl=1;
iic_delay(iic_delay_time);
scl=0;
return 1;
}
//发送一个字节
void iic_write8bit(unsigned char input)
{
unsigned char temp;
for(temp=0;temp<8;temp++)
{
if((input<<temp)&0x80)
sda=1;
else
sda=0;
scl=1;
iic_delay(iic_delay_time);
scl=0;
}
}
//读一个字节
unsigned char iic_read8bit()
{
unsigned char temp,rbyte=0;
for(temp=0;temp<8;temp++)
{
scl=1;
iic_delay(iic_delay_time);
if(sda)
rbyte=(rbyte<<1)+1;
else
rbyte=rbyte<<1;
scl=0;
}
return(rbyte);
}
/********************************/
//由频率计算PLL
void get_pll(void)
{
unsigned char hlsi;
unsigned int twpll=0;
hlsi=radio_write_data&0x10;
if (hlsi)
pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768); //频率单位:k
else
pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768); //频率单位:k
}
//由PLL计算频率
void get_frequency(void)
{
unsigned char hlsi;
unsigned int npll=0;
npll=pll;
hlsi=radio_write_data&0x10;
if (hlsi)
frequency=(unsigned long)((float)(npll)*(float)8.192-225); //频率单位:KHz
else
frequency=(unsigned long)((float)(npll)*(float)8.192+225); //频率单位:KHz
}
//写5767
void radio_write(void)
{
unsigned char i;
iic_start();
iic_write8bit(0xc0); //TEA5767写地址
waitack();
for(i=0;i<5;i++)
{
iic_write8bit(radio_write_data);
waitack();
}
iic_stop();
}
//读TEA5767状态,并转换成频率
void radio_read(void)
{
unsigned char i;
unsigned char temp_l,temp_h;
pll=0;
iic_start();
iic_write8bit(0xc1); //TEA5767读地址
waitack();
for(i=0;i<5;i++)
{
radio_read_data=iic_read8bit();
iic_ack();
}
iic_stop();
temp_l=radio_read_data;
temp_h=radio_read_data;
temp_h&=0x3f;
pll=temp_h*256+temp_l;
get_frequency();
}
//手动设置频率,mode=1,+0.1MHz; mode=0:-0.1MHz ,不用考虑TEA5767用于搜台的相关位:SM,SUD
void search()
{
radio_read();
frequency+=100;
if(frequency>max_freq)
frequency=min_freq;
get_pll();
radio_write_data=pll/256;
radio_write_data=pll%256;
radio_write_data=0x20;
radio_write_data=0x11;
radio_write_data=0x00;
radio_write();
}
//自动搜台,频率增加搜台
void auto_searchup()
{
radio_read();
if(frequency>max_freq)
frequency=min_freq;
get_pll();
radio_write_data=0xa0;
radio_write_data=pll/256+0x40;
radio_write_data=pll%256;
radio_write_data=0x11;
radio_write_data=0x00;
radio_write();
radio_read();
}
//自动搜台,频率减小搜台
void auto_searchdown()
{
radio_read();
if(frequency<min_freq)
frequency=max_freq;
get_pll();
radio_write_data=0x20;
radio_write_data=pll/256+0x40;
radio_write_data=pll%256;
radio_write_data=0x11;
radio_write_data=0x00;
radio_write();
radio_read();
}
/**********************************************/
void delay(void)
{
unsigned char i,j;
for(i=20;i>0;i++)
for(j=248;j>0;j--);
}
//向上搜台
void key_process0()
{
delay();
if(INT_0==0)
{
auto_searchup();
}
}
//向下搜台
void key_process1()
{
delay();
if(INT_1==0)
{
auto_searchdown();
}
}
//手动搜台
key_process2()
{
delay();
if(INT_2==0)
{
search();
}
}
void main()
{
unsigned char radio_write_data={0x2d,0x56,0x20,0x11,0x00};
radio_write();
while(1)
{
radio_read();
if((radio_read_data&0x80)) //搜台成功标志
{
have=0;
}
if(INT_0==0)
{
key_process0();
}
if(INT_1==0)
{
key_process1();
}
/*************手动搜台*******************************************************************/
if(INT_2==0)
{
key_process2();
}
}
} 我做的那个默认字节值如下:
byte3=0x70; (SUD=0; SSL1=1; SSL0=1; HLSI=1; MS=0; MR=0; ML=0; SWP1=0;)
byte4=0x16; (SWP2=0; STBY=0; BL=0; XTAL=1; SMUTE=0; HCC=1; SNC=1; SI=0;)
byte5=0xc0; (PLLREF=1; DTC=1;)
zyyn123 发表于 2012-6-6 21:59 static/image/common/back.gif
我做的那个默认字节值如下:
byte3=0x70; (SUD=0; SSL1=1; SSL0=1; HLSI=1; MS=0; MR=0; ML=0; SWP1=0;)
by ...
你这个是写入TEA5767的数据? 是呀,没错,默认值。
zyyn123 发表于 2012-6-6 22:06 static/image/common/back.gif
是呀,没错,默认值。
但是我已经设置了频率默认为 88.8 为什么还是没声音的?? 你把第3,第4,第5字节改成我说的那样试一下 zyyn123 发表于 2012-6-6 22:11 static/image/common/back.gif
你把第3,第4,第5字节改成我说的那样试一下
你有QQ不?请教一下。。 就在这里说就行了,用QQ违规的(网站规定不能用QQ的) zyyn123 发表于 2012-6-6 22:34 static/image/common/back.gif
就在这里说就行了,用QQ违规的(网站规定不能用QQ的)
哦 原来这样啊。。那有没有程序是直接固定一个频率的?我想测试一下模块是不是坏的... 下面是在网上找的资料你自已试试吧。
写了程序进去 还是一点声音都没有 zyyn123 发表于 2012-6-6 23:00 static/image/common/back.gif
下面是在网上找的资料你自已试试吧。
写了程序进去 还是一点声音都没有 你先检查一下你的硬件电路是否有问题,我昨天发的那个程序原来试验过能用的。 zyyn123 发表于 2012-6-7 06:49 static/image/common/back.gif
你先检查一下你的硬件电路是否有问题,我昨天发的那个程序原来试验过能用的。 ...
我都纠结死了。。这块是第二块了。。现在的电压是 5.13V 会不会电压高了这点点烧了模块呢{:sad:} 你程序中的IIC延时是不是有点长了,你改短一点试下。用_nop_()来延时就行。 如下:
void iic_start()
{
SDA=1;
_nop_();
SCL=1;
_nop_();
SDA=0;
_nop_();
SCL=0;
_nop_();
}
//终止I2C总线,当scl为高电平时使sda产生一个正跳变
void iic_stop()
{
SCL=0;
_nop_();
SDA=0;
_nop_();
SCL=1;
_nop_();
SDA=1;
_nop_();
}
改成_nop_();无法编译。。
把原来的Delayus(4);改小成Delayus(1);
还是没声音。 刚才找到了我的那片TEA5767,用你的程序试了下,你的程序可以用呀,可以出声。看来你的硬件出了问题。
TEA5767引脚定义:
1、GND 2、ROUT 3、LOUT 4、MPX0(此脚不用接) 5、ANT
6、DATA 7、CLOCK 8、BUS_MODE(IIC时此脚接地)9、R/W(此脚不用接) 10、VCC
zyyn123 发表于 2012-6-7 15:21 static/image/common/back.gif
刚才找到了我的那片TEA5767,用你的程序试了下,你的程序可以用呀,可以出声。看来你的硬件出了问题。
TEA5 ...
管脚没错..惨了 可能模块又坏了
zyyn123 发表于 2012-6-7 15:21 static/image/common/back.gif
刚才找到了我的那片TEA5767,用你的程序试了下,你的程序可以用呀,可以出声。看来你的硬件出了问题。
TEA5 ...
今天发现我的电脑没接地。。有没有可能因为这样烧了模块呢??
我的单片机是用USB供电的。。下次焊的时候要不要烙铁都要接地? zyyn123 发表于 2012-6-7 15:21 static/image/common/back.gif
刚才找到了我的那片TEA5767,用你的程序试了下,你的程序可以用呀,可以出声。看来你的硬件出了问题。
TEA5 ...
能发个原理图吗157497934@qq.com cQl1997 发表于 2012-10-31 17:24 static/image/common/back.gif
能发个原理图吗
你在论坛里搜一下,好多呢。 zyyn123 发表于 2012-10-31 17:35 static/image/common/back.gif
你在论坛里搜一下,好多呢。
我找了些原理图 程序应该没问题,焊好后 就是没有声音 很郁闷啊 cQl1997 发表于 2012-10-31 18:52 static/image/common/back.gif
我找了些原理图 程序应该没问题,焊好后 就是没有声音 很郁闷啊
你看看你的接线是否正确
1、GND 2、ROUT 3、LOUT 4、MPX0(此脚不用接) 5、ANT
6、DATA 7、CLOCK 8、BUS_MODE(IIC时此脚接地)9、R/W(此脚不用接) 10、VCC
用的是啥单片机,再看看延时函数是不是时序对 zyyn123 发表于 2012-10-31 19:34 static/image/common/back.gif
你看看你的接线是否正确
1、GND 2、ROUT 3、LOUT 4、MPX0(此脚不用接) 5、ANT
用的是这个原理图 引脚没错啊 cQl1997 发表于 2012-10-31 20:14 static/image/common/back.gif
用的是这个原理图 引脚没错啊
其中3 4口直接接耳机接口可以吧
cQl1997 发表于 2012-10-31 20:14 static/image/common/back.gif
用的是这个原理图 引脚没错啊
找到1个资料,你参考一下。
cQl1997 发表于 2012-10-31 20:16 static/image/common/back.gif
其中3 4口直接接耳机接口可以吧
3 4口要加电容耦合接耳机 这是我的程序正常收听
#include <reg51.h>
#include <string.h>
#include <math.h>
#include <uart.h>
#include <i2c.h>
#define max_freq 108000
#define min_freq 87500
sbit KEY1=P3^2;
sbit KEY2=P3^3;
unsigned char radio_write_data={0x29,0xc2,0x20,0x11,0x00}; //要写入TEA5767的数据
//unsigned char radio_write_data={0x2a,0xb6,0x40,0x11,0x40}; //要写入TEA5767的数据
unsigned char radio_read_data; //TEA5767读出的状态
unsigned int default_pll=0x301d; //0x29f9; //默认存台的pll,95.8MHz
//unsigned int max_pll=0x339b; //108MHz时的pll,
//unsigned int min_pll=9000; //70MHz时的pll
unsigned long frequency;
unsigned int pll;
/*void delay(unsigned int time)
{
while(time--);
}*/
void delay1ms (unsigned int b)//1ms
{
for(b;b>0;b--)
{unsigned int i;
for(i=0;i<300;i++)
{;}
}
}
void radio_write(void)
{
unsigned char i;
iic_start();
iic_write8bit(0xc0); //TEA5767写地址
if(!iic_testack())
{
for(i=0;i<5;i++)
{
iic_write8bit(radio_write_data);
iic_ack();
}
}
iic_stop();
}
//由频率计算PLL
void get_pll(void)
{
unsigned char hlsi;
// unsigned int twpll=0;
hlsi=radio_write_data&0x10;//HLSI位
if (hlsi)
pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768); //频率单位:k
else
pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768); //频率单位:k
}
//由PLL计算频率
void get_frequency(void)
{
unsigned char hlsi;
unsigned int npll=0;
npll=pll;
hlsi=radio_write_data&0x10;
if (hlsi)
frequency=(unsigned long)((float)(npll)*(float)8.192-225); //频率单位:KHz
else
frequency=(unsigned long)((float)(npll)*(float)8.192+225); //频率单位:KHz
}
//读TEA5767状态,并转换成频率
void radio_read(void)
{
unsigned char i;
unsigned char temp_l,temp_h;
pll=0;
iic_start();
iic_write8bit(0xc1); //TEA5767读地址
if(!iic_testack())
{
for(i=0;i<5;i++)
{
radio_read_data=iic_read8bit();
iic_ack();
}
}
iic_stop();
temp_l=radio_read_data;
temp_h=radio_read_data;
temp_h&=0x3f;
pll=temp_h*256+temp_l;
get_frequency();
}
//手动设置频率,mode=1,+0.1MHz; mode=0:-0.1MHz ,不用考虑TEA5767用于搜台的相关位:SM,SUD
void search(bit mode)
{
radio_read();
if(mode)
{
frequency+=10;
if(frequency>max_freq)
frequency=min_freq;
}
else
{
frequency-=10;
if(frequency<min_freq)
frequency=max_freq;
}
get_pll();
radio_write_data=pll/256;
radio_write_data=pll%256;
radio_write_data=0x20;
radio_write_data=0x11;
radio_write_data=0x00;
radio_write();
}
//自动搜台,mode=1,频率增加搜台; mode=0:频率减小搜台,不过这个好像不能循环搜台
/*void auto_search(bit mode)
{
radio_read();
get_pll();
if(mode)
radio_write_data=0xa0;
else
radio_write_data=0x20;
radio_write_data=pll/256+0x40;
radio_write_data=pll%256;
radio_write_data=0x11;
radio_write_data=0x00;
radio_write();
radio_read();
while(!(radio_read_data&0x80)) //搜台成功标志
{
delay(1000);
radio_read();
//disp_freq(9,1);
PutNum(frequency);
}
} */
void main()
{
UART_Init();//串口初始化
UART_Send_Str("调频收音机\n");
radio_write();
while(1)
{
if(KEY1==0)
{
delay1ms(15); //延时15ms
if(KEY1==0)
while(KEY1==0);//等待按键释放
search(1);
radio_read();
UART_Send_Str("目前频率\n");
UART_Put_Num(frequency);
UART_Send_Str("\n");
}
if(KEY2==0)
{
delay1ms(15); //延时15ms
if(KEY2==0)
while(KEY2==0);//等待按键释放
search(0);
radio_read();
UART_Send_Str("目前频率\n");
UART_Put_Num(frequency);
UART_Send_Str("\n");
}
}
} zyyn123 发表于 2012-10-31 20:54 static/image/common/back.gif
3 4口要加电容耦合接耳机
你好,这个用多大的电容合适?
页:
[1]