搜索
bottom↓
回复: 24

用RDA1846自制对讲机,遇到困难,求指教

[复制链接]

出0入0汤圆

发表于 2012-11-10 13:21:51 | 显示全部楼层 |阅读模式
      前两天从淘宝买了两片RDA1846的片子,这片子内部集成了对讲机一些外围电路,因此该芯片扩展一片单片机再加上RF放大电路就是一部对讲机了。基于电路的大量讲话,本人想尝试用该芯片自己制作一个对讲机。
    我选择使用MSP430单片机做主控,与RDA芯片采用三线SPI通信协议。目前用热转印做了个小板,把RDA1846的所有引脚全部引出,方便后面调试用。目前单片机跟RDA芯片不知是否能够成功写入数据,RDA芯片内部有大量的寄存器需要单片机去进行配置。RDA1846芯片网上资料比较少,数据手册也只有英文的,好不容易找了个编程指南,也是英文的。参照编程指南上三线SPI的读写时序图,写了写寄存器函数和读寄存器函数。为了验证这俩函数是不是能成功写入输入,因此先对某寄存器写数据,然后读出来,看看写进去的和读出来的是不是一样。目前的问题是,无聊我怎么写寄存器数据,堵回来的数据永远都是一样一样的,都是0x308c。我在后面贴上读写时序图和我的源码,求论坛的高手们指点一下。真心期待有高手指点下小弟,不胜感激了。

下图为热转印的RDA1846扩展板,实在太小的片子,好多次才搞定。真心想做出来,半途而废可惜。


下图为msp430板,今年电子设计大赛组委会发的,launch pad 放着可惜,用上了


下图为调试场景,用了51板子上的usb转串口,给上位机发数据



读数据时序图如下:  


读函数如下:
u16 read_byte(u8 addr)
{
u8 flag_write;
u16 dat=0;
P1DIR |=BIT6;//SDIO设置为输出模式
senb_0;//
sclk_0;
_delay_cycles(10);
sdio_1;
_delay_cycles(10);
sclk_1;
_delay_cycles(10);
sclk_0;
addr<<=1;
for(flag_write=0;flag_write<7;flag_write++)
{
  if((addr&0x80)==1)
   sdio_1;
  else
   sdio_0;
  _delay_cycles(10);
  sclk_1;
  _delay_cycles(10);
  sclk_0;
  addr<<=1;
}
_delay_cycles(10);
P1DIR &=~BIT6;//SDIO设置为输入模式
P1REN |=BIT6;//上拉电阻接入
_delay_cycles(10);
for(flag_write=0;flag_write<16;flag_write++)
{
  sclk_1;
  _delay_cycles(10);
  if(P1IN&0X40)//为1
   dat |=0x01;
  else
   dat &=0xfffe;
  dat<<=1;
  sclk_0;
  _delay_cycles(10);
}
senb_1;
return dat;
}

写时序如下:


写函数如下:
void write_byte(u8 addr,u16 dat)
{
u8 flag_write;
P1DIR |=BIT6;//SDIO设置为输出模式
senb_0;
sclk_0;
_delay_cycles(10);
sdio_0;
_delay_cycles(10);
sclk_1;
_delay_cycles(10);
sclk_0;
addr<<=1;
for(flag_write=0;flag_write<7;flag_write++)
{
  if((addr&0x80)==1)
   sdio_1;
  else
   sdio_0;
  _delay_cycles(10);
  sclk_1;
  _delay_cycles(10);
  sclk_0;
  addr<<=1;
}
for(flag_write=0;flag_write<16;flag_write++)
{
  if((dat&0x80)==1)
   sdio_1;
  else
   sdio_0;
  _delay_cycles(10);
  sclk_1;
  _delay_cycles(10);
  sclk_0;
  dat<<=1;
}
_delay_cycles(10);
senb_1;
}











用MSP430单片机与RDA芯片采用三线SPI通信,目前通信貌似有点问题。单片机读取RDA芯片的寄存器,无论读取哪个寄存器,返回数据均为0x308c,我给RDA用的是13M有源晶振。该芯片资料网上甚少,还希望懂行的老师多多指点。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-11-10 13:32:12 | 显示全部楼层
楼主的示波器貌似不错!

出0入0汤圆

发表于 2012-11-10 13:47:14 | 显示全部楼层
2楼坏人,歪楼来了。。。。

我来关注一下对讲机

出0入0汤圆

发表于 2012-11-10 14:06:17 | 显示全部楼层
RDA作为手机芯片的提供商,他的芯片资料在外面流通当然会很少,就像MTK,展讯的资料,MTK还有BT,WiFi,GPS,FM四合一的芯片,价格很便宜,但是几乎没有资料,所以自己操作比较麻烦,当然如果用module,个人还是可以焊接玩起来的,如果是COB,BGA的封装个人实在难以搞定

出0入0汤圆

发表于 2012-11-10 17:20:15 | 显示全部楼层
请问你对RDA1846的应用熟悉吗?如果熟悉那我们有合作的机会,我想买一套RDA1846外挂MCU的软件--单接收  15989586768

出0入0汤圆

发表于 2012-11-24 15:17:12 | 显示全部楼层
/***************************************************************************/



unsigned char rda1846TX[3] @0x60;          //发射频率
unsigned char rda1846RX[3] @0X63;          //接收频率
unsigned char rdaCTCSSTX[2] @0X66;         //发射模拟哑音
unsigned int  rdaCTCSSRX @0X68;            //接收模拟哑音
unsigned char rdaDTCTX[3] @0X6A ;          //发射数字哑音
unsigned int  rdaDTCRX @0X6D;              //接收数字哑音
unsigned char rda1846r30r @0x6f;           //接收专用寄存器
unsigned char rda1846r58r @0x70;            //接收CTCSS(rda1846r58r=0x03)CDCSS(rda1846r58r=0x00)
unsigned char rda1846r45r @0x71;            //接收CTCSS(rda1846r45r=0x85)CDCSS(rda1846r58r=0x86)
unsigned char rda1846r45t @0x72;            //发射亚音控制寄存器
unsigned char rda1846rt05lt @0x73;           //特殊频率发射专用寄存器
unsigned char rda1846rt05ht @0x74;           //特殊频率发射专用寄存器
unsigned char rda1846rt64lt @0x75;           //特殊频率发射专用寄存器
unsigned char txpram @0x76;//发射功率调整寄存器
unsigned char BZRAM @0x77;//接收步长寄存器

unsigned char V8RAM1;//收音机专用寄存器;

//unsigned char rda1846r05t ;           //发射控制寄存器

//unsigned char rda1846r64t[2] @0x6f;         //发射控制寄存器


/***************************************************************************/
#define RDASQ        _pb4
#define RDA1846IO    _pa3                                                       
#define RDA1846CLK   _pb6
#define RDA1846SEN   _pb7
#define RDA1846IOC   _13_3

//#define RDA1846PDN   _pa2
/***************************************************************************/       

/*
void Delays4ms(unsigned char number)                        //延时4MS程序
{
        unsigned char temp,temp1;
        for(;number!=0;number--)        //循环
        {
                for(temp=80;temp!=0;temp--)                //空循环
                {
                for(temp1=10;temp1!=0;temp1--)
                {
                }
                }
        }
}
/*
unsigned int Readrda1846(unsigned char rdarom,unsigned char a,unsigned char b) //读出RDA寄存器程序
{
unsigned  int rdaRead;
unsigned char i;
RDA1846SEN=1;
RDA1846IOC=0;
RDA1846CLK=0;
RDA1846SEN=0;
rdarom|=0x80;
for(i=8;i!=0;i--)
        {
        if (rdarom & 0x80)
        {
                RDA1846IO=1;
                        }
                else
                    {
                RDA1846IO=0;
                        }
                _nop();
                RDA1846CLK=1;
                _nop();
                RDA1846CLK=0;
                rdarom = rdarom<<1;
                }
for(i=8;i!=0;i--)
   {
    if (a & 0x80)
        {
                RDA1846IO=1;
                        }
                else
                   {
                RDA1846IO=0;
                        }
                _nop();
                RDA1846CLK=1;
                _nop();
                RDA1846CLK=0;
                a = a <<1 ;
                }
        for(i=8;i!=0;i--)
        {
        if (b& 0x80)
           {
                   RDA1846IO=1;
                        }
          else {
                    RDA1846IO=0;
                        }
                        _nop();
                RDA1846CLK=1;
                _nop();
                RDA1846CLK=0;
                b = b<<1;
                }   
                RDA1846IOC=1;
                RDA1846CLK=1;
                _nop();
                RDA1846CLK=0;
     for(i=16;i!=0;i--)
      {
     rdaRead =rdaRead<< 1;
           RDA1846CLK=1;
           _nop();
      if (RDA1846IO)
         {
      rdaRead|= 0x1;
                 }
                RDA1846CLK=0;
                }
                RDA1846IOC=0;
    RDA1846SEN=1;
    RDA1846IO=0;
    return rdaRead;
}       
*/
void Writerda1846(unsigned char rdarom,unsigned char a,unsigned char b)
{
unsigned char i;
RDA1846SEN=1;
RDA1846IOC=0;
RDA1846CLK=0;
RDA1846SEN=0;
for(i=8;i!=0;i--)
        {
        if (rdarom & 0x80)
        {
                RDA1846IO=1;
                        }
                else
                    {
                RDA1846IO=0;
                        }
        _nop();
                RDA1846CLK=1;
                _nop();
                RDA1846CLK=0;
                rdarom = rdarom<<1;
                }
for(i=8;i!=0;i--)
   {
    if (a & 0x80)
        {
                RDA1846IO=1;
                        }
                else
                   {
                RDA1846IO=0;
                        }
                _nop();
                RDA1846CLK=1;
                _nop();
                RDA1846CLK=0;
                a = a <<1 ;
                }
        for(i=8;i!=0;i--)
        {
        if (b& 0x80)
           {
                   RDA1846IO=1;
                        }
          else {
                    RDA1846IO=0;
                        }
                _nop();
                RDA1846CLK=1;
                _nop();
                RDA1846CLK=0;
                b = b<<1;
                }   
                RDA1846SEN=1;
                RDA1846IO=0;
}       
/*25KHZ初始化RDA程序*/
void RDA1846(void)
{
        _clrwdt();//清除看门狗
Writerda1846(0x30,0x00,0x01);
Writerda1846(0x30,0x00,0x04);
//Writerda1846(0x04,0x0f,0xd1);//13M或12.8M
Writerda1846(0x04,0x0f,0xd0);//26M或25.6M
Writerda1846(0x08,0x02,0xA0);
Writerda1846(0x09,0x03,0xAC);
//Writerda1846(0x08,0x42,0xA0);
//Writerda1846(0x09,0x03,0x2C);
Writerda1846(0x0B,0x1A,0x10);
Writerda1846(0x0F,0x00,0x24);//400m=0X0024;200m=0X00A4;100m=0X00E4;
Writerda1846(0x11,0x3E,0x37);//立信科技提供参考增加
Writerda1846(0x2B,0x32,0xc8);//13M或26M
//Writerda1846(0x2B,0x32,0x00);//12.8M或25.6M
Writerda1846(0x2C,0x19,0x64);//13M或26M
//Writerda1846(0x2C,0x19,0x00);//12.8M或25.6M
Writerda1846(0x32,0x62,0x7C);
//Writerda1846(0x32,0x62,0xBC);//VHF
Writerda1846(0x33,0x0A,0xF2);
//Writerda1846(0x41,r[1],r[0]);//声控开启
//Writerda1846(0x42,r[3],r[2]);//声控关闭
Writerda1846(0x47,0x2C,0x2F);
Writerda1846(0x4E,0x29,0x3A);
Writerda1846(0x54,0x1D,0x4C);
Writerda1846(0x56,0x06,0x52);
Writerda1846(0x6E,0x06,0x2D);
Writerda1846(0x70,0x10,0x29);
Writerda1846(0x7F,0x00,0x01);
Writerda1846(0x05,0x00,0x1F);
Writerda1846(0x7F,0x00,0x00);
Writerda1846(0x30,0x30,0xA4);
Writerda1846(0x30,0x30,0xA6);
_clrwdt();//清除看门狗
Delays4ms(26);//延时100MS
Writerda1846(0x30,0x30,0x06);
_clrwdt();//清除看门狗
Delays4ms(26);//延时100MS
}



void RDA1846RX(unsigned char rama)
{
unsigned char SQRAM;
SQRAM=BZRAM-0x18;
_clrwdt();//清除看门狗
Writerda1846(0x30,0x30,0x06);//关闭收发
Delays4ms(3);
Writerda1846(0x05,0x07,0x63);//
Writerda1846(0x64,0x70,0x3A);//
Writerda1846(0x29,0x00,rda1846RX[2]);//设定接收频率
Writerda1846(0x2A,rda1846RX[1],rda1846RX[0]);//设定接收频率
Writerda1846(0x1F,0x55,0x01);//设定GPIO口
Writerda1846(0x44,0x00,0xFE);//AF输出大小调整
Writerda1846(0x48,0x00,BZRAM);//设定开启SQ值
Writerda1846(0x49,0x00,SQRAM);//设定关闭SQ值= 开启SQ值-0x18
Writerda1846(0x4A,0X17,0X40);//=0x2268或0x1740
Writerda1846(0x58,rda1846r58r,0x00);//CDCSS 0x0000  CTCSS时Writerda1846(0x58,0x03,0x00) CTCSS(rda1846r58r=0x03)CDCSS(rda1846r58r=0x00)
Writerda1846(0x45,0x0A,rda1846r45r);//CDCSS 0x0a86  CTCSS时Writerda1846(0x45,0x0A,0x85) CTCSS(rda1846r45r=0x85)CDCSS(rda1846r58r=0x86)
//Writerda1846(0x58,0X03,0x00);//CDCSS 0x0000  CTCSS时Writerda1846(0x58,0x03,0x00) CTCSS(rda1846r58r=0x03)CDCSS(rda1846r58r=0x00)
//Writerda1846(0x45,0x0A,0X85);//CDCSS 0x0a86  CTCSS时Writerda1846(0x45,0x0A,0x85) CTCSS(rda1846r45r=0x85)CDCSS(rda1846r58r=0x86)
Writerda1846(0x30,0x30,0x06);//宽带模式 窄带时Writerda1846(0x30,0x00,0x06)
Delays4ms(6);
Writerda1846(0x30,0x30,rama);//宽带模式=0x302e时为信号到达SQ值时AF才能信号输出否则为无信号输出
                             // 窄带时Writerda1846(0x30,0x00,0x2E)
                             //宽带模式=OX3026时为一直有信号输出
                             //宽带模式=0X30A6时为静音模式
}
void RDA1846TX(void)
{
if(V8RAM1==1)//收音机是否在开启状态
{       
unsigned char ram[2];
unsigned char *p;
ram[0]=0x82;//0X2H=0x8280时为休眠模式
ram[1]=0x80;
p=ram;
WriteRDA58XX(p,0x02,2);
//txpram=0x3f;
V8RAM1=0;//清除收音机状态标志
Delays4ms(5);
}
_clrwdt();//清除看门狗
Writerda1846(0x30,0x30,0x06);//关闭收发
Delays4ms(3);
Writerda1846(0x05,rda1846rt05ht,rda1846rt05lt);
Writerda1846(0x64,0x70,rda1846rt64lt);
Writerda1846(0x29,0x00,rda1846TX[2]);//设定发射频率
Writerda1846(0x2A,rda1846TX[1],rda1846TX[0]);//设定发射频率
Writerda1846(0x0A,0x04,txpram);//tx功率电压调整(最大=0x043f,最小=0x0400)
Writerda1846(0x1F,0x55,0x01);//设定GPIO口
Writerda1846(0x43,0x12,0x0F);//设定发射频偏及亚音幅度大小[12:6]调整话放亚音幅度[5:0]调整亚音幅度
Writerda1846(0x4A,rdaCTCSSTX[0],rdaCTCSSTX[1]);//设定发射亚音频  4aH[15:0](ctcss_sentreg)=0.0974*(2^16) = 6383   
//数字亚音时==0X2268;
Writerda1846(0x4B,0x00,rdaDTCTX[0]);//设定发射数字亚音频
Writerda1846(0x4C,rdaDTCTX[1],rdaDTCTX[2]);//设定发射数字亚音频
Writerda1846(0x45,0x0A,rda1846r45t);//设定亚音频控制寄存器(无亚音为0x80;模拟亚音0x81,数字0x82)
Writerda1846(0x30,0x30,0x06);//宽带模式 窄带时Writerda1846(0x30,0x00,0x06)
Delays4ms(6);
Writerda1846(0x30,0x30,0x46);//带VOX时宽带模式 窄带时Writerda1846(0x30,0x00,0x56)                       
        }
这个曾经用过通过测试的

出25入12汤圆

发表于 2012-11-24 16:09:00 | 显示全部楼层
我用 宝峰 UV-3R 里面貌似就是rda芯片的 可惜cpu字磨掉了,要不楼主直接就能当开发板了

出0入0汤圆

发表于 2012-11-24 16:35:43 | 显示全部楼层
猛顶7楼!

出0入0汤圆

 楼主| 发表于 2012-11-26 12:04:46 | 显示全部楼层
chenerbox2 发表于 2012-11-24 16:09
我用 宝峰 UV-3R 里面貌似就是rda芯片的 可惜cpu字磨掉了,要不楼主直接就能当开发板了 ...

哈哈,确实可以当开发板了。现在能进行简单收发了。目前还在研究滤波电路。

出0入0汤圆

 楼主| 发表于 2012-11-26 12:05:56 | 显示全部楼层
lwb807 发表于 2012-11-24 15:17
/***************************************************************************/

非常感谢,目前你帖的程序段,应该是能从百度搜索到的最优价值的资料了

出0入0汤圆

 楼主| 发表于 2012-11-27 20:46:56 | 显示全部楼层
lwb807 发表于 2012-11-24 15:17
/***************************************************************************/

我的扣扣号码:252849232

出0入0汤圆

发表于 2012-12-6 17:09:45 | 显示全部楼层
gc56198 发表于 2012-11-10 14:06
RDA作为手机芯片的提供商,他的芯片资料在外面流通当然会很少,就像MTK,展讯的资料,MTK还有BT,WiFi,GPS ...

请问楼主,BK4811做对讲机怎么样?

出0入0汤圆

发表于 2012-12-6 17:18:35 | 显示全部楼层
lwb807 发表于 2012-11-24 15:17
/***************************************************************************/

顶楼住,好人!!!

出0入0汤圆

发表于 2013-1-29 09:21:21 | 显示全部楼层
记号记号记号

出0入0汤圆

发表于 2013-3-21 13:40:00 | 显示全部楼层
正在学习rda1846s  应该和1846差不多

出0入0汤圆

发表于 2013-3-27 11:46:34 | 显示全部楼层
ZFZ62 发表于 2012-11-10 17:20
请问你对RDA1846的应用熟悉吗?如果熟悉那我们有合作的机会,我想买一套RDA1846外挂MCU的软件--单接收  15989 ...

我们去年调试成功了两个,现在改版,效果还不错,天线直通没有加匹配距离有300m,移植的前面调试成功的单片机,程序不是自己搞的,现在自己修改的程序不能用,需要更多的配置资料

出0入0汤圆

发表于 2013-3-28 12:30:24 | 显示全部楼层
说下那个读取数据是有误的,是从1845改过来,
unsigned int Readrda1846S(unsigned char addr) //读出RDA寄存器程序
{
unsigned char i;
unsigned int rdata;
RDA1846SENOUT;//设定为输出
RDA1846SENSET;//拉电平
RDA1846CLKOUT;//设定为输出
RDA1846CLKCLR;//拉低电平
RDA1846IOOUT;//设定为输出
RDA1846SENCLR;//拉低电平开始工作
addr|=0x80;
for(i=8;i!=0;i--)
    {
     if (addr & 0x80)
        {
        RDA1846IOSET;
        }
        else
        {
        RDA1846IOCLR;
        }
        RdaDelays();
        RDA1846CLKSET;
        RdaDelays();
        RDA1846CLKCLR;
        addr = addr<<1;
        }
        RDA1846IOIN;       
for(i=16;i!=0;i--)
   {
        rdata = rdata <<1 ;         
          RDA1846CLKSET;
          RdaDelays();                 
      if (RDA1846IOINR)
         {
        rdata|=0X1;
        }
        RDA1846CLKCLR;

        }
          RDA1846SENSET;
    return rdata;
}
这个是STM8S写的,可以用的

出0入0汤圆

发表于 2013-4-8 09:57:23 | 显示全部楼层
lwb807 发表于 2013-3-28 12:30
说下那个读取数据是有误的,是从1845改过来,
unsigned int Readrda1846S(unsigned char addr) //读出RDA寄 ...

多谢提供参考代码,用stc单片机终于调试成功了,发现芯片的焊接也很重要,qfn封装背面的接地比较坑爹,很难确定有没有焊接好

出0入0汤圆

发表于 2013-4-20 18:49:00 | 显示全部楼层
好厉害的说

出0入0汤圆

发表于 2013-4-28 10:19:17 | 显示全部楼层
http://www.amobbs.com/forum.php? ... page%3D1#pid6638840

楼主给我开发做点东西吧。需求还没整理出来。

已经找人在做了,不过没关系,谁做出来我都要。都付钱。

出0入0汤圆

发表于 2013-4-28 23:01:44 | 显示全部楼层
Joyje 发表于 2013-4-8 09:57
多谢提供参考代码,用stc单片机终于调试成功了,发现芯片的焊接也很重要,qfn封装背面的接地比较坑爹,很 ...

那东东好弄,两个关键,1要有热风枪,2布板时封装要处理好,就很好焊了!

出0入0汤圆

发表于 2013-5-13 18:22:47 | 显示全部楼层
lwb807 发表于 2013-3-28 12:30
说下那个读取数据是有误的,是从1845改过来,
unsigned int Readrda1846S(unsigned char addr) //读出RDA寄 ...

怎一个谢字了得

出0入0汤圆

发表于 2013-10-30 12:16:44 | 显示全部楼层
good topic

出0入0汤圆

发表于 2013-10-30 13:51:09 | 显示全部楼层
不知后来搞出来没有

出0入0汤圆

发表于 2014-7-30 20:25:33 | 显示全部楼层
强大啊!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 22:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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