?
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