矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1162|回复: 6

做过si4732的代码大神请进

[复制链接]
     
发表于 2024-8-17 18:48:35 来自手机 | 显示全部楼层 |阅读模式
据说4732和4735代码一样,我做了一个4732,用的4735的代码,其他能正常,特别喜欢它的自动搜索功能,非常快,但是根据手册上4732读取当前频道频率的命令,读取出来的频率数据和实际频道频率不相符,不知道是哪里问题,而写入频率却都能被正常调谐正确,难道是4732和4735还是有区别的?
     
发表于 2024-8-17 19:46:09 来自手机 | 显示全部楼层
肯定是读的函数有问题
回复 支持 反对

使用道具 举报

     
发表于 2024-8-17 20:44:06 | 显示全部楼层
没区别
除了4732 ssb需要打补丁
回复 支持 反对

使用道具 举报

     
发表于 2025-3-17 12:43:27 | 显示全部楼层
搜索完你加个长小小的延时再读
回复 支持 反对

使用道具 举报

     
发表于 2025-3-17 14:00:37 | 显示全部楼层
void OpenIIC(void)     //IIC开始
{
        SDA=1;
        SCL=1;
        IIC_delayms();
        SDA=0;
        IIC_delayms();
        SCL=0;
}
//==========================================================
void CloseIIC(void)   //IIC停止
{
        SDA=0;
        SCL=1;
        IIC_delayms();       
        SDA=1;
        SCL=1;
        IIC_delayms();       
}
//==========================================================
void IIC_Wait_Ack(void)   //等Ack信号
{
        Uchar ucErrTime=200;
        SDA=1;
        IIC_delayms();
        SCL=1;
        IIC_delayms();
        /*ACK信号为0,上面将SDA置高后如果一直为高电平就延时等到器件ACK拉低即退出-完成ACK接收*/
        while(SDA && ucErrTime-- ) {}
        SCL=0;
}
//==========================================================
void IIC_Ack(void)    //发送应答Ack信号
{
        SDA=0;
        SCL=0;
        IIC_delayms();
        SCL=1;
        IIC_delayms();
        SCL=0;       
}
void IIC_NAck(void)  //发送非应答Ack信号
{
        SDA=1;
        SCL=0;
        IIC_delayms();
        SCL=1;
        IIC_delayms();
        SCL=0;
}
//==========================================================
void IICsendByte(Uchar txd)   //IIC写一个字节
{
        Uchar t;
        for(t=0;t<8;t++)
        {
                if(txd & 0x80)    //
                {  
                        SDA=1;
                }
                else
                {
                        SDA=0;
                }
                txd<<=1;
                IIC_delayms();
                SCL=1;              //1产生一个上升沿(因为平时时钟线为低电平,SDA输出后SCL产生一个上升沿)
                IIC_delayms();
                SCL=0;              //0将时钟置回在低电平0位
                IIC_delayms();
        }
}
//==========================================================
Uchar IICReadByteNoAck(void)  //IIC读一个字节(无ACK)
{
        Uchar i,receive=0;
        SDA=1;
        for(i=0;i<8;i++)
        {
                SCL=0;
                IIC_delayms();
                SCL=1;
                receive<<=1;
                if(SDA == 1)
                {
                        receive++;
                }
                IIC_delayms();
        }
        SCL=0;
        return receive;
}
//==========================================================
Uchar IICReadByte(Uchar ack)  //IIC读一个字节
{
        Uchar i,receive=0;
        SDA=1;
        for(i=0;i<8;i++)
        {
                SCL=0;
                IIC_delayms();
                SCL=1;
                receive<<=1;
                if(SDA == 1)
                {
                        receive++;
                }
                IIC_delayms();
        }
        SCL=0;
        if(ack)
        {
                IIC_Ack();
        }
        else
        {
                IIC_NAck();
        }
        return receive;
}
//==========================================================
void delayms(Uint x)
{
        Uint i,j;
        for(i=x;i>0;i--)
          for(j=113;j>0;j--);
}
//==========================================================
回复 支持 反对

使用道具 举报

     
发表于 2025-3-17 14:01:45 | 显示全部楼层
//===========================================================================
void Si7432_POWER_UP(void)   //上电指令;CTS无中断、GPIO2失效、正常启动、用外晶振、FM模式;模拟音频输出
{
        OpenIIC();
        IICsendByte(RDA_WRITE);    //发送芯片地址 方向为写0x22
        IIC_Wait_Ack();
        IICsendByte(POWER_UP);     //发送寄存器地址
        IIC_Wait_Ack();
        IICsendByte(0x10);         //CTS无中断(7)、GPIO2失效(6)、正常启动(8)、用外晶振(4)、FM模式(3~0)
        IIC_Wait_Ack();
        IICsendByte(0x05);         //模拟音频输出
        IIC_Wait_Ack();
        CloseIIC();
}
//===========================================================================
void Si7432_FM_TUNE_FREQ(void)
{
        OpenIIC();
        IICsendByte(RDA_WRITE);    //发送芯片地址 方向为写0x22
        IIC_Wait_Ack();
        IICsendByte(FM_TUNE_FREQ); //发送寄存器地址
        IIC_Wait_Ack();
        IICsendByte(0x00);         //ARG1=0x00 永远为0
        IIC_Wait_Ack();
        IICsendByte(0x23);         //ARG2=0x23 90.1=9010=0x2332->0x23+0x32
        IIC_Wait_Ack();
        IICsendByte(0x32);         //ARG3=0x32
        IIC_Wait_Ack();
        IICsendByte(0x05);         //ARG4=0x00 将天线调谐电容设为自动
        IIC_Wait_Ack();
        CloseIIC();
}
//===========================================================================
void Si7432_FM_Freq_Set(Uint freq)    //设置频率
{
        Uchar freqH,freqL;          //将频率拆分为高低字节
        freqH = freq>>8;
        freqL = freq;
        OpenIIC();
        IICsendByte(RDA_WRITE);    //发送芯片地址 方向为写0x22
        IIC_Wait_Ack();
        IICsendByte(FM_TUNE_FREQ); //发送寄存器地址
        IIC_Wait_Ack();
        IICsendByte(0x00);         //ARG1=0x00 永远为0
        IIC_Wait_Ack();
        IICsendByte(freqH);         //ARG2=0x23 90.1=9010=0x2332->0x23+0x32
        IIC_Wait_Ack();
        IICsendByte(freqL);         //ARG3=0x32
        IIC_Wait_Ack();
        IICsendByte(0x05);         //ARG4=0x00 将天线调谐电容设为自动
        IIC_Wait_Ack();
        CloseIIC();
}
//===========================================================================
void Si4732_FM_Seek_Up(void)           //向上搜台
{
  OpenIIC();
        IICsendByte(RDA_WRITE);    //发送芯片地址 方向为写0x22
        IIC_Wait_Ack();
        IICsendByte(FM_SEEK_START); //发送寄存器地址
        IIC_Wait_Ack();
        IICsendByte(0x0C);         //ARG1=0x0C  7:4=0000,SEEKUP=1向上、SEEKUP=1向下[3],WRAP=1启动,1:0=00
        IIC_Wait_Ack();
        CloseIIC();
}
//===========================================================================
void Si4732_FM_Seek_Down(void)         //向下搜台
{
  OpenIIC();
  IICsendByte(RDA_WRITE);    //发送芯片地址 方向为写0x22
  IIC_Wait_Ack();
  IICsendByte(FM_SEEK_START); //发送寄存器地址
  IIC_Wait_Ack();
  IICsendByte(0x04);         //ARG1=0x0C  7:4=0000,SEEKUP=1向上、SEEKUP=1向下[3],WRAP=1启动,1:0=00
  IIC_Wait_Ack();
  CloseIIC();
}
//===========================================================================
回复 支持 反对

使用道具 举报

     
发表于 2025-3-19 13:51:35 来自手机 | 显示全部楼层
用过得劲的si芯片收音机音质差,比90年代东芝芯片的音质差太多了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 01:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表