CCS Note 13: Fix CCS Graph Cannot Display Normally — A Way of Visualization without Physical Scope
來美國實習在家沒有示波器可以用,想說利用 CCS 的 graph 功能來觀察波形,但遇到一些 bug,主要是波形像是random取樣的一樣,毫無規律,測試了一番終於找到解決辦法,這篇文章應該把 graph 功能發揮到極致了
參考資料:7.7. Graph Tools — Code Composer Studio 12.7.0 Documentation
經過測試,以前聽說CCS Graph功能不能看高頻訊號,其實是錯誤的,時測候可以;
正確來說可以看,只是不能即時,因為顯示速度不夠快,資料傳輸頗慢,只要有耐心等緩衝的波形出來,還是可以看到高頻波形的
今天遇到的Bug情境說明:
今天用DAC以100 kHz更新頻率,打出60 Hz弦波訊號用100 kHzADC收回來(有先確認過波形是弦波沒錯),直接新增 ADC Result 的 watch window ,並且右鍵使用 graph 功能繪圖,有開連續更新模式,取樣率也夠高,但波形還是很醜,像是隨機的訊號
這邊先卡一個懸念,那個Sampling Rate 說不定根本沒用,感覺比較像是為了設定x軸用的(知道正確的時間軸,因為CCS只知道離散點數),他可能實際更新的頻率跟watch window 一樣。
思路:
其實感覺像是在錯誤的時間讀取資料,讀到不正確的東西,可能在ADC寫入期間就讀資料了,才導致資料異常。筆者做了實驗驗證過,就算是程式暫停情形下 graph 還是會不斷更新,這代表 graph 讀取,跟 MCU 寫入暫存器或程式運作,是完全不同步的,從 TI 的說明文件也可以得知這件事。
解法:
抱著試一試的心態,筆者就在想有沒有能讓兩者同步起來的方法,更精確地說,是在特定的時間更新 graph,只要在ADC EOC(End of Conversion)觸發的中斷中更新 graph,就可以保證資料正確完整了
剛好又看到 TI 文件說可以使用 Breakpoint 觸發 graph 更新,但沒有教學,此篇精華就在這裡,筆者找到方法可以更新了,也更深入了解 Breakpoint 的功能,還可以觸發計時事件(以CPU週期計算時間)。
只要開啟Refresh On Halt,不要開連續更新,只要程式暫停就會更新值,不論是手動的暫停,或者Breakpoint暫停都可以,如此我們就可以精準地控制甚麼時候要更新 graph 了,讚。
下一次個問題是,那 Breakpoint 平常一設定好,就會造成程式暫停,該怎麼看圖,一直手動案嗎?筆者發現CCS厲害的地方是他的Breakpoint還可以再做設定,Breakpoint的行為是可以手動決定的
先設定好Breakpoint,然後右鍵可以編輯屬性
平常會程式暫停都是因為Action設定為Remain Halted
我們只要改成設定為 Update View,並指定更新對象為我們的 graph 名稱,就可以做到在特定時間更新 graph 了,超爽
有個小Bug,Breakpoint 要先新增,再新增 graph,它才會有 graph可以選,反過來就找不到了
有個小Bug,Breakpoint 要先新增,再新增 graph,它才會有 graph可以選,反過來就找不到了
有個小Bug,Breakpoint 要先新增,再新增 graph,它才會有 graph可以選,反過來就找不到了
100 kHz取樣頻率,解析度超讚(只是超慢,上圖顯示前幾個sample點,下圖幾乎完整週期)
接著下去其實就可以寫程式來手動除頻,達到自己想要的取樣頻率了,裡面塞斷點可以用 NOP,就不會浪費時間做事情
記得想要得到正確的時間軸,取樣頻率要跟著改變
記得想要得到正確的時間軸,取樣頻率要跟著改變
記得想要得到正確的時間軸,取樣頻率要跟著改變