真。本部分教程的重点将放在仿真器和 IDE 的实际使用上,针对每一个主题的详细说明请参考帮助文档中的内 容。本部分教程不包含原理图的绘制,如果你对 ISIS中的原理图绘制不熟悉,你应该先花时间学习第一部分教 程中的内容。
通过本教程,我们不仅可以掌握 VSM Studio IDE 的基本仿真功能,还可以了解 Proteus VSM 中的各种调试和 测试工具。要学习本教程你将需要:
必须安装 Proteus 8.0 版本或更高版本的软件。如果没有购买专业版的软件,可以从 Labcenter 的网站 上免费下载这个软件的试用版本,或者联系 Proteus 软件的大中华区总代理-广州市风标电子技术有限公司
从 Proteus 的主页启动新建工程向导,选择“从开发板”选项,在“微控制器系列”列表框中选择 PIC16,然 后从“开发板”列表框选择 F1 评估板(F1 Releas),点击完成导入工程。
导入项目之后,在 Proteus 中可以看到两个选项卡:F1 评估电路板的原理图模块和包含 Microchip 标准硬件驱 动源代码的 VSM Studio IDE,如下图所示:
开源的编译器能够直接从 Labcenter 的服务器上下载和安装。需要收费的编译器,Proteus 将提供链接到相应供 应商网站的下载页面。在这个例子里,使用的是 Hi-Tech 编译器,如果还没有安装,则需要从微芯的网站下载:
3. 安装完成后点击对话框底部的“检查全部”按钮,Proteus 将自动重新检查所有的编译器并进行配置, 使得它能够在 Proteus 中编译源代码。
到了这里,编译器、源代码和原理图已全部准备好了,使用 VSM Studio“构建”菜单下的“构建工程”命令(或 构建图标)编译固件。
F1 评估板的示例程序可以显示三种模式,时间,一温度,和电位器的 ADC 采样值。可以通过按下原理图中的 控制按钮来循环切换显示模式,进行交互式仿真。
当处于温度显示模式时,你可以在 MCP9800 传感器上通过点击递增或递减按钮来调整温度值。当前的温度值 是通过 I2C 总线传输到 PIC 处理器中,经过处理以后显示在 LCD 上的。
首先,Proteus 原理图中的微控制器执行编译后的固件文件与真实世界中的 PIC 执行编程的固件完全一样。使 用 VSM Studio IDE 只是把烧写 PIC 芯片的过程,变成把编译成功后得到的文件发送给原理图。
其次,你可能会注意到,原理图中几乎所有导线都使用了终端来结尾,并且终端都有一个名字。在原理图中, 相同名字的两个终端被认为是相连的(像有一根虚拟的导线)。例如,温度传感器旁边的 RC3 和 RC4 终端连 接到了 PIC 处理器中的 I2C 接口的两个引脚上。我们喜欢使用这种方式进行原理图连线,因为可以避免导线的交叉,并且可以将原理图分割成容易识别的逻辑块。如果你要了解更多关于这种连接方式的信息,可以阅读 ISIS 的参考手册。
例如,对于一个特别慢的计算机,在这个仿真中调节到时钟模式时,仿真中 LCD 屏上显示的时钟与现实世界墙 上的挂钟不是同时前进的,但它却总是会和状态栏的仿真时间同步前进。
按键可以在时间、温度和电压模式之间进行切换,这样我们就能很容易的在这里添加其它操作模式。首先,切 换到 VSM Studio IDE 选项卡,打开文件 main.c(在项目中双击 main.c)。
接下来,我们需要找到按钮切换的程序块来添加新的操作模式。最简单的方法就是搜索已有模式中的一个,我 们可以在 VSM Studio 右键点击编辑窗口,从弹出的菜单中选择“查找”,在查找内容下输入“MODE_POT”。
查找到的第一个结果就是我们正要寻找的,也就是关于按键释放后用于设置显示模式的 switch 语句。在这里我 们只需要添加新的操作模式:
在这段代码的下面还有另一个 switch 语句,用于执行当前的显示模式。同样,我们需要加入我们的 case 语句 来调用我们的函数。
在这里你可以尝试添加任何你想添加的动作,但我们只做一些简单的动作,比如在显示器上显示一个固定值, 并在 LED 上显示二进制的计数器。
最后一步是构建工程。如果你的程序有错误,在输出窗口会得到编译错误,单击这个错误,会指示出问题所在 的位置。
项才能修正链接错误,例如需要在工程设置中加入“函数库”的文件夹。 当我们这次运行仿真时,我们使用按键来切换操作模式,直到进入我们自己的模式(时间->温度->电位器->测试),
示器,可以把其中一个页面拖到另一个显示器中,在两个显示器中同时观察这两个页面。 但我们在调试时,通常更感兴趣的是观察代码的单步运行,同时观察原理图的某一小部分进行验证。Proteus
页面之间进行切换,大大提高我们的调试效率。 在我们的教程的例子中,可以以温度传感器来说明实时监控窗口的使用,步骤如下:
如果做的过程中出现问题,可以右键双击虚线框进行删除。同样,如果虚线框的位置有问题,也可 以右键点击虚线框然后选择“移动对象”菜单进行移动。
其它可能需要我们在仿真过程中进行观察和控制的对象有按键、电位器和显示元件(LCD)。我们可以重复上 面的操作,围绕这些器件各自拖出虚线框,完成以后,你的原理图看起来应和下图一样。
当全速运行代码时,VSM Studio 页面中的源代码和变量的区域将显示“仿真正在运行”的消息。我 们将在下一节介绍调试工具的使用。
调试弹出窗口非常有用,它不仅将原理图中标记的区域显示到调试环境中,而且还可以进行交互仿真。例如, 如果点击按键 S1,切换程序模式,你应该会看到 LCD显示 I2C 温度传感器的温度值。如果你再调节温度传感 器的温度,LCD 会反映出温度的变化。
切换回到原理图页面,你会看到原理图中的状态和调试弹出窗口中的一样。当停止仿真(从仿真控制面板), 调试弹出窗口会消失,VSM Studio 将从调试状态切换回设计编辑状态,你可以再次编辑和编译你的源代码。
Studio 页面通过拖动来调整调试弹出窗口的大小。 现在我们已经配置完调试弹出窗口,来看看如何进行使用调试工具进行代码的调试。
如上图所示,Proteus 将自动切换到 VSM Studio 页面,我们可以看到:调试弹出窗口显示在右手边;主面板报 告“没有源代码”的信息;程序变量的列表放在屏幕的底部。在这个阶段,仿真处于“已经启动”的状态,电 路处在一个稳定的工作点,代码还没有执行,也没有时间的消逝。
源代码窗口没有显示任何的源代码,这是因为在当前的程序计数器(PC=0)中没有源代码可以显示。 你可以从窗口顶部的下拉框中选择这个工程的任何源文件进行查看。但我们先从 main.c 文件开始,因为这个文
先来看看怎么设置断点,举一个简单的例子——要在主函数的按键释放处设置一个断点。放置断点最容易的方 法就是在希望放置断点的代码行进行双击。断点指示器(一个小红点)将会出现在源代码窗口的代码行左边。 如果你误设了一个断点,可以在这行再次双击(或从代码窗口中点击右键,在弹出的菜单中)进行删除或关闭。
到达断点以后,我们可以通过源代码窗口右上角或 VSM Studio 调试菜单中的常用命令单步执行代码。另外可 以使用快捷键 F10 和 F11 分别进行单步跳过调试和单步进入函数内部调试。
如果需要查看程序执行的细节,具体到每一条指令的执行过程。你可以在反汇编代码中进行代码的汇编级单步 调试。右键点击源码窗口,从弹出的菜单中选择“反汇编”,然后同之前一样使用单步调试命令。
的,因为显示的结果就是由这些不完整的段组合起来的。 如果你想运行到下一个按键释放的状态,只需要按下仿真控制面板中的“运行”按钮,然后在调试弹出窗口中
电容不进行放电,电机也失去了动力。当通过单步调试执行指令,这些指令对系统产生作用以后,系统将再次 停止。调试时,可以通过状态栏看到时间前进的信息。
还有一些其它非常有用的调试窗口,但在本教程没有进行介绍。这些调试窗口可以从 VSM Studio 的“调试” 菜单中启动,并放到 IDE 的底部。在仿真暂停后,数据会显示在相应的窗口中。但是本教程将会在下一节单独 介绍监视窗口的功能和使用方法,因为它比较特殊。
先点击 Proteus 软件底部的“运行”按钮开始仿真,然后从 VSM Studio 的“调试”菜单中启动监视窗口,监 视窗口将出现在 IDE 的底部。
接下来,右键单击监视窗口从弹出的菜单中选择“使用名字添加监视项”。这里我们想添加 ADC 寄存器 ADRESH 和 ADRESL,可以通过双击寄存器进行添加,完成以后退出对话框,在监视窗口中应该有两个我们刚刚添加的 监视项。
如果你觉得以二进制的形式显示结果会更容易理解,可以更改项目的显示格式。在监视窗口中右键点击每一项, 将显示格式改变成二进制。
0x1FF 左右,所以我们可以在监视项上设置触发断点的条件。通过右键点击监视项目,并从弹出菜单中选择监 视点的条件。在我们的例子中,即要在 ADRESH 等于0x01、ADRESL 小于或等于 0xFF 时暂停仿真。当我们 从最大值开始向下调节电位器,调节到中间位置时将会第一次触发断点。
设置好监视条件以后,我们现在需要向下调节电位器,直到满足条件时触发断点。同之前一样,既可以在 VSM Studio 的调试弹出窗口中调节电位器,也可以切换到原理图页面进行调节。当断点被触发后,你应该能看到两 个监视项的值是 0x01 和 0xFF。如果有需要的话,你可以在条件触发的这点开始单步执行你的代码进行调试。
选项就可以关闭监视点。 我们接下来讨论硬件断点,在此之前,要先禁止监视条件或删除监视项,然后在仿真控制面板中按下停止按钮
硬件条件发生时检查代码,例如想在 I2C 总线刚开始动作时进行捕获,我们可以像下面介绍的一样在 I2C 总线 上设置一个硬件断点。
先切换到原理图选项卡,然后从左边的模式选择器中选择电压探针图标。接下来在编辑窗口中单击,开始进行 探针的放置,移到鼠标到总线的 SDA 线上,再次点击左键放置探针。
点击“确定”,按下运行按钮开始仿真,你应该会发现仿真几乎立刻停止,并且在 VSM Studio 的源窗口中显 示只执行了一个命令将 SDA 设置成低电平。
这个断点实际上是发生在初始化程序中,如果想要跳过这个断点,并且只在进入 I2C 模式后被激活,这样我们 就需要设置断点的装备时间,先要停止仿真,然后切换到原理图模块,像之前一样编辑电压探针 RC4 的属性, 装备时间设置成 1s。
假设我们想要检查温度传感器 MCP9800 进行 I2C 传输的过程,无论是通过交互方式还是更传统的图表方式都 可以实现。
我们要做的第一件事就是整理原理图,删除我们先前使用过的各种断点。你可以在原理图中的探针上右键双击, 或点击右键,从弹出的菜单中选择“删除”来删除电压探针,同样,我们可以右键双击调试弹出窗口对象的边 界删除调试弹出窗口对象。
它会假定你主要的任务是进行源代码调试。由于我们现在需要分析信号,所以我们移除调试弹出窗 口对象,以便仿真开始后打开的是原理图页面。
现在要做的第二件事就是放置和连接 I2C 调试器,选择虚拟仪器模式,在对象选择器列出了一系列交互式测量 工具,在我们的案例中,选择 I2C 协议分析仪。
在起始点(I2C 调试器的引脚)直到光标变成绿色,然后点击左键开始放置,移动鼠标到目标点(光标变成绿 色),最后点击左键终止导线的放置,通过使用这种技术连接 SCL 和 SDA 到 I2C 总线,如下图所示:
连上 I2C 协议分析仪以后,开始仿真。应该可以看到有一个 I2C 的调试器窗口悬浮在原理图上,并且有一些初 始化/识别的数据传输。如果想要查看温度传感器在 I2C总线上传输的数据,我们需要按下原理图中的按键切换 到温度模式。
由于程序代码会不断查询当前的温度值,因此 I2C 总线上会不断有数据在传输。如果我们要分析数据,应该先 暂停仿真,然后才可以花一些时间来分析 I2C 数据传输的详细过程。
如果 Proteus 工作在单一框架下,即 ISIS 与 VSM Studio 都以选项页的方式存在于 Proteus 软件框 架下,当仿真暂停后,将自动切换到 VSM Studio 选项页,因为 Proteus 会假定你对执行的源代码 感兴趣。但不管怎样,分析仪始终在最顶层。如果你想在同一时间查看原理图和源代码,你可以使 用调试弹出窗口,也可以将 VSM Studio 拖到 Proteus 外面,把原理图和 VSM Studio 分开。
I2C 协议分析仪中使用的语法是标准的 I2C 协议描述,你可以通过左边的‘+’号展开传输的序列进行查看。外 设元件(MCP9800)有一个标准的地址 0x90,因此我们以读请求为例进行说明:序列以开始位(S)开发,跟 着是一个读请求 0x91(位 0 设置为 1 表示读请求),后面跟着的是 0x1B(数据)等等。接收到的数据(0x1B) 以十进制显示是 27,对应外设元件(MCP9800)中当前显示的温度值。
再次运行仿真,你可以改变原理图中 MCP9800 的温度值,然后再次停止,并检查 I2C 调试器中的输出来进一 步理解 I2C 和 I2C 协议分析仪。
注意,像这样不断进行轮询的固件程序在性能方面有相当大的开销,因为 I2C 协议分析仪需要不断的刷新显示 数据。然而在大多数情况下,只是使用虚拟仪器进行测试或调试,在测试或调试的过程中,仿真速度是次要的。 所有的调试窗口在不使用时都可以关闭,然后可以从 VSM Studio 或 ISIS 的“调试”菜单中重新打开。
在这个时间段结束、仿真停止之前,仿真结果是看不见的。 鉴于上述情况,让我们看看如何使用数字图表来分析 I2C 总线上的数据传输。首先,右键双击 I2C调试器把 I2C
然后选择图表模式,并从对象选择器中选中“数字图表”,然后在你想放置图表的位置左上角点击左键,移动 鼠标到右下角,再次点击左键完成图表的放置。
注意,原理图中的图表不需要特别大,因为当我们要分析仿真结果时,可以把图表放大。 添加完图表以后,我们现在就需要告诉它我们想要查看哪些导线上的信号。为此我们需要给导线附上探针,然
快捷键将返回原理图的默认视图。 默认情况下,电压探针会自动提取终端的名字为自己命名。但在我们的仿真中,对其重新命名让它更有意义。
现在,导线上放置好了探针,而原理图中也已经放置好了的图表。我们需要添加探针到图表中让图表去测量探 针上的信号,有几种方法可以做到。最简单的方法就是将探针拖到图表中,可以右键点击探针,从弹出的菜单 中选择移动对象,然后移动鼠标到图表之上,再次点击左键完成添加;也可以左键点击一次探针先选中,然后按下左键不放,移动鼠标到图表之上,释放左键即可完成添加操作。现在把这两个探针添加到图表中。
在原理图的空白区域点击左键将会取消选中任何当前被选中的对象。通常在退出编辑属性对话框以 后需要进行这个操作,因为退出编辑属性对话框以后对象仍然处于选中状态。
我们准备进行仿真,但有一个严重的问题。正如前面提到的,在基于图表的仿真中,你不能和电路进行交互式 操作,但是为了进入温度模式,触发 I2C 传输,我们需要点击按键切换模式。由于我们不能按下按键,所以我 们需要给 PIC 加入一个等效的信号,以便程序能切换到温度模式。我们一般是这样做的,选择激励源图标,从 对象选择器中选中脉冲激励源,将这个激励源放在按键右边 RD2 终端的旁边。放置之前你可能要先移动这个终 端给这个激励源腾出一些连线的空间。
现在以最常用的方法编辑激励源(点击右键,选择“编辑属性”菜单),在数字激励源类型中选择单脉冲,改变脉 冲极性为负,使用脉冲信号代替按键脉冲。由于我们图表仿真的时间是从 1s 到 2s,因此设置开始时间 1.25s, 脉冲宽度 50ms。
在 1.25s 之前没有任何的数据传输,这时因为我们的模拟按键的脉冲是在 1.25s 时产生的。另外,现在在图表 里面我们看不到其它的信息。右键点击图表,从弹出的菜单中选择“最大化窗口”,这将在一个新的选项页中 放大图表。
当图表选项页出现在最前面时,菜单和工具栏会改变,通过这些菜单和工具可以对图表进行一些操作。请特别 注意应用程序顶部出现的图表工具栏。
熟悉 I2C 协议的人可以将图表显示的原始数据与之前在协议分析仪中看到的序列进行对比验证。 最后,你可以按下面介绍的方法进行图表测量:
一般的放置和编辑技巧在这个教程里面都只是作简单的介绍,而在 ISIS 教程文档中有更多细节。 关于图表的更多信息提供在本文档的后面,而关于激励源、探针以及基于图表仿真的详细说明只能在 Proteus
我们以 LCD 显示屏为例来说明怎样使用诊断信息。 切换到原理图页面,从“调试”菜单下打开“配置诊断信息”子菜单。
现在展开 PIC16LF1937(U1)条目,向下滚动到“LCD 模块”这个子条目,再次将诊断信息输出等级设置为“所 有信息”。
如果你暂停仿真,我们可以看到[PIC16 LCD]的调试信息里包含了 PC 值,你可以点击这个值来定位到源代码中 的某一行,这一行就是引起 PIC16 输出这个调试信息的指令。
只有当仿真被暂停以后,才能定位到源代码中。 最后,停止仿真并将诊断信息输出等级设置为“仅警告”。
在你的固件程序出现 bug 时,使用诊断信息来帮助你调试特别有用。但它会影响仿真的性能和速度(可以试试 对 PIC MSSP 外设和温度传感器 MCP9800 输出诊断信息),因此只在需要时启用它。如果你知道事件出现的 大概时间段,你也可以选择在一个限制的时间段内输出诊断信息。
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |