rtben 发表于 2012-6-6 18:56:10

第二次的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();
}

}
}

zyyn123 发表于 2012-6-6 21:59:27

我做的那个默认字节值如下:
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;)

rtben 发表于 2012-6-6 22:03:13

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:18

是呀,没错,默认值。

rtben 发表于 2012-6-6 22:08:43

zyyn123 发表于 2012-6-6 22:06 static/image/common/back.gif
是呀,没错,默认值。

但是我已经设置了频率默认为 88.8 为什么还是没声音的??

zyyn123 发表于 2012-6-6 22:11:13

你把第3,第4,第5字节改成我说的那样试一下

rtben 发表于 2012-6-6 22:30:00

zyyn123 发表于 2012-6-6 22:11 static/image/common/back.gif
你把第3,第4,第5字节改成我说的那样试一下

你有QQ不?请教一下。。

zyyn123 发表于 2012-6-6 22:34:33

就在这里说就行了,用QQ违规的(网站规定不能用QQ的)

rtben 发表于 2012-6-6 22:46:03

zyyn123 发表于 2012-6-6 22:34 static/image/common/back.gif
就在这里说就行了,用QQ违规的(网站规定不能用QQ的)

哦 原来这样啊。。那有没有程序是直接固定一个频率的?我想测试一下模块是不是坏的...

zyyn123 发表于 2012-6-6 23:00:42

下面是在网上找的资料你自已试试吧。

rtben 发表于 2012-6-7 00:50:24

写了程序进去 还是一点声音都没有

rtben 发表于 2012-6-7 00:50:49

zyyn123 发表于 2012-6-6 23:00 static/image/common/back.gif
下面是在网上找的资料你自已试试吧。

写了程序进去 还是一点声音都没有

zyyn123 发表于 2012-6-7 06:49:52

你先检查一下你的硬件电路是否有问题,我昨天发的那个程序原来试验过能用的。

rtben 发表于 2012-6-7 08:44:07

zyyn123 发表于 2012-6-7 06:49 static/image/common/back.gif
你先检查一下你的硬件电路是否有问题,我昨天发的那个程序原来试验过能用的。 ...

我都纠结死了。。这块是第二块了。。现在的电压是 5.13V 会不会电压高了这点点烧了模块呢{:sad:}

zyyn123 发表于 2012-6-7 08:57:19

你程序中的IIC延时是不是有点长了,你改短一点试下。用_nop_()来延时就行。

zyyn123 发表于 2012-6-7 09:09:45

如下:
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_();
}

rtben 发表于 2012-6-7 10:34:22

改成_nop_();无法编译。。
把原来的Delayus(4);改小成Delayus(1);
还是没声音。

zyyn123 发表于 2012-6-7 15:21:43

刚才找到了我的那片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

rtben 发表于 2012-6-7 17:32:14

zyyn123 发表于 2012-6-7 15:21 static/image/common/back.gif
刚才找到了我的那片TEA5767,用你的程序试了下,你的程序可以用呀,可以出声。看来你的硬件出了问题。
TEA5 ...

管脚没错..惨了 可能模块又坏了

rtben 发表于 2012-6-7 20:11:02

zyyn123 发表于 2012-6-7 15:21 static/image/common/back.gif
刚才找到了我的那片TEA5767,用你的程序试了下,你的程序可以用呀,可以出声。看来你的硬件出了问题。
TEA5 ...

今天发现我的电脑没接地。。有没有可能因为这样烧了模块呢??
我的单片机是用USB供电的。。下次焊的时候要不要烙铁都要接地?

cQl1997 发表于 2012-10-31 17:24:14

zyyn123 发表于 2012-6-7 15:21 static/image/common/back.gif
刚才找到了我的那片TEA5767,用你的程序试了下,你的程序可以用呀,可以出声。看来你的硬件出了问题。
TEA5 ...

能发个原理图吗157497934@qq.com

zyyn123 发表于 2012-10-31 17:35:56

cQl1997 发表于 2012-10-31 17:24 static/image/common/back.gif
能发个原理图吗

你在论坛里搜一下,好多呢。

cQl1997 发表于 2012-10-31 18:52:18

zyyn123 发表于 2012-10-31 17:35 static/image/common/back.gif
你在论坛里搜一下,好多呢。

我找了些原理图 程序应该没问题,焊好后 就是没有声音 很郁闷啊

zyyn123 发表于 2012-10-31 19:34:29

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

s3c2440 发表于 2012-10-31 19:54:26

用的是啥单片机,再看看延时函数是不是时序对

cQl1997 发表于 2012-10-31 20:14:55

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:16:46

cQl1997 发表于 2012-10-31 20:14 static/image/common/back.gif
用的是这个原理图 引脚没错啊

其中3 4口直接接耳机接口可以吧

zyyn123 发表于 2012-10-31 20:50:50

cQl1997 发表于 2012-10-31 20:14 static/image/common/back.gif
用的是这个原理图 引脚没错啊

找到1个资料,你参考一下。

zyyn123 发表于 2012-10-31 20:54:45

cQl1997 发表于 2012-10-31 20:16 static/image/common/back.gif
其中3 4口直接接耳机接口可以吧

3 4口要加电容耦合接耳机

jiaxianglhh 发表于 2012-10-31 21:01:11

这是我的程序正常收听
#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");
    }
}
}

boxboxbox 发表于 2013-8-18 00:26:48

zyyn123 发表于 2012-10-31 20:54 static/image/common/back.gif
3 4口要加电容耦合接耳机

你好,这个用多大的电容合适?
页: [1]
查看完整版本: 第二次的TEA5767..还是没有声音..这是什么问题?