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,就不會浪費時間做事情

記得想要得到正確的時間軸,取樣頻率要跟著改變

記得想要得到正確的時間軸,取樣頻率要跟著改變

記得想要得到正確的時間軸,取樣頻率要跟著改變

同場加映 改變顯示樣式的方法:

--

--