AVR單片機和Matlab串口通信的計時器系統
Bytes available事件需要事先設置??梢允褂煤瘮祍et(obj,“By tesAvailableFcnMode”,“byte”)和set(obj,“BytesAvailableFcnCount”,3)。以上兩個函數設置為當串口檢測到輸入緩存中達到了3個字符的數據時,則觸發串口中斷。
② 串口中斷處理函數。串口中斷處理函數可以根據用戶需要自行定義。如串口讀中斷處理函數可以這樣定義:obj.BytesAvailableFcn=@receiveData。receiveData即為串口讀中斷處理函數。在讀中斷處理函數中可以進行串口讀操作,即將輸入緩存區中的數據讀到用戶自定義的存儲變量中,以備后續的數據處理與分析。[7]
4.2 Matlab基于GUI界面的計時器實現
利用Matlab的GUI設計出整體的控制界面,界面功能包括:可以設置串口參數如端口號、波特率、數據位、校驗位和停止位;計時器顯示窗口,能實時顯示計時器的時間;還具有實現打開串口、開始計時、停止、重置等功能的按鈕。設計的GUI控制界面如圖5所示。
圖5 GUI控制界面
單片機發過來的信號,觸發Matlab上的串口中斷,標志FLAGA/FLAGB置位,進而可以使計時器停止計時。同時,在GUI界面上,也可以通過手動按鍵使標志FLAGA/FLAGB置位,停止計時。計時部分的程序流程圖如圖6所示。
圖6 計時部分的程序流程圖
Matlab文件編譯完畢后,生成的可執行程序還需要Matlab環境的支持。為了使本設計更廣泛地應用到一般用戶,需要發布到沒有安裝Matlab的機器上運行,還要進行最后一項工作,即打包Matlab組件運行環境(Matlab Component Runtime,MCR)。將MCR與可執行程序一起打包,拷貝到其他沒有安裝Matlab的機器上,在該機器上安裝MCR,安裝完畢即可直接在該機器上運行編譯的Matlab可執行程序。[8]
5 系統設計及應用中需注意的問題
實際測試時,光電開關在環境照度較高時,一般都能穩定工作。但應回避將傳感器光軸正對太陽光、白熾燈等強光源。在不能改變傳感器(受光器)光軸與強光源的角度時,可在傳感器上方四周加裝遮光板或套上遮光長筒,以確保光電開關可靠工作。
另外,在ZigBee無線通信模塊配置時,應注意選擇合適的通信信道,以避免WiFi的干擾。在同一個網絡中,無論是終端設備還是中心節點,ID設置必須相同,模塊間才能正常通信。同一個網絡中,所有模塊的串口超時時間設置必須相同,否則串口通信不能同步,通信也會失敗。
結語
在本設計中,主要以ATmega16單片機作為信號采集系統,通過串口和上位機的Matlab進行信號通信,通信采用ZigBee無線通信模塊實現,使系統靈活性、可擴展性大大增強。本文利用Matlab GUI進行了包含一般界面元素的界面開發,在此基礎上,加入串口通信功能和計時器計時功能。GUI設計出的人機友好界面,使得系統簡單易懂,操作起來更加方便。
單片機相關文章:單片機教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
通信相關文章:通信原理
光電開關相關文章:光電開關原理
評論