有關光照模塊的具體問題及解決方案

有關光照模塊的具體問題及解決方案 

問題1:串口助手無法打印出數據

分析問題:串口未接通,或許是缺少了什麼必要的東西,找串口相關知識,

解決過程:重新定義光照模塊引腳,更改數據處理的位置(採集數據就直接處理),直接在mread()函數內完成對對數據的處理,並進行測試;

解決方法:Use MicroLIB未被選中,是KEIL自帶的一個簡易的庫,使用printf的時候重映像使用;選中後,使用printf函數時,就會從串口1輸出字符串,直接默認定向到串口1,在串口助手上打印出來1;

結   果:可以打印數據,產生問題2;

 

問題2:數據接收不穩定,時好時壞

分析問題:接觸不良,包括USB與電腦,杜邦線與芯片上的排針,模塊與芯片之間的杜邦線連接,都會導致數據傳輸不穩定的情況;

採取措施:使用萬用表測量模塊vcc與gnd兩端電壓,與數據手冊相對應(光照模塊正常工作的額定電壓範圍);使用標有二極管的那個檔位檢查模塊線路的通斷情況,模塊與32                芯片的連接情況,得出的結果是,模塊與32板子的接觸不良,不穩定;使用萬用表電壓檔位,測量模塊工作電壓,在額定值範圍內;,二極管圖標檔位檢測線路,斷斷                  續續,不穩定;(線路接通則響,斷路則不響)

 

 

解決方法:更換下載器與電腦的接口,更換杜邦線,使各個接線點接觸良好,排除線路連接問題;

結    果:打印數據穩定,產生問題三。

 

問題3:數據打印,但一直打印同一組數據

可能原因:1>可以打印出東西來,說明串口到電腦是相通的,排除串口的問題;2>一直回顯變量的初始值0,可能是模塊採集的數據沒有傳到串口中,打印之前變量未被重新賦值;

解決過程:使用示波器採集sda與scl端口的波形,未採集到任何波形,說明光照模塊與單32單片機之間沒有數據的傳輸;

左圖爲引腳初始化後,右圖爲引腳未初始前;

解決辦法:檢查代碼,發現是引腳未被初始化,導致光照模塊採集的數據發送不出去,導致這個問題的產生,將引腳初始化加進去之後再次用示波器檢測,得到兩次不同的結果,如上圖:

結     果:運行結果如下,產生問題4;

 

 

問題4:數據一直是一個特殊值65535(2^16-1)

可能原因:寫測量指令與讀測量結果都是由IIC接口完成,查閱IIC資料得,模塊從地址不對應時會通過IIC傳輸數據的初始值0xFFFF,即65535;指令下達的不正確會產生類似的問題,包括 IIC從屬地址與命令,(可以再數據手冊中找到對應的功能代碼及指令);

解決過程:從最終打印的變量一步一步往回倒推,找到最初的變量將其打印出來,是符號?  F  B,(無符號字符型數據);

一步一步打印出數據,查看是哪一部出路問題;

解決辦法:根據數據手冊所描述,ADDR接GND時從屬地址爲0x46,接vcc端時從屬地爲0xA8;根據數據手冊所提供的信息將其修改過來;

結     果:得到的數值是固定值,數值沒有實時更新;


問題5:數值不實時更新,如上圖

可能原因:數值未被實時賦值,打印出來的數據沒變化一直沒有更改;

解決過程:認爲是延時的問題,延時太短數據來不及重新賦值;

更改延時函數,使用Systick普通計數模式控制延時,這樣比之前的while(i--)循環延時要精確一些,增加延時間隙,讓變量能夠被實時賦值;

改變延時並未達到理想的效果;

解決方法:mread()函數裏面,劃紅線部分是對數據dis_data進行處理賦值給date[0],沒有再對其進行改變,之後通過串口打印date[0],造成上述結果;

將date [0]更改爲date[i],i與for循環中的i一致,取得三次數據的平均值後,打印出date[0];date[i]隨着for循環i的增加而實時變換,就達到了數據實時變換的供能;

 

得到最終結果:

改變外界環境(用手電筒補光,或拿東西蓋住光照傳感器),使得數據有變換,模塊調通,還缺一個步驟,需要一個轉換公式,採集數據總結規律,將公式寫進代碼之中,就可以得到想要的結果;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章