1 客户问:
我们是汕头做玩具的,现在在用你们的jf24d做单发单收的遥控小车。两套不同的发射和接收如何设置才能不受干扰,我需要15个频道。
我是这样设置的,2MS发送一次,然后换一个频道。 32MS接收一次,然后换一个频道。
现在接收50米没有问题。但多套产品在一起发送接收时,如何回避干扰?我要一个发射只对一个接收。因为我们配套的产品是出口的,生产1万产品至少要15个频道以上。
答复: 你可以修改频道选择寄存器{5,0x17}和接收通道0的地址,每个频道可以设置不同的地址来区分每套产品。不会互相干扰。否则2.4G产品就没有优势了。
2 客户问:
写REG4[0]=0,REG4[1]=0,REG4[3]=0,REG4[23]=0 **************/
for(j=0;j<4;j++)
{
WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j) ) )&0xff;
}
在这个程序中有点不明白
WriteArr[0]=0X0B ;
WriteArr[1]=0X86 ;
WriteArr[2]=0X9E ;
WriteArr[3]=0XC1 ;
答复: 这个是初始化写寄存器的函数,不用管的
客户问:我看到贵格书上的不一样
REG4 = 0x4199000B(2Mbps数据速率请设置为0x4199100B)
//寄存器组1 0-13号寄存器的初始值
code UINT32 RegArrFSKAnalog[]={
0xE2014B40,
0x00004B40,
0x028CFCD0,
0x41390099,
0x0B869EC1,
不是0x41390099,这个才对吗?
答复: 新版的JF24D速率只有1M,不是2M。
客户问:还有一个问题请教一下,如何检验初始化正确,因为我没用51,我们用了应广的
单片机,是不是看电流就行了?
答复: 电流是一方面,也可以用仿真的方法。读一下寄存器。
客户问:怎么读? 全部寄存器吗?
答复: 不用
客户问:看那几个?
答复: SPI_Write_Reg(RF_CH, 0x40);
Value=SPI_Read_Reg(RF_CH);
然后看Value的值和0x40相等不,如果相等可以断定SPI通讯成功。
看电流更直接,初始化成功后JF24D电流一般在14-21mA之间,加上STC单片机正常工作的电流4-8mA,整模块的电流在29mA左右,而初始化没有成功的JF24D模块电流会很大,大约在40-50mA之间。所以通过看电流就能够初步判断出来单片机初始化是否完成
客户问:如果有一些寄存器没初始化成功,JF24D就不能通信?
答复:是的。Value的值和0x40相等,说明寄存器设置成功, 而且能读出数据。spi就正常工作了。
客户问: 有没有一个寄存器,可以说明初始化成功的?
答复:RF_CH这个寄存器, 只要读写寄存器成功,就说明初始化没有问题。可以是任意一个寄存器。你可以初始化过之后直接读寄存器,看是否与写入值一样。
3 客户问:是这样,我手头上面有几个你们公司的新板jf24d模块在做测试,但我的驱动程序始终驱动不起来,请问您能帮我看看程序哪部分不对吗?硬件上面连接没有问题,我用的是stm32,程序参考你们公司网站上面的例子。初始化不成功。我写,然后读RF_CH寄存器,读到的值始终为0x02,不论写什么值都是这个值。
回复:
程序上没有什么问题,注意CE引脚,在初始化的时候应该为高,不同的单片机在初始化的时候可能会不一样,CE在初始化的时候必须置为高电平。否则会导致初始化失败。
再检查一下时序,确认一下IO口的设置,程序上SPI时序是否执行了。
初始化不成功问题:
51单片机上电之后SPI四根线还有CE初始状态是高电平,stm32单片机上电后需要确认。判断初始化是否成功,频率寄存器 写进去 再读出来 看一样不一样。频率寄存器可以读写修改,初始化一般都是成功的。初始化不成功,频率寄存器无法改写。先初始化才能对寄存器验证。JF24D的C语言程序可以移植到其他单片机,8位单片机和32位单片机都可以用。
4 客户说: 你们初始化里面有个语句好像是死循环。
回复: 不会是死循环的。测试过多次,没有问题的。
客户说: for(i=20;i>=0;i--) 这个不就是吗?
回复:: for(i=20;i>=0;i--
) { SPI_Write_Reg((WRITE_REG|RegArrFSK[i][0]),RegArrFSK[i][1]); //初始化
前面定义的寄存器 } 你要看完 ,这是循环20次,这不是死循环。
客户说: 我要改成for(i=20;i>0;i--)
回复: 不可以。
客户说: 不然就i=0后再减又从255开始
回复: 少了一次循环 初始化不成功的。
客户说: 难道问题出在这里?我如果要改成for(i=0;i<20;i++) 这样可以不?
回复:: 不可以的。
5 客户说: 我用J24D-B,实现这样一个功能,一个单独发射,一个接收。发射端发射不同数据,
接收端做出相应的动作。就像无线遥控器。
回复:: 可以的,我们网站有单发单收的例程,你可以下载。
6 请问3.3V时JF24D 待机电流为多少?
回复: 410uA ,你可以加休眠,休眠电流只有3.5uA。 定时唤醒就可以了。
客户说: power DOWN不就休眠了吗?
回复: 不是的,休眠和待机是不一样的。
客户说: 休眠如何做?
回复: 掉电, 定时唤醒。记得先退出接受或发射模式。
7 客户说:2.4G JF24C模块 我想让模块收到数据后清除数据区,怎么改,改那个寄存器?
现在情况是:我收发都正常,我想判断发送是否断开。这时接收没法区分。
回复: 你用的是24c
客户说: 是
回复: 你要退出发射模式。
客户说: 能说的具体些吗?怎么退出?
回复:: enter_idle(); //进入空闲模式 write_spi_reg(REG82_RX); //清FIFO 。
这就是退出的方法和清除fifo。
8 客户说: 现在遇到个问题,我要传输的数据长度是21个字节。发送的和接收的数据不一样。
01 10 10 00 3c 00 00 00 00 00 00 00 00 00 00 AA AA 00 34
01 10 10 00 3C 00 00 00 01 00 01 00 01 00 00 00 00 00 01
上面的一组是发送的,下面的一组是接收的
前几个字节是正确的,但是后面几个就不对了
回复: 我看下你的程序。 具体的程序。
客户说: 我就是按照您那边提供的程序。 我之前一直是收发的数据不超过10个字节
但是现在字节多了就出错了,和寄存器设置有关系吗?
回复: 不超过32个字节是没有关系的。
客户说: //寄存器组0初始值 u8 RegArrFSK[][2]={ {0,0x0F}, //配置寄存器
{1,0x3f}, //0x3f {2,0x3F}, //使能接收地址 {3,0x03}, //信道的数据长度 {4,0xff}, {5,0x17}, //频道选择寄存器 {6,0x17}, {7,0x07}, //状态寄存器
回复: 你修改寄存器没有?
客户说: #define MAX_PACKET_LEN 16
修改这个 #define MAX_PACKET_LEN 100
我把上面这个改成100了
回复: 100 改成255