標(biāo)題: [原創(chuàng)]NRF24L01+的5個(gè)通道調(diào)試經(jīng)驗(yàn),總調(diào)不通的可以來(lái)看看…… [打印本頁(yè)]
作者: 王朗的誘惑 時(shí)間: 2015-7-26 23:10
標(biāo)題: [原創(chuàng)]NRF24L01+的5個(gè)通道調(diào)試經(jīng)驗(yàn),總調(diào)不通的可以來(lái)看看……
歷盡千辛萬(wàn)苦,失敗了無(wú)數(shù)回……終于把NRF24L01+所有通道全調(diào)通了。在調(diào)試過(guò)程中,總結(jié)了一些經(jīng)驗(yàn)。(下載成功計(jì)數(shù)又刷了幾百~~~~(T o T)~~~~)
總體來(lái)看,NRF24L01+模塊最麻煩的就是寄存器配置問(wèn)題了,搞定了各個(gè)寄存器的配置,模塊就通了。而通道設(shè)置也到處是寄存器的身影,一不小心就會(huì)通信失敗,所以在準(zhǔn)備調(diào)試NRF24L01+前一定要準(zhǔn)備好資料。如果失敗了,不要著急,一點(diǎn)一點(diǎn)來(lái),排除所有可能的故障,如果人品不錯(cuò)的話,一會(huì)就搞定了……(╮(╯▽╰)╭我是沒(méi)這個(gè)運(yùn)氣了……)
很多人卡在通道調(diào)試這里,那就說(shuō)說(shuō)NRF24L01+通道的事情吧,一共有6個(gè)通道(數(shù)據(jù)手冊(cè)里的pipe),其中通道0最容易了,去網(wǎng)上隨便找個(gè)程序就搞定,比如我找的這個(gè),連通道1也稍帶上了。關(guān)鍵是剩下的那幾個(gè),尤其是通道2(2~5是極其相似的),在網(wǎng)上看到了很多人調(diào)不通,可是又沒(méi)有專門的解決辦法,只有多對(duì)一的通信范例,最后還是不知道問(wèn)題出在哪。今天我試了一下,確實(shí)不易……但是經(jīng)過(guò)大量實(shí)驗(yàn),發(fā)現(xiàn)了很多不容易想到問(wèn)題,都是不能調(diào)通的原因。
通道1調(diào)試:
發(fā)送部分:
通道1其實(shí)不只是把通道0程序里有關(guān)通道0的部分直接改成通道1的那么簡(jiǎn)單,別的通道更麻煩一點(diǎn),這就是很多人調(diào)不通的原因。我剛開(kāi)始也是直接改的,果然失敗了……(⊙﹏⊙)b……然后又去看原來(lái)的程序,看到發(fā)送的數(shù)據(jù)不論是哪個(gè)通道,都裝給了通道0的地址,不知道為什么,但是實(shí)驗(yàn)證明,確實(shí)必須這樣……其中TX_ADDR地址要和發(fā)送的地址一樣。
1. /*裝載數(shù)據(jù)*/
2. SPI_Write_Buf(WRITE_REG + TX_ADDR, (uint8_t*)ADDRn, TX_ADR_WIDTH);//寫TX節(jié)點(diǎn)地址
3. SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, (uint8_t*)ADDRn, RX_ADR_WIDTH); //設(shè)置TX節(jié)點(diǎn)地址,主要為了使能ACK
不論通道是幾,其中要改動(dòng)的只有(uint8_t*)ADDRn這個(gè)東西,其實(shí)就是對(duì)應(yīng)的通道地址。不要?jiǎng)覴X_ADDR_P0。
然后是寄存器配置,原貼里的注釋有這么一行:“要配置第N個(gè)的通道,前N個(gè)通道也必須被配置,要不然配置不成功。”瞬間恍然大悟( ⊙ o ⊙ )!,上回太心急,拿了程序就走了……正如原帖代碼所示:
1. SPI_Write_Reg(WRITE_REG + EN_AA, 0x3f); //使能通道所有的自動(dòng)應(yīng)答
2. SPI_Write_Reg(WRITE_REG + EN_RXADDR, 0x3f);//使能通道所有的接收地址
這個(gè)是發(fā)送函數(shù)void NRF24L01_Init_TX(uint8_t*ADDRn)里的一段,作者把所有通道都打開(kāi)了。其實(shí)經(jīng)過(guò)試驗(yàn),這里的通道必須把當(dāng)前配置的通道和它前面的都配置。比如現(xiàn)在是通道1,就要至少使能為0x03,而不能是只打開(kāi)通道1的0x02。
下面的選擇通道n有效數(shù)據(jù)寬度,實(shí)驗(yàn)證明沒(méi)有用,我一次只發(fā)1個(gè)字節(jié),寬度設(shè)置成32,發(fā)過(guò)來(lái)還是1個(gè)字節(jié)……所以可以去掉。不過(guò)留著也不會(huì)出錯(cuò)。
接收部分:
首先經(jīng)過(guò)試驗(yàn),不設(shè)置TX_ADDR和RX_ADDR_P0沒(méi)出錯(cuò),所以可以去掉。
但是然后發(fā)生了奇怪的問(wèn)題,經(jīng)過(guò)大量試驗(yàn),我這里通道1地址設(shè)置完了以后還要重新設(shè)置低位地址,不然沒(méi)法調(diào)通,不知道為什么。如代碼所示:
SPI_Write_Buf(WRITE_REG +RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK
SPI_Write_Buf(WRITE_REG +RX_ADDR_P1, RX_ADDRESS1, 1); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK
(奇怪的NRF24L01+(O__O"…),然后我想……我刪掉的部分可能在別人那里就不一樣了……可能。如果最后調(diào)不通就把我刪掉的加上試試。)
后面的就是很正常的設(shè)置了,可以只開(kāi)對(duì)應(yīng)通道,比如通道1:0x02,對(duì)應(yīng)數(shù)據(jù)寬度什么的……不用管別的通道怎么樣。
通道2~5調(diào)試:
發(fā)送部分:
和通道1的調(diào)試方法一樣,注意:
1.不要?jiǎng)覴X_ADDR_P0。
2.配置第N個(gè)的通道,前N個(gè)通道也必須被配置。
接收部分:
也和通道1一樣……但是需要注意的是數(shù)據(jù)地址的寫入,在定義數(shù)據(jù)地址的時(shí)候,根據(jù)數(shù)據(jù)手冊(cè),通道2~5與通道1共用32位地址,只有低8位可以改變且不能一樣。如圖:
360截圖20150726222239348.jpg (63.93 KB, 下載次數(shù): 433)
下載附件
2015-7-26 22:51 上傳
所以改通道2~5地址的話只能通過(guò)改通道1的,然后寫入對(duì)應(yīng)通道低8位地址。數(shù)據(jù)手冊(cè)里的RX_ADDR_P1表格里還有一句話:LSByteis written first。(先寫最低位。)這很重要。所以根據(jù)寫入字節(jié)的程序,地址要定義為:
360截圖20150726223241252.jpg (29.87 KB, 下載次數(shù): 431)
下載附件
2015-7-26 22:51 上傳
這樣,看懂沒(méi)?除了通道0,只有地址數(shù)組的第0個(gè)元素在變化。網(wǎng)上很多程序是最后一個(gè)元素在變,好像數(shù)據(jù)手冊(cè)的表里似的,這樣就會(huì)導(dǎo)致只有通道0和1能調(diào)通,別的不能用。因?yàn)橥ǖ?和1是40位地址寫入的,隨便改,但是后面的地址必須只能改低位,如果高低位弄混了,改錯(cuò)了當(dāng)然就不能調(diào)通了。當(dāng)然我(Copy)的程序是先寫第0個(gè)元素,如果別人的程序不一樣那要另當(dāng)別論。
知道了順序以后就好辦了,但是要注意寫入的時(shí)候先寫通道1的40位地址,再寫所用通道的低8位地址,但是經(jīng)過(guò)多次試驗(yàn),那32位不要重復(fù)寫入,數(shù)值一樣也不行。這樣就OK,程序如下:
SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK
SPI_Write_Buf(WRITE_REG + RX_ADDR_P2, RX_ADDRESS2, 1); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK(地址長(zhǎng)度只能是1,不能多寫,寫一樣的值也不行)
然后剩下的就簡(jiǎn)單了,數(shù)據(jù)通道和數(shù)據(jù)寬度該是幾就設(shè)置幾,不用管別的通道。
對(duì),結(jié)束了,其實(shí)并不難,只是可能有的問(wèn)題沒(méi)想到而已……我把原程序重新改了一下,進(jìn)行了通道變換的封裝,輸入對(duì)應(yīng)通道就可以在對(duì)應(yīng)通道上點(diǎn)對(duì)點(diǎn)通信了,像這樣:
- /***************************************************************************
- 函數(shù)名稱:void NRF24L01_Init_TX(uchar pipe)
- 函數(shù)功能:初始化NRF24L01
- 函數(shù)備注:在調(diào)用NRF24L01作為發(fā)射時(shí),都要先調(diào)用該函數(shù)對(duì)NRF24L01進(jìn)行初始化
- ***************************************************************************/
- void NRF24L01_Init_TX(uchar pipe)//輸入通道值
- {
- /*待機(jī)模式*/
- CE=0;
- CSN=1;
- SCK=0;
- /*裝載數(shù)據(jù)*/
- SPI_Write_Buf(WRITE_REG + TX_ADDR, pipe_add[pipe], TX_ADR_WIDTH);//寫TX節(jié)點(diǎn)地址
- SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, pipe_add[pipe], RX_ADR_WIDTH); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK
- /*配置寄存器*/
- SPI_Write_Reg(WRITE_REG + EN_AA, 0x3F); //使能所有通道自動(dòng)應(yīng)答
- SPI_Write_Reg(WRITE_REG + EN_RXADDR, 0x3F);//使能所有通道的接收地址(這兩項(xiàng)定義的通道數(shù)不得小于當(dāng)前使用的通道數(shù),奇怪的NRF24L01+(O__O "…))
- SPI_Write_Reg(WRITE_REG + RF_CH, 40);//設(shè)置RF通道為40 收發(fā)必須一致!
- SPI_Write_Reg(WRITE_REG + SETUP_RETR, 0xFF);//自動(dòng)重發(fā) 4000+86us 重發(fā)15次
- SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0F); //設(shè)置TX發(fā)射參數(shù),0db增益,2Mbps,低噪聲增益開(kāi)啟 收發(fā)必須一致!
- SPI_Write_Reg(WRITE_REG + CONFIG, 0x0E); //配置基本工作模式的參數(shù);PWR_UP,EN_CRC,16BIT_CRC,發(fā)送模式,開(kāi)啟所有中斷
- }
- /***************************************************************************
- 函數(shù)名稱:void NRF24L01_Init_RX(uchar pipe)
- 函數(shù)功能:初始化NRF24L01
- 函數(shù)備注:在調(diào)用NRF24L01作為接收時(shí),都要先調(diào)用該函數(shù)對(duì)NRF24L01進(jìn)行初始化
- ***************************************************************************/
- void NRF24L01_Init_RX(uchar pipe)//輸入通道值
- {
- /*待機(jī)模式*/
- CE=0;
- CSN=1;
- SCK=0;
- /*裝載數(shù)據(jù)*/
- if(pipe == 0) //通道,對(duì)應(yīng)設(shè)置40位地址
- {
- SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS0, RX_ADR_WIDTH); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK
- SPI_Write_Buf(WRITE_REG + (RX_ADDR_P0+pipe), RX_ADDRESS0+pipe, RX_ADR_WIDTH); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK
- }
- else //其他通道,對(duì)應(yīng)設(shè)置通道1公共地址和相應(yīng)8位地址
- {
- SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK
- SPI_Write_Buf(WRITE_REG + (RX_ADDR_P0+pipe), pipe_add[pipe], 1); //設(shè)置RX節(jié)點(diǎn)地址,主要為了使能ACK(地址長(zhǎng)度只能是1,不能多寫,寫一樣的值也不行)
- }
- /*配置寄存器*/
- SPI_Write_Reg(WRITE_REG + EN_AA, 1<<pipe);//使能通道的自動(dòng)應(yīng)答
- SPI_Write_Reg(WRITE_REG + EN_RXADDR, 1<<pipe); //使能通道的接收地址
- SPI_Write_Reg(WRITE_REG + RF_CH, 40); //設(shè)置RF通道為40 收發(fā)必須一致!
- SPI_Write_Reg(WRITE_REG + (RX_PW_P0+pipe), RX_PLOAD_WIDTH); //選擇通道的有效數(shù)據(jù)寬度
- SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0F); //設(shè)置TX發(fā)射參數(shù),0db增益,2Mbps,低噪聲增益開(kāi)啟 收發(fā)必須一致!
- SPI_Write_Reg(WRITE_REG + CONFIG, 0x0F); //配置基本工作模式的參數(shù);PWR_UP,EN_CRC,16BIT_CRC,接收模式,開(kāi)啟所有中斷
- }
復(fù)制代碼
親測(cè)通道0~5均可用。如果想多對(duì)一通信,只需增加相應(yīng)通道即可,反正配置方法已經(jīng)告訴你了,這下沒(méi)問(wèn)題了吧。O(∩_∩)O哈哈~。當(dāng)然,這樣做了沒(méi)問(wèn)題卻還是調(diào)不通的朋友可以在論壇里搜索,搜不到就去百度,百度不到可以用雅虎,不行再用谷歌,不行再用搜狗,不行再用360搜索,不行再用好搜,不行再用搜搜,不行再用Bing……要是還不行,可以選擇聯(lián)系我……w(゚Д゚)w。
附上我稍作修改后的代碼,太長(zhǎng),而且有3段,就打包了。
NRF24L01 .zip
(36.7 KB, 下載次數(shù): 780)
2015-7-26 23:01 上傳
點(diǎn)擊文件名下載附件
代碼~
下載積分: 黑幣 -5
NRF24L01 資料.rar
(10.58 MB, 下載次數(shù): 451)
2015-7-26 23:02 上傳
點(diǎn)擊文件名下載附件
某寶找的資料,比百度強(qiáng)多了……
下載積分: 黑幣 -5
作者: eclidtf 時(shí)間: 2015-7-28 21:20
最近也想學(xué)習(xí)一下無(wú)線,準(zhǔn)備入手NR905的模塊
作者: 騰飛的龍 時(shí)間: 2015-8-3 20:05
好東西謝謝分享值得尊敬!
作者: 286458071 時(shí)間: 2015-8-8 10:37
謝謝分享
作者: zylugl 時(shí)間: 2016-2-17 23:41
前輩,我用STM8L101 還沒(méi)入門,謝謝你的分享
作者: cqr01 時(shí)間: 2016-2-19 15:56
在調(diào)試,學(xué)習(xí)了!
作者: zylugl 時(shí)間: 2016-3-3 14:13
調(diào)了N久還沒(méi)有通,很想下載你的資料
作者: erhuazi 時(shí)間: 2016-3-18 10:18
正需要!
作者: 去127 時(shí)間: 2016-4-3 15:58
下載了很是需要啊
作者: zzxzzxzzx 時(shí)間: 2016-4-11 10:15
想調(diào)通2個(gè)通道
作者: 799224707 時(shí)間: 2016-4-11 11:12
依然不好使,求教啊
作者: zzxzzxzzx 時(shí)間: 2016-4-11 15:28
親,我2個(gè)發(fā)送,1個(gè)收,通道0和1都調(diào)通了,兩個(gè)一起發(fā)的話中間有一個(gè)會(huì)插不進(jìn)去,把另外一個(gè)關(guān)了,它發(fā)的就收到了
作者: 王朗的誘惑 時(shí)間: 2016-4-11 18:15
試試接收完了以后手動(dòng)清一下RX FIFO寄存器。可能會(huì)影響到自動(dòng)應(yīng)答。
作者: cngeek 時(shí)間: 2016-4-27 00:31
圍觀一下大神 好貼 最近也在弄這個(gè)
作者: cngeek 時(shí)間: 2016-5-2 20:31
請(qǐng)問(wèn)大神 晶振是多少mhz的
作者: 王朗的誘惑 時(shí)間: 2016-5-2 21:59
嗯?
NRF24L01上面寫的是16MHz,單片機(jī)隨意啦。
作者: z53523390 時(shí)間: 2016-6-15 08:46
正是我所需要的東西,謝謝樓主
作者: chenduojiao 時(shí)間: 2016-6-21 14:19
您好,請(qǐng)教一下,我的NRF24L01讓數(shù)據(jù)一直發(fā)送接受,測(cè)試10天左右,發(fā)現(xiàn)接收模塊收不到數(shù)據(jù)了,但是發(fā)射模塊一直在發(fā)射數(shù)據(jù),我沒(méi)有設(shè)置自動(dòng)應(yīng)答,請(qǐng)問(wèn)你有沒(méi)有遇到這種情況。
作者: 王朗的誘惑 時(shí)間: 2016-6-21 16:21
有的有的,開(kāi)始的時(shí)候一切正常,不知道什么時(shí)候就卡了,一直不知道是什么原因。
作者: xinshou123456 時(shí)間: 2016-6-28 11:41
好東西,頂起來(lái)!。。
作者: xinshou123456 時(shí)間: 2016-6-28 11:42
樓主,能加下好友嗎,有些問(wèn)題請(qǐng)教!,qq 2412907044
作者: nczywq 時(shí)間: 2016-10-21 00:04
我想問(wèn)下樓主,比如我把數(shù)據(jù)發(fā)送到通道2,我該怎么把通道里的數(shù)據(jù)讀出來(lái),發(fā)送什么指令,手冊(cè)已經(jīng)把我囈蒙蔽了
作者: 王朗的誘惑 時(shí)間: 2016-10-22 12:58
NRF24L01_Init_RX(2);
nRF24L01_RxPacket(Rx_Buf);
這就行了吧。
作者: whsbk 時(shí)間: 2016-10-22 14:14
手里也有這個(gè)模塊還沒(méi)開(kāi)始調(diào),感謝分享資料
作者: nczywq 時(shí)間: 2016-10-23 22:46
樓主啊。我在TB買的NRF24L01模塊,怎么也讀不到數(shù)據(jù),讀回來(lái)的全是1。好糾結(jié)
作者: 王朗的誘惑 時(shí)間: 2016-10-24 20:54
nczywq 發(fā)表于 2016-10-23 22:46
樓主啊。我在TB買的NRF24L01模塊,怎么也讀不到數(shù)據(jù),讀回來(lái)的全是1。好糾結(jié)
這東西就是不好調(diào)。一步一步來(lái)吧。先隨便讀寄存器看SPI有沒(méi)有問(wèn)題,然后先調(diào)通道0。一定要有耐心,堅(jiān)持下去總會(huì)有美好的事情發(fā)生。
作者: nczywq 時(shí)間: 2016-10-24 21:12
就是沒(méi)有任何數(shù)據(jù)讀出來(lái),我在和模塊廠家聯(lián)系
作者: nczywq 時(shí)間: 2016-10-25 20:39
用模擬SPI可以,但我用STC15自帶的SPI寄存器讀,數(shù)據(jù)一直不對(duì),總是差一位數(shù),不知道為什么,
作者: 王朗的誘惑 時(shí)間: 2016-10-26 18:58
nczywq 發(fā)表于 2016-10-25 20:39
用模擬SPI可以,但我用STC15自帶的SPI寄存器讀,數(shù)據(jù)一直不對(duì),總是差一位數(shù),不知道為什么,
是官方的例程么?我也試過(guò)硬件SPI,沒(méi)什么問(wèn)題。
作者: nczywq 時(shí)間: 2016-10-27 22:39
擦,第二天同樣的代碼又成功了
作者: nczywq 時(shí)間: 2016-11-3 22:41
本帖最后由 nczywq 于 2016-11-3 22:42 編輯
樓主請(qǐng)教,我能發(fā)送,可是發(fā)送不成功,具體表現(xiàn)為達(dá)到最大重發(fā)。代碼如下
- void NRF_Init(void)
- {
- NRF_CE=0;
- NRF_Write_Com(W_REGISTER+CONFIG,0x18); //進(jìn)入待機(jī)模式開(kāi)通CRC校驗(yàn)
- NRF_Write_Com(W_REGISTER+EN_AA,ENAA_P0); //允許通道0自動(dòng)應(yīng)答
- NRF_Write_Com(W_REGISTER+EN_RXADDR,ERX_P0); //允許通道0接收數(shù)據(jù)
- NRF_Write_Com(W_REGISTER+SETUP_AW,AW); //發(fā)送接收數(shù)據(jù)寬度為5個(gè)字節(jié)
- NRF_Write_Com(W_REGISTER+SETUP_RETR,0xff); //打開(kāi)自動(dòng)重發(fā)
- NRF_Write_Com(W_REGISTER+RF_CH,RF_CH_ADD); //射頻通道
- NRF_Write_Com(W_REGISTER+RF_SETUP,(RF_DR|RF_PWR)); //速率2Mbps,發(fā)射功率0dBm
- NRF_Write_Dat(W_REGISTER+RX_ADDR_P0,RX_ADDr0,5); //寫入接收地址
- NRF_Write_Dat(W_REGISTER+TX_ADDR,TX_ADDr,5); //寫入發(fā)送地址
- NRF_Write_Com(W_REGISTER+RX_PW_P0,RX_PW_P0_Width); //接收數(shù)據(jù)寬度為5個(gè)字節(jié)
- NRF_Write_Com(W_REGISTER+STATUS,Clean_STATUS); //清除狀態(tài)寄存器
- }
- void NRF_TX_Mode(void)
- {
- NRF_Delay();
- NRF_CE=0;
- NRF_Delay(); //進(jìn)入待機(jī)模式
- NRF_Com(FLUSH_TX); //清除發(fā)送寄存器
- NRF_Write_Dat(W_TX_PAYLOAD,RX_Dat,26); //寫入待發(fā)送數(shù)據(jù)
- NRF_Write_Com(W_REGISTER+CONFIG,0x0a); //配置發(fā)送模式
- NRF_CE=1; //發(fā)送數(shù)據(jù)
- // Delay500ms();
- EX0=1;
- }
- void INT0_Routine(void) interrupt 0 using 0
- {
- uint temp[5];
- EX0=0;
- sta=NRF_Read_Com(STATUS); //返回狀態(tài)寄存器
- printf("狀態(tài)寄存器的值為:%x\n",sta);
- part();
- if(TX_DS)
- {
- printf("對(duì)方接收成功\n");
- NRF_Write_Com(W_REGISTER+STATUS,Clean_STATUS); //清除狀態(tài)寄存器
- NRF_RX_Mode();
- }
- else if(RX_DR)
- {
- NRF_Read_Dat(R_RX_PAYLOAD,temp,5);
- printf("接收到的數(shù)據(jù)為:%c%c%c%c%c\n",temp[0],temp[1],temp[2],temp[3],temp[4]);
- NRF_Write_Com(W_REGISTER+STATUS,Clean_STATUS); //清除狀態(tài)寄存器
- }
- else if(MAX_RT)
- {
- printf("發(fā)送失敗%x\n",MAX_RT);
- }
- }
- void SPI_Routine(void) interrupt 9 using 0
- {
- SPSTAT = SPIF | WCOL; //清除SPI狀態(tài)位
- SPI_OK=1;
- }
復(fù)制代碼
作者: A007320806 時(shí)間: 2016-11-9 09:16
實(shí)測(cè)可用,非常感謝!
作者: 王朗的誘惑 時(shí)間: 2016-11-9 15:44
看不出來(lái)……
注意寄存器該清的清了,不能同時(shí)發(fā)送。這問(wèn)題是第一次發(fā)送就有的還是一會(huì)才有的?還有這2個(gè)中斷怎么都是using 0
作者: 小z是我 時(shí)間: 2016-12-14 21:06
學(xué)習(xí)學(xué)習(xí)。最近一直在學(xué)這個(gè),真想聯(lián)系你,為嘛下載要幣
作者: 小z是我 時(shí)間: 2016-12-14 21:14
不夠積分下載啊,努力才刷了13積分,能發(fā)到我郵箱嗎,278698535@qq.com,感激不盡,好人永遠(yuǎn)平安
作者: zggxgl 時(shí)間: 2017-1-4 10:42
樓主,你好,剛接觸NRF24L01,找了很多相關(guān)資料,還是沒(méi)弄明白,向你請(qǐng)教,
如果接收端6個(gè)通道都接收數(shù)據(jù),怎么把指定通道或所有通道的數(shù)據(jù)讀取出來(lái),并且如果某個(gè)時(shí)刻其中一個(gè)通道接收到了數(shù)據(jù),怎么知道是哪個(gè)通道接收到了數(shù)據(jù)呢?謝謝。
作者: 王朗的誘惑 時(shí)間: 2017-1-6 16:08
NRF24L01_RX_P_NO.jpg (15.38 KB, 下載次數(shù): 201)
下載附件
2017-1-6 16:07 上傳
是用這個(gè)寄存器看通道號(hào)吧?
作者: 頭上長(zhǎng)包了 時(shí)間: 2017-1-30 21:23
卡好久了。。。發(fā)送正常就是接收不到。。。。。先下載看看
作者: 頭上長(zhǎng)包了 時(shí)間: 2017-1-30 22:06
直接用了你的程序,我用的stc的89c52做的,只是改了引腳頭文件之類的,其他都沒(méi)有改,然后分別下載進(jìn)發(fā)射和接收(接收的把#define RX取消屏蔽了編譯的),結(jié)果接收部分通過(guò)串口看始終接收不到信號(hào),STATUS始終是0e,數(shù)據(jù)為初始化的00,寄存器能正常讀取的話,應(yīng)該說(shuō)明硬件沒(méi)問(wèn)題吧?求教~~
作者: 王朗的誘惑 時(shí)間: 2017-1-31 09:27
確實(shí)……寄存器對(duì)了硬件應(yīng)該就沒(méi)問(wèn)題……發(fā)送端寄存器也正常么?這就不知道了……交換下發(fā)送接收看看什么的……
作者: 頭上長(zhǎng)包了 時(shí)間: 2017-2-1 09:17
。。。發(fā)送接收寄存器都正常,不過(guò)發(fā)送地址讀出來(lái)的好像有點(diǎn)問(wèn)題,今天繼續(xù)調(diào)試。順便問(wèn)一下,寄存器CD是什么意思?我讀出來(lái)都是00.是不是說(shuō)我兩個(gè)天線不再一個(gè)頻段?
作者: 頭上長(zhǎng)包了 時(shí)間: 2017-2-1 16:45
陷入瓶頸了。。發(fā)送取消應(yīng)答,只使用通道0,狀態(tài)寄存器STATUS收到0X2E,說(shuō)明發(fā)送成功,接收部分狀態(tài)寄存器卻始終為0x0e。。。。其他設(shè)置都是一樣的,就是接收不到數(shù)據(jù)。。。求教
作者: 頭上長(zhǎng)包了 時(shí)間: 2017-2-2 20:54
終于弄出來(lái)了,來(lái)通報(bào)一下原因。程序沒(méi)有錯(cuò)誤。是硬件電源問(wèn)題,加了電容濾波就好了。
作者: x小白x 時(shí)間: 2017-2-2 23:23
正在玩試試看怎么樣
作者: 王朗的誘惑 時(shí)間: 2017-2-3 14:48
是不是用的線性穩(wěn)壓沒(méi)加輸出電容?
作者: zy1186 時(shí)間: 2017-4-7 11:17
不夠積分下載
作者: trith 時(shí)間: 2017-5-12 11:42
感謝分享
作者: trith 時(shí)間: 2017-5-12 12:43
/***************************************************************************
函數(shù)名稱:uchar SPI_RW(uchar dat)
函數(shù)功能:NRF24L01的SPI時(shí)序
函數(shù)備注:Writes one byte to nRF24L01, and return the byte read from nRF24L01 during write
***************************************************************************/
uchar SPI_RW(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
dat <<= 1;
MOSI = CY;
SCK = 1;
dat |= MISO;
SCK = 0;
}
return(dat);
}
那個(gè)CY是什么?為什么不是 dat|0x80 呢?
作者: trith 時(shí)間: 2017-5-12 15:32
那個(gè)CY應(yīng)該是進(jìn)位標(biāo)記?我用的51 mcu,沒(méi)這個(gè)CY,
我給他改成在dat左移之前的MOSI = dat & 0x80;
哈哈,這個(gè)真的能用啊,謝謝樓主。
網(wǎng)上分享的24L01P的各種代碼滿天飛,各個(gè)號(hào)稱調(diào)通能用。結(jié)果沒(méi)有一個(gè)好用。
作者: 李志崗 時(shí)間: 2017-5-17 11:53
很精心 很實(shí)用 樓主大好人
作者: lingem 時(shí)間: 2017-5-22 13:56
手里也有這個(gè)模塊還沒(méi)開(kāi)始調(diào),感謝分享資料
作者: whh123whh 時(shí)間: 2017-6-4 10:23
謝謝你的分享!
作者: SLAM258 時(shí)間: 2017-6-17 15:15
沒(méi)積分,好想下載
作者: 你不是啦啦啦 時(shí)間: 2017-7-15 20:14
樓主求教,一直調(diào)不通。
作者: clogord 時(shí)間: 2017-8-18 23:02
多謝
作者: 王朗的誘惑 時(shí)間: 2017-8-21 14:54
是模塊和單片機(jī)之間通信不上還是模塊和模塊之間通信不上?一步一步來(lái),這個(gè)模塊就是不好調(diào)。
作者: jxdianqi 時(shí)間: 2017-8-21 17:44
好東西謝謝分享值得尊敬!剛買了材料,正好借鑒一下
作者: 銘日 時(shí)間: 2017-9-13 18:59
端個(gè)小板凳來(lái)學(xué)習(xí)學(xué)習(xí)
作者: 銘日 時(shí)間: 2017-9-13 19:01
鹵煮的模塊能傳多遠(yuǎn),實(shí)際的速率最快能有多快呢?
作者: 王朗的誘惑 時(shí)間: 2017-10-1 12:31
這個(gè)還沒(méi)試過(guò)……
作者: xingzhiying 時(shí)間: 2017-10-17 21:59
很不錯(cuò)的資料
作者: xiong731 時(shí)間: 2017-11-28 21:05
謝謝你的分享
作者: nncrazy 時(shí)間: 2018-1-12 10:45
多謝樓主,正需要。
作者: zhangdi 時(shí)間: 2018-2-11 17:38
哪個(gè)部分加了濾波呢?
作者: zhangdi 時(shí)間: 2018-2-11 17:40
請(qǐng)問(wèn)樓主,這個(gè)收發(fā)調(diào)好以后,如果批量做的話,需要細(xì)調(diào)嗎?我們批量后給小學(xué)生做,他們能做嗎?
作者: 右走 時(shí)間: 2018-2-11 22:27
24L01 距離不能太遠(yuǎn)呀
作者: 王朗的誘惑 時(shí)間: 2018-2-14 14:32
批量的話要看是不是一起用,一起用的話把參數(shù)稍微改下吧,不然會(huì)互相干擾……不過(guò)我沒(méi)試過(guò),只是這么想……給小學(xué)生做?是焊接電路嗎?其實(shí)就算是搭接模塊我覺(jué)得也好難,還是得讓家長(zhǎng)或者老師陪同吧。
作者: 王朗的誘惑 時(shí)間: 2018-2-14 14:32
買那種帶功放的就遠(yuǎn)了。
作者: qjzyx 時(shí)間: 2018-2-14 15:56
學(xué)習(xí),
作者: 少年0508 時(shí)間: 2018-3-7 20:18
好東西,正需要呢,謝謝樓主
作者: Yinfeng_Wang 時(shí)間: 2018-3-15 09:37
感謝分享,剛好正在調(diào)試多通道的部分
作者: yanheile 時(shí)間: 2018-4-10 09:10
好東西謝謝分享值得尊敬!
作者: KKD326 時(shí)間: 2018-4-11 19:32
感謝樓主分享
作者: Howking 時(shí)間: 2018-4-12 15:43
你好,請(qǐng)問(wèn)你的問(wèn)題最后解決了嗎,我也遇到了和你一模一樣的問(wèn)題
作者: 老胖熊 時(shí)間: 2018-4-12 15:49
不錯(cuò)的資料,為什么兩個(gè)附件都報(bào)不安全的下載?有病毒嗎?
作者: Howking 時(shí)間: 2018-4-12 15:51
請(qǐng)問(wèn)你說(shuō)的硬件電源問(wèn)題是誰(shuí)的電源呀?nrf24l01的還是單片機(jī)的呀?
作者: Howking 時(shí)間: 2018-4-12 15:52
請(qǐng)問(wèn)你說(shuō)的硬件電源問(wèn)題是誰(shuí)的電源呀?nrf24l01的還是單片機(jī)的呀?求解答
作者: tikelu 時(shí)間: 2018-5-19 13:01
超給力,跟百度上找的東西完全不一樣
作者: bagel 時(shí)間: 2018-5-20 07:54
謝謝分享
作者: 王朗的誘惑 時(shí)間: 2018-5-27 13:28
誒呀呀,還有那么多人在看呀……其實(shí)通道應(yīng)該用單詞channel,不是pipe……英語(yǔ)水平太渣,希望大家不要介意……
作者: J.K.Who 時(shí)間: 2018-5-27 18:09
多謝分享,希望能解決我的問(wèn)題
作者: 582080360 時(shí)間: 2018-5-27 19:54
王朗的誘惑 發(fā)表于 2018-5-27 13:28
誒呀呀,還有那么多人在看呀……其實(shí)通道應(yīng)該用單詞channel,不是pipe……英語(yǔ)水平太渣,希望大家不要介意 ...
今天看的
作者: 582080360 時(shí)間: 2018-5-27 20:01
1475779659@qq.com,能不能發(fā)我郵箱啊,感謝
作者: ZYP999 時(shí)間: 2018-5-30 18:18
樓主你好,我需要做兩個(gè)從機(jī),一個(gè)主機(jī)。我的思路是修改從機(jī)的射頻通道。主機(jī)通過(guò)不停切換兩個(gè)射頻通道,這樣可行嗎
作者: 王朗的誘惑 時(shí)間: 2018-6-1 08:04
582080360 發(fā)表于 2018-5-27 20:01
1475779659@qq.com,能不能發(fā)我郵箱啊,感謝
已發(fā)。
作者: 王朗的誘惑 時(shí)間: 2018-6-1 08:04
ZYP999 發(fā)表于 2018-5-30 18:18
樓主你好,我需要做兩個(gè)從機(jī),一個(gè)主機(jī)。我的思路是修改從機(jī)的射頻通道。主機(jī)通過(guò)不停切換兩個(gè)射頻通道,這 ...
行吧。試試看。
作者: ffansgor 時(shí)間: 2018-6-29 17:44
多對(duì)一通信,并發(fā)量太大,RX FIFO老是FULL,難搞
作者: ffansgor 時(shí)間: 2018-6-29 17:46
多對(duì)一通信,并發(fā)量太大,RX FIFO 很容易就FULL,難搞啊
作者: FrozenForest 時(shí)間: 2018-8-9 17:04
非常好,謝謝樓主,我對(duì)照著研究研究
作者: lumingfei 時(shí)間: 2018-8-10 15:53
謝謝,真的很好,比百度找的好太多了
作者: lumingfei 時(shí)間: 2018-8-10 15:53
謝謝,這個(gè)真的太好了!
作者: 落葉飄飄 時(shí)間: 2018-8-24 11:49
樓主,我的發(fā)送端狀態(tài)一直是0x2e,應(yīng)該表示發(fā)送成功,接收端偶爾能接收到一包數(shù)據(jù),不知道怎么排查原因呢
作者: 王朗的誘惑 時(shí)間: 2018-8-28 12:09
確認(rèn)能收到,而且是偶爾能收到的話,會(huì)不會(huì)是有干擾?干擾嚴(yán)重的話丟包率會(huì)很高。周圍有沒(méi)有運(yùn)轉(zhuǎn)的直流電機(jī)什么的?
作者: prettytank 時(shí)間: 2018-9-25 16:30
這個(gè)必須頂啊,太好了,找的好辛苦
作者: f10ng 時(shí)間: 2018-9-25 19:07
好東西謝謝分享
作者: 淺淺淡淡ckl 時(shí)間: 2018-10-3 10:33
哇,沒(méi)黑幣了,肥肉眼前飄。。。謝謝樓主
作者: salasala.. 時(shí)間: 2018-12-18 10:23
謝謝樓主
作者: _晨昏線 時(shí)間: 2019-3-17 20:29
樓主,一直搞不懂資料說(shuō)的多對(duì)一通信?這個(gè)模塊能實(shí)習(xí)多對(duì)一的同時(shí)通信嗎?如果能又要如何實(shí)現(xiàn)
作者: ben0147 時(shí)間: 2019-3-17 21:38
謝謝樓主,謝謝分享
作者: 王朗的誘惑 時(shí)間: 2019-3-18 13:32
_晨昏線 發(fā)表于 2019-3-17 20:29
樓主,一直搞不懂資料說(shuō)的多對(duì)一通信?這個(gè)模塊能實(shí)習(xí)多對(duì)一的同時(shí)通信嗎?如果能又要如何實(shí)現(xiàn)
不能簡(jiǎn)單的一起發(fā),會(huì)卡住,得自己搞個(gè)通信協(xié)議,協(xié)調(diào)好所有模塊,一個(gè)一個(gè)排隊(duì)才行。
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |