基于STC12C5A60S2單片機的NRF24L01模塊多機溫度通訊設(shè)計資料分享給大家
調(diào)試日志 第一階段:5月2日至5月19日(考試周結(jié)束前) 閱讀所需的NRF24L01無線射頻模塊、DS18B20溫度傳感器、LCD1602顯示屏、LCD12864顯示屏的相關(guān)資料。 第二階段:5月20日起 ***************************** 5月20日(周一) 第一步:lcd模塊調(diào)試和字符串轉(zhuǎn)化函數(shù) 因為無線發(fā)送和顯示需要將char值轉(zhuǎn)化成字符串函數(shù)進(jìn)行操作。要想對NRF24L01進(jìn)行調(diào)試,必須要有適當(dāng)?shù)娘@示設(shè)備,所以第一步先將LCD12864代碼編寫出來。 經(jīng)過查閱資料,整理出的主要代碼摘要如下所示。 Char值字符串轉(zhuǎn)換 - uchar *s(uchar unm)
- {
- uchar x,y,z,u,n;
- x=unm/100;
- y=unm%100;
- z=y/10;
- u=y%10;
- n=0;
- if (x!=0)
- {
- str[n]=x+48;
- n++;
- }
- if(!(x==0&z==0))
- {
- str[n]=z+48;
- n++;
- }
- str[n]=u+48;
- n++;
- str[n]='\0';
- return str;
- }
- void main()
- {
- uchar tmp;
- tmp=251;
- delay_ms(100);
- Lcd_Init();
- Lcd_Clr();
- delay_ms(2);
- Lcdshow(0,0,"NRF24L01發(fā)射測試");
-
-
- while(1)
- {
- Lcdshow(1,3,s (tmp));
- delay_ms(2000);
- Lcdshow(1,0," ");
- delay_ms(800);
- }
- }
復(fù)制代碼 屏幕中的現(xiàn)象是第一行顯示“NRF24L01發(fā)射測試”第二行閃爍顯示251。該結(jié)果表示LCD12864代碼能夠正常工作,字符串轉(zhuǎn)換函數(shù)正確。 在調(diào)試過程中遇到了一個顯示函數(shù)調(diào)用失敗的錯誤,不過用了extern定義了之后即解決問題。
第二步:建立單片機與RNF24L01的通訊 接下來就要測試NRF4L01模塊了,先測試最簡單的讀寫寄存器功能。 /*******NRF2402的SPI 寫時序*******///Reg int SPI_RW(int uuchar) { int bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) { RF_MOSI = (uuchar & 0x80);//輸出uuchar的最高位 uuchar = (uuchar << 1); //左移一位 RF_SCK = 1; //將時鐘線置1 uuchar |= RF_MISO; //同時讀取STATUS RF_SCK = 0; //然后再將時鐘線置0 }
return (uuchar); //返回讀取的值}
這一次在程序里加入了NRF24L01最簡單的讀寫寄存器時序的子函數(shù),后面的主函數(shù)里只有一句status=SPI_Read(0x07);是從STATUS寄存器(07H)中讀取模塊的狀態(tài)。然后用Lcdshow(1,4,s(status));在屏幕上閃爍著顯示出來14。這就是最簡單的一個字節(jié)NRF24L01模塊的狀態(tài)寄存器值,這就標(biāo)志著接口都連接并定義正確,NRF24L01已正常工作,串行讀寫程序都能正確運行。STATUS值是1110b,十進(jìn)制是14。 ************************************ 5月21日(周日)
第三步:與NRF24L01的串行通訊操作各種指令調(diào)試 這次在主函數(shù)里用讀數(shù)據(jù)函數(shù)來讀取發(fā)送機身份地址寄存器TX_ADDR(0x10),把5個字節(jié)的數(shù)據(jù)存在數(shù)組當(dāng)中,然后顯示發(fā)送機地址的數(shù)值。這個地方被一個問題困擾了很長時間,就是顯示出來的地址是2222231,然后屏蔽某些位的時候總是顯示幾個2,最后是31不變,因為起初對這個寄存器的原理還不是很清楚,所以以為是顯示格式問題,幾乎花了一整天的時間也沒弄出原因來,就在即將放棄的時候發(fā)現(xiàn)了網(wǎng)上一篇講這方面的文章,忽然就茅塞頓開,顯示的是上電復(fù)位值五個E7,十進(jìn)制就是231。因為并沒有寫地址數(shù)據(jù)進(jìn)寄存器,而且又沒有留夠顯示空間,所以才出現(xiàn)了上面的這種問題。這個問題險些導(dǎo)致我放棄,給了我很大的教訓(xùn),拿到東西不能糊里糊涂的急于上手,一定要搞明白原理,要不然幾乎必定會出現(xiàn)問題而且無從解決。 ***************************** 5月22日(周一) 在昨天函數(shù)的基礎(chǔ)上,在讀取指令前面放進(jìn)一句SPI_Write_Buf(STA_MARK_TX+STA_MARK_MX,TX_ADDRESS,5)指令+寄存器,數(shù)組,寫入數(shù)據(jù)個數(shù)。 把5 4 3 2 1這個表示地址的數(shù)組寫入,然后顯示出寫入后地址。這表示指令調(diào)試完成! 第四步:射頻發(fā)送調(diào)試 對數(shù)據(jù)包緩沖狀態(tài)寄存器FIFO_STATUS的第四位的值為1還是0來判斷數(shù)據(jù)是否成功發(fā)送,在進(jìn)行之前需要關(guān)閉自動應(yīng)答和自動發(fā)送。寄存器的值由00010001變?yōu)?0000001又變?yōu)?0010001,說明數(shù)據(jù)成功存入緩沖區(qū),然后發(fā)送完畢,已將緩沖區(qū)的數(shù)據(jù)清空。 *******************************************************************************5月23日(周二) 昨天已經(jīng)完成了對于發(fā)送機的調(diào)試,今天我又借了幾塊開發(fā)板來進(jìn)行完整的收發(fā)測試。 在發(fā)送機的程序上,基本函數(shù)模塊與發(fā)送機一致,在初始化函數(shù)中寫入0通道地址,在模塊接收過程中,如果接收到前面設(shè)定好的頻率的載波信號的時候CD置為1,沒有收到載波信號就為0,寫一個主函數(shù)如果CD為1就在屏幕上顯示1并延時一段時間,如果為0就顯示0并持續(xù)刷新。在實際結(jié)果中,只要頻率符合,不管通道地址是否一致,CD的值都會有變化。在調(diào)試過程中均設(shè)置最大發(fā)射功率以保證調(diào)試的成功率。 在修改了一些小毛病之后,事實可以證明發(fā)送模塊可以發(fā)送信號且能被接收模塊接收到。 繼續(xù)修改程序讓數(shù)據(jù)包得以完整接收,主函數(shù)前部分不變,進(jìn)入循環(huán)后SetRX_Mode();語句進(jìn)行一次接收,后面if(NRF24L01_PxPackt(RxBuf))是進(jìn)行接收數(shù)據(jù)的判斷,,如果接受到數(shù)據(jù),那就將這32個接收到的數(shù)據(jù)顯示出來,然后延時一段時間,如果沒有接到數(shù)據(jù)就再次進(jìn)入循環(huán)接收。這里使用的是一致的地址。
************5月24日(周三)【滿課】********************* 5月25日(周四) 考慮到時間因素以及我們的實際應(yīng)用場合,溫度值是由從機不斷檢測發(fā)送,主機不斷刷新的,所以不再進(jìn)行自動應(yīng)答和自動重發(fā)功能調(diào)試。 將已經(jīng)基本成型的NRF24L01文件和已有的DS18B20、LCD1602、LCD12864的c文件整合,得到一對一的溫度檢測系統(tǒng)。然后考慮多機通信方案。我想到的可行方案共有三種,第一種是跳頻通信,優(yōu)點是可以無限擴展,缺點是操作較為復(fù)雜;第二種是不同發(fā)送地址,由主機識別地址來區(qū)分從機的編號,該方案最多只能六對一。最后一種是所有從系均使用相同地址來進(jìn)行發(fā)送,在每一次發(fā)送的溫度值字符串末尾加上一個獨有的用于身份識別的字符,該方案操作起來極為簡單且經(jīng)過驗證運行穩(wěn)定 。個人推測,當(dāng)從機數(shù)量過多,或者發(fā)送數(shù)據(jù)量較大,發(fā)送頻率較為頻繁時,系統(tǒng)極易出現(xiàn)不穩(wěn)定現(xiàn)象。不過對于這個多機溫度檢測系統(tǒng),這個問題還是不存在的。 第三階段:作品基本完成 5月26日——28日 總結(jié)文檔,繪制原理圖并且試圖添加一些附加功能,例如OLED,單總線多DS18B20,開機密碼等功能,但是因為時間緊迫和個人時間規(guī)劃問題未能成功。至此多機溫度檢測系統(tǒng)已基本完成,能夠?qū)崿F(xiàn)題目所要求的內(nèi)容。
全部資料51hei下載地址(內(nèi)含源碼與清晰圖片):
張中-B計劃2.zip
(414.3 KB, 下載次數(shù): 59)
2018-5-6 18:04 上傳
點擊文件名下載附件
|