找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11102|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Proteus教程第三部分:VSM虛擬系統(tǒng)模型

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:290266 發(fā)表于 2018-4-5 02:58 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
本系列完整的pdf版本教程下載(共150頁pdf)
http://www.torrancerestoration.com/bbs/dpj-111690-1.html

VSM 虛擬系統(tǒng)模型

介紹

本部分教程的目的是向您介紹如何使用 Proteus VSM 和 VSM Studio IDE 對帶有微控制器的系統(tǒng)進(jìn)行交互式仿

真。本部分教程的重點(diǎn)將放在仿真器和 IDE 的實(shí)際使用上,針對每一個主題的詳細(xì)說明請參考幫助文檔中的內(nèi) 容。本部分教程不包含原理圖的繪制,如果你對 ISIS中的原理圖繪制不熟悉,你應(yīng)該先花時間學(xué)習(xí)第一部分教 程中的內(nèi)容。


我們將使用預(yù)先畫好的微芯(Microchip)公司的 F1 評估板原理圖來學(xué)習(xí)本教程的內(nèi)容,如下所示。


通過本教程,我們不僅可以掌握 VSM Studio IDE 的基本仿真功能,還可以了解 Proteus VSM 中的各種調(diào)試和 測試工具。要學(xué)習(xí)本教程你將需要:

          必須安裝 Proteus 8.0 版本或更高版本的軟件。如果沒有購買專業(yè)版的軟件,可以從 Labcenter 的網(wǎng)站 上免費(fèi)下載這個軟件的試用版本,或者聯(lián)系 Proteus 軟件的大中華區(qū)總代理-廣州市風(fēng)標(biāo)電子技術(shù)有限公司

-獲取支持。
          必須安裝 9.8 版本或以上的 Hi-Tech PIC16 編譯器軟件。在 Proteus 軟件(VSM Studio IDE)中就可以進(jìn) 行這個編譯器的下載和安裝,下載和安裝的過程將在本教程后面的工程設(shè)置部分進(jìn)行介紹。


即使你沒有安裝符這些符合要求的軟件,我們?nèi)匀唤ㄗh你讀完本教程。因?yàn)樗嘘P(guān)于調(diào)試技術(shù)的知識都是通用
的,你如果使用舊版本的軟件來進(jìn)行設(shè)計(jì)開發(fā),這些知識可能也會有幫助。


建立工程


我們需要做的第一件事是建立 Proteus 8 的工程,由于我們使用預(yù)先繪制好的原理圖,即一塊虛擬開發(fā)板,因
此建立工程的過程就變得非常簡單:

從 Proteus 的主頁啟動新建工程向?qū),選擇“從開發(fā)板”選項(xiàng),在“微控制器系列”列表框中選擇 PIC16,然 后從“開發(fā)板”列表框選擇 F1 評估板(F1 Releas),點(diǎn)擊完成導(dǎo)入工程。




導(dǎo)入項(xiàng)目之后,在 Proteus 中可以看到兩個選項(xiàng)卡:F1 評估電路板的原理圖模塊和包含 Microchip 標(biāo)準(zhǔn)硬件驅(qū) 動源代碼的 VSM Studio IDE,如下圖所示:



我們先來編譯源代碼,將生成的固件(firmware)進(jìn)行仿真調(diào)試。


編譯器配置


Microchip 提供的源代碼是使用 Hi-Tech PIC16 編譯器編寫的,因此為了能夠成功編譯并生成固件,我們需要安
裝這個工具。切換到 VSM Studio 選項(xiàng)卡,從“系統(tǒng)”菜單啟動“編譯器配置”對話框。





這個對話框列出了所有支持的編譯器,并指示是否被安裝和配置。按下對話框底部的“檢查全部”按鈕,Proteus
將掃描你的計(jì)算機(jī),查找安裝好的編譯器。如果找到 Proteus 支持的編譯器,Proteus 將自動進(jìn)行配置并在
Proteus 中調(diào)用這些編譯器編譯源代碼。

開源的編譯器能夠直接從 Labcenter 的服務(wù)器上下載和安裝。需要收費(fèi)的編譯器,Proteus 將提供鏈接到相應(yīng)供 應(yīng)商網(wǎng)站的下載頁面。在這個例子里,使用的是 Hi-Tech 編譯器,如果還沒有安裝,則需要從微芯的網(wǎng)站下載:


1.              點(diǎn)擊編譯器旁邊的“打開網(wǎng)站”按鈕;

2.              下載并安裝編譯器,如果沒有購買,可以使用 Lite mode,或者選擇使用 45 天的評估版,如下圖所示:


3.              安裝完成后點(diǎn)擊對話框底部的“檢查全部”按鈕,Proteus 將自動重新檢查所有的編譯器并進(jìn)行配置, 使得它能夠在 Proteus 中編譯源代碼。




運(yùn)行這個命令以后,你應(yīng)該注意到對話框中的 Hi-Tech 編譯器被標(biāo)記成已安裝。在 IDE 底部的輸出窗口也會報
告編譯器檢查的結(jié)果。





到了這里,編譯器、源代碼和原理圖已全部準(zhǔn)備好了,使用 VSM Studio“構(gòu)建”菜單下的“構(gòu)建工程”命令(或 構(gòu)建圖標(biāo))編譯固件。


編譯器的輸出將顯示在 IDE 的底部面板中,編譯完成以后,你能得到一個編譯成功的信息。



接下來運(yùn)行仿真,在虛擬硬件上測試編譯后的代碼。

VSM Studio 會自動配置常見的編譯器選項(xiàng)用于正確編譯你的工程。如果你需要調(diào)整這些編譯器設(shè)置
(例如鏈接到外部庫),你可以通過“構(gòu)建”菜單下的“工程設(shè)置”對話框進(jìn)行調(diào)整。


運(yùn)行仿真


只需要簡單的按下 Proteus 左下角“仿真控制面板”中的運(yùn)行按鈕就可以運(yùn)行仿真。



現(xiàn)在,軟件將自動切換到原理圖頁碼進(jìn)行仿真,原理圖中的 LCD 面板將顯示默認(rèn)的時間。


F1 評估板的示例程序可以顯示三種模式,時間,一溫度,和電位器的 ADC 采樣值?梢酝ㄟ^按下原理圖中的 控制按鈕來循環(huán)切換顯示模式,進(jìn)行交互式仿真。



當(dāng)處于溫度顯示模式時,你可以在 MCP9800 傳感器上通過點(diǎn)擊遞增或遞減按鈕來調(diào)整溫度值。當(dāng)前的溫度值 是通過 I2C 總線傳輸?shù)?PIC 處理器中,經(jīng)過處理以后顯示在 LCD 上的。




當(dāng)處于電壓顯示模式時,可以調(diào)節(jié)電位器,處理器將轉(zhuǎn)換后的電壓值顯示在 LCD 上。




這個 PIC16 微控制器有一個 10 位的 ADC,所以采樣得到的數(shù)據(jù)的顯示范圍是 0 到 1023,對應(yīng)的電壓范圍是
0-3.3V。最后,按下動畫控制面板的停止按鈕可以停止仿真。




注意事項(xiàng)


當(dāng)我們在 Proteus 中運(yùn)行仿真時,仿真結(jié)果可能不會立刻顯現(xiàn),但在你能看到的仿真結(jié)果背后,Proteus 軟件進(jìn)
行了大量的處理和計(jì)算工作:

首先,Proteus 原理圖中的微控制器執(zhí)行編譯后的固件文件與真實(shí)世界中的 PIC 執(zhí)行編程的固件完全一樣。使 用 VSM Studio IDE 只是把燒寫 PIC 芯片的過程,變成把編譯成功后得到的文件發(fā)送給原理圖。


其次,你可能會注意到,原理圖中幾乎所有導(dǎo)線都使用了終端來結(jié)尾,并且終端都有一個名字。在原理圖中, 相同名字的兩個終端被認(rèn)為是相連的(像有一根虛擬的導(dǎo)線)。例如,溫度傳感器旁邊的 RC3 和 RC4 終端連 接到了 PIC 處理器中的 I2C 接口的兩個引腳上。我們喜歡使用這種方式進(jìn)行原理圖連線,因?yàn)榭梢员苊鈱?dǎo)線的交叉,并且可以將原理圖分割成容易識別的邏輯塊。如果你要了解更多關(guān)于這種連接方式的信息,可以閱讀 ISIS 的參考手冊。


最后,在 Proteus 軟件底部的狀態(tài)欄顯示了仿真運(yùn)行的時間。仿真很可能不是實(shí)時的,這取決于你的計(jì)算機(jī)的
性能、處理器的速度和原理圖的復(fù)雜程度。狀態(tài)欄顯示的執(zhí)行時間就是虛擬仿真世界的時間。


例如,對于一個特別慢的計(jì)算機(jī),在這個仿真中調(diào)節(jié)到時鐘模式時,仿真中 LCD 屏上顯示的時鐘與現(xiàn)實(shí)世界墻 上的掛鐘不是同時前進(jìn)的,但它卻總是會和狀態(tài)欄的仿真時間同步前進(jìn)。



寫固件程序


我們已經(jīng)了解了仿真的整個工作流程,現(xiàn)在就讓我們給這個程序添加一些功能。我們知道通過按下原理圖中的

按鍵可以在時間、溫度和電壓模式之間進(jìn)行切換,這樣我們就能很容易的在這里添加其它操作模式。首先,切 換到 VSM Studio IDE 選項(xiàng)卡,打開文件 main.c(在項(xiàng)目中雙擊 main.c)。





你會在這個文件的頂部看到有一些函數(shù)原型以及操作模式的枚舉類型定義。我們需要為我們的“測試模式”添
加一個新的函數(shù)原型,還要在這個枚舉類型中添加一個相對應(yīng)的值,可以像下圖一樣進(jìn)行添加:


接下來,我們需要找到按鈕切換的程序塊來添加新的操作模式。最簡單的方法就是搜索已有模式中的一個,我 們可以在 VSM Studio 右鍵點(diǎn)擊編輯窗口,從彈出的菜單中選擇“查找”,在查找內(nèi)容下輸入“MODE_POT”。



查找到的第一個結(jié)果就是我們正要尋找的,也就是關(guān)于按鍵釋放后用于設(shè)置顯示模式的 switch 語句。在這里我 們只需要添加新的操作模式:


注意,MODE_TEST 前面的 case 語句也一樣需要修改顯示模式。

在這段代碼的下面還有另一個 switch 語句,用于執(zhí)行當(dāng)前的顯示模式。同樣,我們需要加入我們的 case 語句 來調(diào)用我們的函數(shù)。




最后一步是添加 display_test()函數(shù),可以在這里添加進(jìn)入我們的操作模式后要做的事情。我們在 main.c 文件的
底部加入這個函數(shù)的定義。


在這里你可以嘗試添加任何你想添加的動作,但我們只做一些簡單的動作,比如在顯示器上顯示一個固定值, 并在 LED 上顯示二進(jìn)制的計(jì)數(shù)器。



由于我們是使用 PORTE 來控制 LED,所以我們需要配置端口的引腳,在 main()函數(shù)頂部的外設(shè)配置部分設(shè)置
ANSELE。

最后一步是構(gòu)建工程。如果你的程序有錯誤,在輸出窗口會得到編譯錯誤,單擊這個錯誤,會指示出問題所在 的位置。


但有些錯誤,像鏈接錯誤,是不能指出具體出錯位置的。這種情況下,你可能需要修改工程設(shè)置選

項(xiàng)才能修正鏈接錯誤,例如需要在工程設(shè)置中加入“函數(shù)庫”的文件夾。 當(dāng)我們這次運(yùn)行仿真時,我們使用按鍵來切換操作模式,直到進(jìn)入我們自己的模式(時間->溫度->電位器->測試),

我們應(yīng)該能看到顯示器上顯示的數(shù)“1111”以及 LED 上的計(jì)數(shù)器。


這個例子實(shí)現(xiàn)的功能非常簡單,只是用于說明編寫代碼、編譯和仿真的整個流程。


調(diào)試彈出窗口


到目前為止,我們在 VSM Studio 頁面中完成了代碼的編寫,并在原理圖頁面進(jìn)行了仿真。如果我們有兩個顯

示器,可以把其中一個頁面拖到另一個顯示器中,在兩個顯示器中同時觀察這兩個頁面。 但我們在調(diào)試時,通常更感興趣的是觀察代碼的單步運(yùn)行,同時觀察原理圖的某一小部分進(jìn)行驗(yàn)證。Proteus

提供了一個調(diào)試彈出窗口控件,在仿真調(diào)試的過程中,可以將原理圖中選定的一部分電路在 VSM Studio 頁面
中顯示出來。這對于我們只有一個顯示器的用戶來說將變得非常方便,不需要經(jīng)常在原理圖頁面和 VSM Studio

頁面之間進(jìn)行切換,大大提高我們的調(diào)試效率。 在我們的教程的例子中,可以以溫度傳感器來說明實(shí)時監(jiān)控窗口的使用,步驟如下:

1) 切換到 ISIS 選項(xiàng)卡,選擇“調(diào)試彈出模式”圖標(biāo)。

2) 圍繞溫度傳感器從左上角開始拖出一個框。


3) 完成以后,你應(yīng)該會看到圍繞溫度傳感器有一個藍(lán)色的虛線框。


如果做的過程中出現(xiàn)問題,可以右鍵雙擊虛線框進(jìn)行刪除。同樣,如果虛線框的位置有問題,也可 以右鍵點(diǎn)擊虛線框然后選擇“移動對象”菜單進(jìn)行移動。


其它可能需要我們在仿真過程中進(jìn)行觀察和控制的對象有按鍵、電位器和顯示元件(LCD)。我們可以重復(fù)上 面的操作,圍繞這些器件各自拖出虛線框,完成以后,你的原理圖看起來應(yīng)和下圖一樣。




因?yàn)槲覀冎付擞行棾龃翱冢@將會工作在 VSM Studio,F(xiàn)在如果你按下“運(yùn)行”按鈕進(jìn)行仿真,并切換到
VSM Studio 選項(xiàng)卡,在 IDE 的右邊將顯示我們剛才選擇的部分原理圖。





當(dāng)全速運(yùn)行代碼時,VSM Studio 頁面中的源代碼和變量的區(qū)域?qū)@示“仿真正在運(yùn)行”的消息。我 們將在下一節(jié)介紹調(diào)試工具的使用。


調(diào)試彈出窗口非常有用,它不僅將原理圖中標(biāo)記的區(qū)域顯示到調(diào)試環(huán)境中,而且還可以進(jìn)行交互仿真。例如, 如果點(diǎn)擊按鍵 S1,切換程序模式,你應(yīng)該會看到 LCD顯示 I2C 溫度傳感器的溫度值。如果你再調(diào)節(jié)溫度傳感 器的溫度,LCD 會反映出溫度的變化。



切換回到原理圖頁面,你會看到原理圖中的狀態(tài)和調(diào)試彈出窗口中的一樣。當(dāng)停止仿真(從仿真控制面板), 調(diào)試彈出窗口會消失,VSM Studio 將從調(diào)試狀態(tài)切換回設(shè)計(jì)編輯狀態(tài),你可以再次編輯和編譯你的源代碼。


只有當(dāng)仿真停止以后,你才能在原理圖中創(chuàng)建或調(diào)整調(diào)試彈出窗。仿真還在運(yùn)行時,你也可以在 VSM

Studio 頁面通過拖動來調(diào)整調(diào)試彈出窗口的大小。 現(xiàn)在我們已經(jīng)配置完調(diào)試彈出窗口,來看看如何進(jìn)行使用調(diào)試工具進(jìn)行代碼的調(diào)試。


基本調(diào)試


Proteus VSM 的最強(qiáng)大的功能就是代碼和電路的聯(lián)合調(diào)試。我們已經(jīng)知道如何在 VSM Studio 中編寫代碼,也
知道怎樣在運(yùn)行仿真時進(jìn)行觀察,F(xiàn)在我們來看看怎樣進(jìn)行代碼的單步運(yùn)行。

首先確保 Proteus 沒有運(yùn)行仿真,處于停止?fàn)顟B(tài)中。通過“仿真控制面板”暫停按鈕啟動仿真并暫停。




如上圖所示,Proteus 將自動切換到 VSM Studio 頁面,我們可以看到:調(diào)試彈出窗口顯示在右手邊;主面板報 告“沒有源代碼”的信息;程序變量的列表放在屏幕的底部。在這個階段,仿真處于“已經(jīng)啟動”的狀態(tài),電 路處在一個穩(wěn)定的工作點(diǎn),代碼還沒有執(zhí)行,也沒有時間的消逝。


源代碼窗口沒有顯示任何的源代碼,這是因?yàn)樵诋?dāng)前的程序計(jì)數(shù)器(PC=0)中沒有源代碼可以顯示。 你可以從窗口頂部的下拉框中選擇這個工程的任何源文件進(jìn)行查看。但我們先從 main.c 文件開始,因?yàn)檫@個文

件包含了最整個程序的基本流程控制。


先來看看怎么設(shè)置斷點(diǎn),舉一個簡單的例子——要在主函數(shù)的按鍵釋放處設(shè)置一個斷點(diǎn)。放置斷點(diǎn)最容易的方 法就是在希望放置斷點(diǎn)的代碼行進(jìn)行雙擊。斷點(diǎn)指示器(一個小紅點(diǎn))將會出現(xiàn)在源代碼窗口的代碼行左邊。 如果你誤設(shè)了一個斷點(diǎn),可以在這行再次雙擊(或從代碼窗口中點(diǎn)擊右鍵,在彈出的菜單中)進(jìn)行刪除或關(guān)閉。




如果我們現(xiàn)在點(diǎn)擊運(yùn)行按鈕運(yùn)行仿真,在運(yùn)行模式下會全速執(zhí)行代碼。直到我們點(diǎn)擊并釋放模式切換按鍵(即
S1,可以在調(diào)試彈出窗口中點(diǎn)擊),按鍵釋放以后代碼的執(zhí)行會到達(dá)斷點(diǎn)處,仿真將暫停。


到達(dá)斷點(diǎn)以后,我們可以通過源代碼窗口右上角或 VSM Studio 調(diào)試菜單中的常用命令單步執(zhí)行代碼。另外可 以使用快捷鍵 F10 和 F11 分別進(jìn)行單步跳過調(diào)試和單步進(jìn)入函數(shù)內(nèi)部調(diào)試。



如果需要查看程序執(zhí)行的細(xì)節(jié),具體到每一條指令的執(zhí)行過程。你可以在反匯編代碼中進(jìn)行代碼的匯編級單步 調(diào)試。右鍵點(diǎn)擊源碼窗口,從彈出的菜單中選擇“反匯編”,然后同之前一樣使用單步調(diào)試命令。






再次點(diǎn)擊右鍵選擇“反匯編”子菜單將返回到高級語言的源代碼中進(jìn)行單步調(diào)試。

在單步調(diào)試的過程中,你可能會注意到調(diào)試彈出窗口中的 LCD 顯示的數(shù)字是不完整的。但這是正確

的,因?yàn)轱@示的結(jié)果就是由這些不完整的段組合起來的。 如果你想運(yùn)行到下一個按鍵釋放的狀態(tài),只需要按下仿真控制面板中的“運(yùn)行”按鈕,然后在調(diào)試彈出窗口中

點(diǎn)擊按鍵再次觸發(fā)斷點(diǎn)。

完成以后,點(diǎn)擊右鍵選擇清除所有的斷點(diǎn),然后按下仿真控制面板的“停止”按鈕結(jié)束仿真調(diào)試。

注意事項(xiàng)


在 Proteus 中,當(dāng)進(jìn)入斷點(diǎn)或單步調(diào)試后,要知道現(xiàn)在整個系統(tǒng)是受時間的控制,這意味著系統(tǒng)處于暫停狀態(tài),

電容不進(jìn)行放電,電機(jī)也失去了動力。當(dāng)通過單步調(diào)試執(zhí)行指令,這些指令對系統(tǒng)產(chǎn)生作用以后,系統(tǒng)將再次 停止。調(diào)試時,可以通過狀態(tài)欄看到時間前進(jìn)的信息。


還有一些其它非常有用的調(diào)試窗口,但在本教程沒有進(jìn)行介紹。這些調(diào)試窗口可以從 VSM Studio 的“調(diào)試” 菜單中啟動,并放到 IDE 的底部。在仿真暫停后,數(shù)據(jù)會顯示在相應(yīng)的窗口中。但是本教程將會在下一節(jié)單獨(dú) 介紹監(jiān)視窗口的功能和使用方法,因?yàn)樗容^特殊。



監(jiān)視窗口


監(jiān)視窗口是一個調(diào)試窗口,能夠在運(yùn)行仿真時提供實(shí)時數(shù)據(jù),同時也給了我們另外一個設(shè)置斷點(diǎn)的方法。現(xiàn)在,
我們使用監(jiān)視窗口監(jiān)控電位器的 ADC 轉(zhuǎn)換為例子來說明監(jiān)視窗口的使用方法。

先點(diǎn)擊 Proteus 軟件底部的“運(yùn)行”按鈕開始仿真,然后從 VSM Studio 的“調(diào)試”菜單中啟動監(jiān)視窗口,監(jiān) 視窗口將出現(xiàn)在 IDE 的底部。



接下來,右鍵單擊監(jiān)視窗口從彈出的菜單中選擇“使用名字添加監(jiān)視項(xiàng)”。這里我們想添加 ADC 寄存器 ADRESH 和 ADRESL,可以通過雙擊寄存器進(jìn)行添加,完成以后退出對話框,在監(jiān)視窗口中應(yīng)該有兩個我們剛剛添加的 監(jiān)視項(xiàng)。









我們現(xiàn)在點(diǎn)擊電路中的按鈕來切換到電壓采集模式,可以使用調(diào)試彈出窗口(或切換到原理圖頁面)。點(diǎn)擊控
制按鈕三次進(jìn)行模式切換,然后使用電位器左邊的調(diào)節(jié)按鈕改變電位器的阻值。



如果你覺得以二進(jìn)制的形式顯示結(jié)果會更容易理解,可以更改項(xiàng)目的顯示格式。在監(jiān)視窗口中右鍵點(diǎn)擊每一項(xiàng), 將顯示格式改變成二進(jìn)制。




由于這是一個 10 位的 ADC,因此讀取的最大值是 1023 或 0x03FF,當(dāng)電位器調(diào)節(jié)到最頂端時,我們可以在 LCD
中看到這個值。




現(xiàn)在我們假設(shè)在電位器向下調(diào)節(jié)過程中,當(dāng)電位器到達(dá)中間位置時仿真暫停下來。我們知道中間位置的值在

0x1FF 左右,所以我們可以在監(jiān)視項(xiàng)上設(shè)置觸發(fā)斷點(diǎn)的條件。通過右鍵點(diǎn)擊監(jiān)視項(xiàng)目,并從彈出菜單中選擇監(jiān) 視點(diǎn)的條件。在我們的例子中,即要在 ADRESH 等于0x01、ADRESL 小于或等于 0xFF 時暫停仿真。當(dāng)我們 從最大值開始向下調(diào)節(jié)電位器,調(diào)節(jié)到中間位置時將會第一次觸發(fā)斷點(diǎn)。






注意,你需要單獨(dú)配置 ADRESH 和 ADRESL,完成以后,監(jiān)視窗口的顯示應(yīng)該像下圖一樣。


設(shè)置好監(jiān)視條件以后,我們現(xiàn)在需要向下調(diào)節(jié)電位器,直到滿足條件時觸發(fā)斷點(diǎn)。同之前一樣,既可以在 VSM Studio 的調(diào)試彈出窗口中調(diào)節(jié)電位器,也可以切換到原理圖頁面進(jìn)行調(diào)節(jié)。當(dāng)斷點(diǎn)被觸發(fā)后,你應(yīng)該能看到兩 個監(jiān)視項(xiàng)的值是 0x01 和 0xFF。如果有需要的話,你可以在條件觸發(fā)的這點(diǎn)開始單步執(zhí)行你的代碼進(jìn)行調(diào)試。


在調(diào)試定時器代碼時,如果想要捕獲溢出條件,使用監(jiān)視窗口中的監(jiān)視條件是非常有用的。

右鍵點(diǎn)擊監(jiān)視項(xiàng),在彈出的菜單中選擇“監(jiān)視條件”,然后從彈出的對話框中選擇‘關(guān)閉監(jiān)視點(diǎn)’

選項(xiàng)就可以關(guān)閉監(jiān)視點(diǎn)。 我們接下來討論硬件斷點(diǎn),在此之前,要先禁止監(jiān)視條件或刪除監(jiān)視項(xiàng),然后在仿真控制面板中按下停止按鈕

結(jié)束仿真。


硬件斷點(diǎn)


到目前為止,我們已經(jīng)學(xué)習(xí)了基于軟件條件的仿真中斷(觀察點(diǎn)和斷點(diǎn))。另外也可以使用硬件斷點(diǎn),以便當(dāng)

硬件條件發(fā)生時檢查代碼,例如想在 I2C 總線剛開始動作時進(jìn)行捕獲,我們可以像下面介紹的一樣在 I2C 總線 上設(shè)置一個硬件斷點(diǎn)。


先切換到原理圖選項(xiàng)卡,然后從左邊的模式選擇器中選擇電壓探針圖標(biāo)。接下來在編輯窗口中單擊,開始進(jìn)行 探針的放置,移到鼠標(biāo)到總線的 SDA 線上,再次點(diǎn)擊左鍵放置探針。





現(xiàn)在右鍵點(diǎn)擊探針,從彈出的菜單中選擇編輯屬性。


實(shí)時斷點(diǎn)類型選擇“數(shù)字的”,如果我們想在低電平進(jìn)行觸發(fā),輸入 0 作為觸發(fā)值。


點(diǎn)擊“確定”,按下運(yùn)行按鈕開始仿真,你應(yīng)該會發(fā)現(xiàn)仿真幾乎立刻停止,并且在 VSM Studio 的源窗口中顯 示只執(zhí)行了一個命令將 SDA 設(shè)置成低電平。



這個斷點(diǎn)實(shí)際上是發(fā)生在初始化程序中,如果想要跳過這個斷點(diǎn),并且只在進(jìn)入 I2C 模式后被激活,這樣我們 就需要設(shè)置斷點(diǎn)的裝備時間,先要停止仿真,然后切換到原理圖模塊,像之前一樣編輯電壓探針 RC4 的屬性, 裝備時間設(shè)置成 1s。






這時候,當(dāng)運(yùn)行仿真時斷點(diǎn)不會被觸發(fā),直到我們按下模式切換按鍵進(jìn)入溫度模式(溫度值在 I2C 總線上進(jìn)行
傳輸)。


你應(yīng)該會發(fā)現(xiàn)停在了源代碼的 I2C 子程序中,接下來可以像之前描述的從這里開始進(jìn)行單步調(diào)試。


交互式測量


在設(shè)計(jì)和仿真電路的時候,經(jīng)常會檢測電路的信號和波形。在 Proteus 中主要有兩個方法來實(shí)現(xiàn)這一點(diǎn)。例如,

假設(shè)我們想要檢查溫度傳感器 MCP9800 進(jìn)行 I2C 傳輸?shù)倪^程,無論是通過交互方式還是更傳統(tǒng)的圖表方式都 可以實(shí)現(xiàn)。


我們要做的第一件事就是整理原理圖,刪除我們先前使用過的各種斷點(diǎn)。你可以在原理圖中的探針上右鍵雙擊, 或點(diǎn)擊右鍵,從彈出的菜單中選擇“刪除”來刪除電壓探針,同樣,我們可以右鍵雙擊調(diào)試彈出窗口對象的邊 界刪除調(diào)試彈出窗口對象。


當(dāng)原理圖中定義了調(diào)試彈出窗口對象,在仿真開始以后 Proteus 就會自動切換到 VSM Studio。因?yàn)?/div>

它會假定你主要的任務(wù)是進(jìn)行源代碼調(diào)試。由于我們現(xiàn)在需要分析信號,所以我們移除調(diào)試彈出窗 口對象,以便仿真開始后打開的是原理圖頁面。


現(xiàn)在要做的第二件事就是放置和連接 I2C 調(diào)試器,選擇虛擬儀器模式,在對象選擇器列出了一系列交互式測量 工具,在我們的案例中,選擇 I2C 協(xié)議分析儀。



在對象選擇器中點(diǎn)擊 I2C 分析儀選中,然后以放置普通元器件對象的方式將它放置到原理圖中。為了容易連線,
你可以將它放在溫度傳感器的正下方。



接下來,我們需要連接引腳,注意,在連線的起點(diǎn)和終點(diǎn)光標(biāo)會變成綠色。因此放置連線的過程就是將鼠標(biāo)放

在起始點(diǎn)(I2C 調(diào)試器的引腳)直到光標(biāo)變成綠色,然后點(diǎn)擊左鍵開始放置,移動鼠標(biāo)到目標(biāo)點(diǎn)(光標(biāo)變成綠 色),最后點(diǎn)擊左鍵終止導(dǎo)線的放置,通過使用這種技術(shù)連接 SCL 和 SDA 到 I2C 總線,如下圖所示:


連上 I2C 協(xié)議分析儀以后,開始仿真。應(yīng)該可以看到有一個 I2C 的調(diào)試器窗口懸浮在原理圖上,并且有一些初 始化/識別的數(shù)據(jù)傳輸。如果想要查看溫度傳感器在 I2C總線上傳輸?shù)臄?shù)據(jù),我們需要按下原理圖中的按鍵切換 到溫度模式。



由于程序代碼會不斷查詢當(dāng)前的溫度值,因此 I2C 總線上會不斷有數(shù)據(jù)在傳輸。如果我們要分析數(shù)據(jù),應(yīng)該先 暫停仿真,然后才可以花一些時間來分析 I2C 數(shù)據(jù)傳輸?shù)脑敿?xì)過程。





如果 Proteus 工作在單一框架下,即 ISIS 與 VSM Studio 都以選項(xiàng)頁的方式存在于 Proteus 軟件框 架下,當(dāng)仿真暫停后,將自動切換到 VSM Studio 選項(xiàng)頁,因?yàn)?Proteus 會假定你對執(zhí)行的源代碼 感興趣。但不管怎樣,分析儀始終在最頂層。如果你想在同一時間查看原理圖和源代碼,你可以使 用調(diào)試彈出窗口,也可以將 VSM Studio 拖到 Proteus 外面,把原理圖和 VSM Studio 分開。


I2C 協(xié)議分析儀中使用的語法是標(biāo)準(zhǔn)的 I2C 協(xié)議描述,你可以通過左邊的‘+’號展開傳輸?shù)男蛄羞M(jìn)行查看。外 設(shè)元件(MCP9800)有一個標(biāo)準(zhǔn)的地址 0x90,因此我們以讀請求為例進(jìn)行說明:序列以開始位(S)開發(fā),跟 著是一個讀請求 0x91(位 0 設(shè)置為 1 表示讀請求),后面跟著的是 0x1B(數(shù)據(jù))等等。接收到的數(shù)據(jù)(0x1B) 以十進(jìn)制顯示是 27,對應(yīng)外設(shè)元件(MCP9800)中當(dāng)前顯示的溫度值。



再次運(yùn)行仿真,你可以改變原理圖中 MCP9800 的溫度值,然后再次停止,并檢查 I2C 調(diào)試器中的輸出來進(jìn)一 步理解 I2C 和 I2C 協(xié)議分析儀。



注意,像這樣不斷進(jìn)行輪詢的固件程序在性能方面有相當(dāng)大的開銷,因?yàn)?I2C 協(xié)議分析儀需要不斷的刷新顯示 數(shù)據(jù)。然而在大多數(shù)情況下,只是使用虛擬儀器進(jìn)行測試或調(diào)試,在測試或調(diào)試的過程中,仿真速度是次要的。 所有的調(diào)試窗口在不使用時都可以關(guān)閉,然后可以從 VSM Studio 或 ISIS 的“調(diào)試”菜單中重新打開。


深度閱讀:

關(guān)于 I2C 協(xié)議分析儀和其它虛擬儀器的更多幫助信息放在 Proteus VSM 的參考手冊中。需要特別注意的是你既
可以使用這個分析儀作為 I2C 總線上的一個主(或從)設(shè)備,也可以只作為一個監(jiān)視器來使用。


基于圖表的測量


我們也可以使用基于圖表的仿真,以另一種方式來觀察 I2C 總線上數(shù)據(jù)的傳輸。但基于圖表的仿真與交互式仿
真有很大的不同,主要有以下幾點(diǎn):
    在基于圖表的仿真中,不能和電路進(jìn)行交互式操作。
    基于圖表的仿真運(yùn)行在一個指定的時間段。

               在這個時間段結(jié)束、仿真停止之前,仿真結(jié)果是看不見的。 鑒于上述情況,讓我們看看如何使用數(shù)字圖表來分析 I2C 總線上的數(shù)據(jù)傳輸。首先,右鍵雙擊 I2C調(diào)試器把 I2C

調(diào)試器從原理圖中刪除。

然后選擇圖表模式,并從對象選擇器中選中“數(shù)字圖表”,然后在你想放置圖表的位置左上角點(diǎn)擊左鍵,移動 鼠標(biāo)到右下角,再次點(diǎn)擊左鍵完成圖表的放置。


注意,原理圖中的圖表不需要特別大,因?yàn)楫?dāng)我們要分析仿真結(jié)果時,可以把圖表放大。 添加完圖表以后,我們現(xiàn)在就需要告訴它我們想要查看哪些導(dǎo)線上的信號。為此我們需要給導(dǎo)線附上探針,然

后在圖表中指定這個探針。選擇電壓探針圖標(biāo),然后在 I2C 總線的每一根線上都放置一個探針。


如果需要靠的更近,可以圍繞鼠標(biāo)位置使用鼠標(biāo)中間的滾筒或 F6/F7 快捷鍵進(jìn)行放大和縮小,F(xiàn)8

快捷鍵將返回原理圖的默認(rèn)視圖。 默認(rèn)情況下,電壓探針會自動提取終端的名字為自己命名。但在我們的仿真中,對其重新命名讓它更有意義。

可以通過右鍵點(diǎn)擊探針,從彈出的菜單中選擇“編輯屬性”,然后將名字分別改成 SCL 或 SDA。



現(xiàn)在,導(dǎo)線上放置好了探針,而原理圖中也已經(jīng)放置好了的圖表。我們需要添加探針到圖表中讓圖表去測量探 針上的信號,有幾種方法可以做到。最簡單的方法就是將探針拖到圖表中,可以右鍵點(diǎn)擊探針,從彈出的菜單 中選擇移動對象,然后移動鼠標(biāo)到圖表之上,再次點(diǎn)擊左鍵完成添加;也可以左鍵點(diǎn)擊一次探針先選中,然后按下左鍵不放,移動鼠標(biāo)到圖表之上,釋放左鍵即可完成添加操作,F(xiàn)在把這兩個探針添加到圖表中。




默認(rèn)情況下,基于圖表的仿真運(yùn)行時間是 0 到 1s。在我們的例子中,我們更關(guān)心 1s 到 2s 之間的數(shù)據(jù),跳過了
初始化階段的數(shù)據(jù)傳輸?梢酝ㄟ^編輯圖表(點(diǎn)擊右鍵并編輯屬性)改變開始和停止的時間。


在原理圖的空白區(qū)域點(diǎn)擊左鍵將會取消選中任何當(dāng)前被選中的對象。通常在退出編輯屬性對話框以 后需要進(jìn)行這個操作,因?yàn)橥顺鼍庉媽傩詫υ捒蛞院髮ο笕匀惶幱谶x中狀態(tài)。


我們準(zhǔn)備進(jìn)行仿真,但有一個嚴(yán)重的問題。正如前面提到的,在基于圖表的仿真中,你不能和電路進(jìn)行交互式 操作,但是為了進(jìn)入溫度模式,觸發(fā) I2C 傳輸,我們需要點(diǎn)擊按鍵切換模式。由于我們不能按下按鍵,所以我 們需要給 PIC 加入一個等效的信號,以便程序能切換到溫度模式。我們一般是這樣做的,選擇激勵源圖標(biāo),從 對象選擇器中選中脈沖激勵源,將這個激勵源放在按鍵右邊 RD2 終端的旁邊。放置之前你可能要先移動這個終 端給這個激勵源騰出一些連線的空間。




現(xiàn)在以最常用的方法編輯激勵源(點(diǎn)擊右鍵,選擇“編輯屬性”菜單),在數(shù)字激勵源類型中選擇單脈沖,改變脈 沖極性為負(fù),使用脈沖信號代替按鍵脈沖。由于我們圖表仿真的時間是從 1s 到 2s,因此設(shè)置開始時間 1.25s, 脈沖寬度 50ms。




我們現(xiàn)在可以運(yùn)行仿真了,但使用的不是仿真控制面板中的交互式仿真按鈕,使用的是“圖表”菜單中的“仿
真圖表”命令,之后你看到的結(jié)果看起來應(yīng)該像下圖一樣。

在 1.25s 之前沒有任何的數(shù)據(jù)傳輸,這時因?yàn)槲覀兊哪M按鍵的脈沖是在 1.25s 時產(chǎn)生的。另外,現(xiàn)在在圖表 里面我們看不到其它的信息。右鍵點(diǎn)擊圖表,從彈出的菜單中選擇“最大化窗口”,這將在一個新的選項(xiàng)頁中 放大圖表。




當(dāng)圖表選項(xiàng)頁出現(xiàn)在最前面時,菜單和工具欄會改變,通過這些菜單和工具可以對圖表進(jìn)行一些操作。請?zhí)貏e 注意應(yīng)用程序頂部出現(xiàn)的圖表工具欄。


在這里可以找到一些縮放工具,最有用的是“查看區(qū)域”工具。點(diǎn)擊這個工具的圖標(biāo),然后圍繞一個小的區(qū)域
拖動一個方框,可以進(jìn)行選定區(qū)域的放大顯示。如果重復(fù)這個操作,你將很快就可以放大看到單個的 I2C 序列。



你也可以按住 SHIFT 鍵,然后使用鼠標(biāo)拖一個選擇框進(jìn)行區(qū)域放大。

熟悉 I2C 協(xié)議的人可以將圖表顯示的原始數(shù)據(jù)與之前在協(xié)議分析儀中看到的序列進(jìn)行對比驗(yàn)證。 最后,你可以按下面介紹的方法進(jìn)行圖表測量:

               在圖表窗口點(diǎn)擊鼠標(biāo)左鍵,將在圖表中放置一個(綠色)光標(biāo);
               按住鼠標(biāo)左鍵并進(jìn)行移動可以進(jìn)行移動光標(biāo);
               按住 CTRL 鍵,點(diǎn)擊左鍵將放置一個(紅色)光標(biāo);
               按住 CTRL 鍵,并按住鼠標(biāo)左鍵移動可以移動(紅色)光標(biāo);
               每個光標(biāo)的數(shù)據(jù)和它們之間的增量顯示在圖表窗口的底部。

一般的放置和編輯技巧在這個教程里面都只是作簡單的介紹,而在 ISIS 教程文檔中有更多細(xì)節(jié)。 關(guān)于圖表的更多信息提供在本文檔的后面,而關(guān)于激勵源、探針以及基于圖表仿真的詳細(xì)說明只能在 Proteus

VSM 的參考手冊中找到。


診斷信息


在 Proteus 中另一個非常有用但經(jīng)常被忽視的工具是仿真診斷信息。它提供了一個窗口,允許用戶查看指定外
設(shè)上仿真活動的文字性報告。

我們以 LCD 顯示屏為例來說明怎樣使用診斷信息。 切換到原理圖頁面,從“調(diào)試”菜單下打開“配置診斷信息”子菜單。




展開對話框中 LCD 顯示屏(VIM-332-DP)的條目,點(diǎn)擊“診斷信息”這個子條目,然后將診斷信息輸出等級
設(shè)置為“所有信息”。


現(xiàn)在展開 PIC16LF1937(U1)條目,向下滾動到“LCD 模塊”這個子條目,再次將診斷信息輸出等級設(shè)置為“所 有信息”。




首先從“仿真控制面板”中啟動交互式仿真,然后點(diǎn)擊“仿真日志”觀察診斷信息,Proteus 將會自動切換到
VSM Studio 頁面,仿真日志將會出現(xiàn)在 VSM Studio 頁面的底部。


如果你暫停仿真,我們可以看到[PIC16 LCD]的調(diào)試信息里包含了 PC 值,你可以點(diǎn)擊這個值來定位到源代碼中 的某一行,這一行就是引起 PIC16 輸出這個調(diào)試信息的指令。





只有當(dāng)仿真被暫停以后,才能定位到源代碼中。 最后,停止仿真并將診斷信息輸出等級設(shè)置為“僅警告”。

在你的固件程序出現(xiàn) bug 時,使用診斷信息來幫助你調(diào)試特別有用。但它會影響仿真的性能和速度(可以試試 對 PIC MSSP 外設(shè)和溫度傳感器 MCP9800 輸出診斷信息),因此只在需要時啟用它。如果你知道事件出現(xiàn)的 大概時間段,你也可以選擇在一個限制的時間段內(nèi)輸出診斷信息。




本系列完整的pdf版本教程下載:
http://www.torrancerestoration.com/bbs/dpj-111690-1.html


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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表