?
1 客戶問:
我們是汕頭做玩具的,現(xiàn)在在用你們的jf24d做單發(fā)單收的遙控小車。兩套不同的發(fā)射和接收如何設(shè)置才能不受干擾,我需要15個頻道。
我是這樣設(shè)置的,2MS發(fā)送一次,然后換一個頻道。 32MS接收一次,然后換一個頻道。
現(xiàn)在接收50米沒有問題。但多套產(chǎn)品在一起發(fā)送接收時,如何回避干擾?我要一個發(fā)射只對一個接收。因?yàn)槲覀兣涮椎漠a(chǎn)品是出口的,生產(chǎn)1萬產(chǎn)品至少要15個頻道以上。
答復(fù): 你可以修改頻道選擇寄存器{5,0x17}和接收通道0的地址,每個頻道可以設(shè)置不同的地址來區(qū)分每套產(chǎn)品。不會互相干擾。否則2.4G產(chǎn)品就沒有優(yōu)勢了。
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;
}
在這個程序中有點(diǎn)不明白
WriteArr[0]=0X0B ;
WriteArr[1]=0X86 ;
WriteArr[2]=0X9E ;
WriteArr[3]=0XC1 ;
答復(fù): 這個是初始化寫寄存器的函數(shù),不用管的
客戶問:我看到貴格書上的不一樣
REG4 = 0x4199000B(2Mbps數(shù)據(jù)速率請設(shè)置為0x4199100B)
//寄存器組1 0-13號寄存器的初始值
code UINT32 RegArrFSKAnalog[]={
0xE2014B40,
0x00004B40,
0x028CFCD0,
0x41390099,
0x0B869EC1,
不是0x41390099,這個才對嗎?
答復(fù): 新版的JF24D速率只有1M,不是2M。
客戶問:還有一個問題請教一下,如何檢驗(yàn)初始化正確,因?yàn)槲覜]用51,我們用了應(yīng)廣的
單片機(jī),是不是看電流就行了?
答復(fù): 電流是一方面,也可以用仿真的方法。讀一下寄存器。
客戶問:怎么讀? 全部寄存器嗎?
答復(fù): 不用
客戶問:看那幾個?
答復(fù): SPI_Write_Reg(RF_CH, 0x40);
Value=SPI_Read_Reg(RF_CH);
然后看Value的值和0x40相等不,如果相等可以斷定SPI通訊成功。
看電流更直接,初始化成功后JF24D電流一般在14-21mA之間,加上STC單片機(jī)正常工作的電流4-8mA,整模塊的電流在29mA左右,而初始化沒有成功的JF24D模塊電流會很大,大約在40-50mA之間。所以通過看電流就能夠初步判斷出來單片機(jī)初始化是否完成
客戶問:如果有一些寄存器沒初始化成功,JF24D就不能通信?
答復(fù):是的。Value的值和0x40相等,說明寄存器設(shè)置成功, 而且能讀出數(shù)據(jù)。spi就正常工作了。
客戶問: 有沒有一個寄存器,可以說明初始化成功的?
答復(fù):RF_CH這個寄存器, 只要讀寫寄存器成功,就說明初始化沒有問題。可以是任意一個寄存器。你可以初始化過之后直接讀寄存器,看是否與寫入值一樣。
3 客戶問:是這樣,我手頭上面有幾個你們公司的新板jf24d模塊在做測試,但我的驅(qū)動程序始終驅(qū)動不起來,請問您能幫我看看程序哪部分不對嗎?硬件上面連接沒有問題,我用的是stm32,程序參考你們公司網(wǎng)站上面的例子。初始化不成功。我寫,然后讀RF_CH寄存器,讀到的值始終為0x02,不論寫什么值都是這個值。
回復(fù):
程序上沒有什么問題,注意CE引腳,在初始化的時候應(yīng)該為高,不同的單片機(jī)在初始化的時候可能會不一樣,CE在初始化的時候必須置為高電平。否則會導(dǎo)致初始化失敗。
再檢查一下時序,確認(rèn)一下IO口的設(shè)置,程序上SPI時序是否執(zhí)行了。
初始化不成功問題:
51單片機(jī)上電之后SPI四根線還有CE初始狀態(tài)是高電平,stm32單片機(jī)上電后需要確認(rèn)。判斷初始化是否成功,頻率寄存器 寫進(jìn)去 再讀出來 看一樣不一樣。頻率寄存器可以讀寫修改,初始化一般都是成功的。初始化不成功,頻率寄存器無法改寫。先初始化才能對寄存器驗(yàn)證。JF24D的C語言程序可以移植到其他單片機(jī),8位單片機(jī)和32位單片機(jī)都可以用。
4 客戶說: 你們初始化里面有個語句好像是死循環(huán)。
回復(fù): 不會是死循環(huán)的。測試過多次,沒有問題的。
客戶說: for(i=20;i>=0;i--) 這個不就是嗎?
回復(fù):: for(i=20;i>=0;i--
) { SPI_Write_Reg((WRITE_REG|RegArrFSK[i][0]),RegArrFSK[i][1]); //初始化
前面定義的寄存器 } 你要看完 ,這是循環(huán)20次,這不是死循環(huán)。
客戶說: 我要改成for(i=20;i>0;i--)
回復(fù): 不可以。
客戶說: 不然就i=0后再減又從255開始
回復(fù): 少了一次循環(huán) 初始化不成功的。
客戶說: 難道問題出在這里?我如果要改成for(i=0;i<20;i++) 這樣可以不?
回復(fù):: 不可以的。
5 客戶說: 我用J24D-B,實(shí)現(xiàn)這樣一個功能,一個單獨(dú)發(fā)射,一個接收。發(fā)射端發(fā)射不同數(shù)據(jù),
接收端做出相應(yīng)的動作。就像無線遙控器。
回復(fù):: 可以的,我們網(wǎng)站有單發(fā)單收的例程,你可以下載。
6 請問3.3V時JF24D 待機(jī)電流為多少?
回復(fù): 410uA ,你可以加休眠,休眠電流只有3.5uA。 定時喚醒就可以了。
客戶說: power DOWN不就休眠了嗎?
回復(fù): 不是的,休眠和待機(jī)是不一樣的。
客戶說: 休眠如何做?
回復(fù): 掉電, 定時喚醒。記得先退出接受或發(fā)射模式。
7 客戶說:2.4G JF24C模塊 我想讓模塊收到數(shù)據(jù)后清除數(shù)據(jù)區(qū),怎么改,改那個寄存器?
現(xiàn)在情況是:我收發(fā)都正常,我想判斷發(fā)送是否斷開。這時接收沒法區(qū)分。
回復(fù): 你用的是24c
客戶說: 是
回復(fù): 你要退出發(fā)射模式。
客戶說: 能說的具體些嗎?怎么退出?
回復(fù):: enter_idle(); //進(jìn)入空閑模式 write_spi_reg(REG82_RX); //清FIFO 。
這就是退出的方法和清除fifo。
8 客戶說: 現(xiàn)在遇到個問題,我要傳輸?shù)臄?shù)據(jù)長度是21個字節(jié)。發(fā)送的和接收的數(shù)據(jù)不一樣。
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
上面的一組是發(fā)送的,下面的一組是接收的
前幾個字節(jié)是正確的,但是后面幾個就不對了
回復(fù): 我看下你的程序。 具體的程序。
客戶說: 我就是按照您那邊提供的程序。 我之前一直是收發(fā)的數(shù)據(jù)不超過10個字節(jié)
但是現(xiàn)在字節(jié)多了就出錯了,和寄存器設(shè)置有關(guān)系嗎?
回復(fù): 不超過32個字節(jié)是沒有關(guān)系的。
客戶說: //寄存器組0初始值 u8 RegArrFSK[][2]={ {0,0x0F}, //配置寄存器
{1,0x3f}, //0x3f {2,0x3F}, //使能接收地址 {3,0x03}, //信道的數(shù)據(jù)長度 {4,0xff}, {5,0x17}, //頻道選擇寄存器 {6,0x17}, {7,0x07}, //狀態(tài)寄存器
回復(fù): 你修改寄存器沒有?
客戶說: #define MAX_PACKET_LEN 16
修改這個 #define MAX_PACKET_LEN 100
我把上面這個改成100了
回復(fù): 100 改成255