久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3598|回復: 2
打印 上一主題 下一主題
收起左側

單片機NRF24L01多機溫度通訊調試日志與源碼分享

[復制鏈接]
跳轉到指定樓層
樓主
基于STC12C5A60S2單片機的NRF24L01模塊多機溫度通訊設計資料分享給大家
調試日志
第一階段:5月2日至5月19日(考試周結束前)
閱讀所需的NRF24L01無線射頻模塊、DS18B20溫度傳感器、LCD1602顯示屏、LCD12864顯示屏的相關資料。
第二階段:5月20日起
*****************************
5月20日(周一)
第一步:lcd模塊調試和字符串轉化函數
因為無線發送和顯示需要將char值轉化成字符串函數進行操作。要想對NRF24L01進行調試,必須要有適當的顯示設備,所以第一步先將LCD12864代碼編寫出來。
經過查閱資料,整理出的主要代碼摘要如下所示。
Char值字符串轉換
  1. uchar *s(uchar unm)
  2. {
  3.               uchar x,y,z,u,n;
  4.               x=unm/100;
  5.               y=unm%100;
  6.               z=y/10;
  7.               u=y%10;
  8.               n=0;
  9.               if (x!=0)
  10.               {
  11.                             str[n]=x+48;
  12.                             n++;
  13.               }
  14.               if(!(x==0&z==0))
  15.               {
  16.                             str[n]=z+48;
  17.                             n++;
  18.               }
  19.               str[n]=u+48;
  20.               n++;
  21.               str[n]='\0';
  22.               return str;
  23. }
  24. void main()
  25. {
  26.               uchar tmp;
  27.               tmp=251;
  28.               delay_ms(100);
  29.               Lcd_Init();
  30.               Lcd_Clr();
  31.               delay_ms(2);
  32.               Lcdshow(0,0,"NRF24L01發射測試");
  33.             
  34.             
  35. while(1)
  36.               {
  37.                             Lcdshow(1,3,s (tmp));
  38.                      delay_ms(2000);
  39.                             Lcdshow(1,0,"            ");
  40.                             delay_ms(800);
  41.               }
  42. }
復制代碼
屏幕中的現象是第一行顯示“NRF24L01發射測試”第二行閃爍顯示251。
該結果表示LCD12864代碼能夠正常工作,字符串轉換函數正確。
在調試過程中遇到了一個顯示函數調用失敗的錯誤,不過用了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最簡單的讀寫寄存器時序的子函數,后面的主函數里只有一句status=SPI_Read(0x07);是從STATUS寄存器(07H)中讀取模塊的狀態。然后用Lcdshow(1,4,s(status));在屏幕上閃爍著顯示出來14。這就是最簡單的一個字節NRF24L01模塊的狀態寄存器值,這就標志著接口都連接并定義正確,NRF24L01已正常工作,串行讀寫程序都能正確運行。STATUS值是1110b,十進制是14。
************************************
5月21日(周日)

第三步:與NRF24L01的串行通訊操作各種指令調試


這次在主函數里用讀數據函數來讀取發送機身份地址寄存器TX_ADDR(0x10),把5個字節的數據存在數組當中,然后顯示發送機地址的數值。這個地方被一個問題困擾了很長時間,就是顯示出來的地址是2222231,然后屏蔽某些位的時候總是顯示幾個2,最后是31不變,因為起初對這個寄存器的原理還不是很清楚,所以以為是顯示格式問題,幾乎花了一整天的時間也沒弄出原因來,就在即將放棄的時候發現了網上一篇講這方面的文章,忽然就茅塞頓開,顯示的是上電復位值五個E7,十進制就是231。因為并沒有寫地址數據進寄存器,而且又沒有留夠顯示空間,所以才出現了上面的這種問題。這個問題險些導致我放棄,給了我很大的教訓,拿到東西不能糊里糊涂的急于上手,一定要搞明白原理,要不然幾乎必定會出現問題而且無從解決。
*****************************
5月22日(周一)
在昨天函數的基礎上,在讀取指令前面放進一句SPI_Write_Buf(STA_MARK_TX+STA_MARK_MX,TX_ADDRESS,5)指令+寄存器,數組,寫入數據個數。
把5 4 3 2 1這個表示地址的數組寫入,然后顯示出寫入后地址。這表示指令調試完成!
第四步:射頻發送調試
對數據包緩沖狀態寄存器FIFO_STATUS的第四位的值為1還是0來判斷數據是否成功發送,在進行之前需要關閉自動應答和自動發送。寄存器的值由00010001變為00000001又變為00010001,說明數據成功存入緩沖區,然后發送完畢,已將緩沖區的數據清空。
*******************************************************************************5月23日(周二)
昨天已經完成了對于發送機的調試,今天我又借了幾塊開發板來進行完整的收發測試。
在發送機的程序上,基本函數模塊與發送機一致,在初始化函數中寫入0通道地址,在模塊接收過程中,如果接收到前面設定好的頻率的載波信號的時候CD置為1,沒有收到載波信號就為0,寫一個主函數如果CD為1就在屏幕上顯示1并延時一段時間,如果為0就顯示0并持續刷新。在實際結果中,只要頻率符合,不管通道地址是否一致,CD的值都會有變化。在調試過程中均設置最大發射功率以保證調試的成功率。
在修改了一些小毛病之后,事實可以證明發送模塊可以發送信號且能被接收模塊接收到。
繼續修改程序讓數據包得以完整接收,主函數前部分不變,進入循環后SetRX_Mode();語句進行一次接收,后面if(NRF24L01_PxPackt(RxBuf))是進行接收數據的判斷,,如果接受到數據,那就將這32個接收到的數據顯示出來,然后延時一段時間,如果沒有接到數據就再次進入循環接收。這里使用的是一致的地址。

************5月24日(周三)【滿課】*********************
5月25日(周四)
考慮到時間因素以及我們的實際應用場合,溫度值是由從機不斷檢測發送,主機不斷刷新的,所以不再進行自動應答和自動重發功能調試。
將已經基本成型的NRF24L01文件和已有的DS18B20、LCD1602、LCD12864的c文件整合,得到一對一的溫度檢測系統。然后考慮多機通信方案。我想到的可行方案共有三種,第一種是跳頻通信,優點是可以無限擴展,缺點是操作較為復雜;第二種是不同發送地址,由主機識別地址來區分從機的編號,該方案最多只能六對一。最后一種是所有從系均使用相同地址來進行發送,在每一次發送的溫度值字符串末尾加上一個獨有的用于身份識別的字符,該方案操作起來極為簡單且經過驗證運行穩定 。個人推測,當從機數量過多,或者發送數據量較大,發送頻率較為頻繁時,系統極易出現不穩定現象。不過對于這個多機溫度檢測系統,這個問題還是不存在的。
第三階段:作品基本完成
5月26日——28日
總結文檔,繪制原理圖并且試圖添加一些附加功能,例如OLED,單總線多DS18B20,開機密碼等功能,但是因為時間緊迫和個人時間規劃問題未能成功。至此多機溫度檢測系統已基本完成,能夠實現題目所要求的內容。



全部資料51hei下載地址(內含源碼與清晰圖片)
張中-B計劃2.zip (414.3 KB, 下載次數: 59)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:327120 發表于 2018-5-10 20:48 | 只看該作者
厲害了
回復

使用道具 舉報

板凳
ID:16255 發表于 2018-5-11 18:22 | 只看該作者
有做出來的實物嗎?發出來大家學習學習。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色欧美综合 | 国产一区二区三区www | 国产精品久久久久久久 | 午夜视频在线 | 欧美三级电影在线播放 | 五月婷六月丁香 | 日韩一区不卡 | 国产精品毛片av一区 | 精品国产一区二区三区性色av | 在线中文av | a级在线免费观看 | а√中文在线8 | 81精品国产乱码久久久久久 | 性色av香蕉一区二区 | 在线观看av网站永久 | 日韩欧美在线免费观看视频 | 日日噜噜噜夜夜爽爽狠狠视频, | 久久精品网 | 国产成年人视频 | 91久久精品视频 | 亚洲一区二区三区高清 | 国产欧美三区 | 国产日韩欧美 | 国产目拍亚洲精品99久久精品 | 成人在线视频免费看 | 欧美一区二区三区视频 | 刘亦菲国产毛片bd | 亚洲国产精品一区二区三区 | 国产精品久久久久久久久久久新郎 | 日韩精品一区二区三区在线 | 亚洲免费一区二区 | 国产精品久久久久久久久婷婷 | 成人久久视频 | 自拍偷拍中文字幕 | 亚洲人成在线观看 | 欧美黄色一级毛片 | 亚洲精品美女视频 | 日日噜噜噜夜夜爽爽狠狠视频, | 国产精品久久av | 精品国产欧美 | 久久国产精品色av免费观看 |