Proteus仿真使用说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本教程的目的是向您展示如何使用Proteus VSM和VSM Studio IDE对微控制器进行交互式仿真。
重点将放在模拟器和IDE的实际使用上,参考手册中对每个主题都有更详细的介绍。
本教程不涉及原理图;如果您不熟悉ISIS中的绘图,那么您应该花时间阅读ISIS参考手册中的教程内容。
我们将使用预先绘制的Microchip F1评估板原理图,如下所示。
从驱动VSM Studio IDE模拟的基本知识开始,我们将研究Proteus VSM软件中可用的一些调试和测量工具。
要求
要完成本教程,您需要:
Proteus软件8.0或更高版本的已安装副本。
如果您没有专业的软件副本,可以从Labcenter 网站免费下载该软件的演示副本。
高科技PIC16编译器9.8或更高版本的已安装副本。
可以从Proteus软件(VSM Studio IDE)中管理此编译器的下载和安装;我们将在下面教程的项目设置部分介绍这方面的过程。
我们仍然建议您通读教程,即使您没有安装工具。
大多数材料--以及所有调试技术--都是通用的,将在您自己的设计中被证明是有用的。
项目设置
我们需要做的第一件事是设置我们的Proteus8项目。
由于我们使用的是虚拟开发板形式的
预先绘制的原理图,这个过程被大大简化了:
在Proteus的主页中,启动new project向导并选择development board选项。
接下来,从底部的列表框中将微控制器系列更改为PIC16,最后是F1评估板(F1发行版)。
单击finish导入项目。
在项目导入之后,您应该在应用程序中看到两个选项卡,一个是带有F1发行版设计的原理图捕获模块,另一个是包含用于驱动硬件的标准微芯片源代码的VSM Studio IDE
我们需要做的第一件事是编译源代码并生成一些我们可以在模拟中测试的固件。
编译器配置
微芯片的源代码是用高科技的PIC16编译器编写的,所以我们需要安装这个工具来编译固
件。
切换到VSM Studio选项卡,并从Config菜单启动编译器配置对话表单。
对话表单列出了所有受支持的编译器,以及是否安装和配置这些编译器的指示。
按下对话底部的“检查所有”按钮将扫描您的计算机中的编译器,并且-如果找到-将配置T[hem直接从Proteus内部工作。
开源编译器可以直接从LabCenter的服务器上下载和安装。
提供了到专有编译器供应商网站上的下载页面的链接,我们需要的高科技编译器需要从Microchip网站下载,因此如果您没有安装此编译器,您将不得不:
1. 点击编译器旁边的转到网站按钮。
2. 下载并安装编译器
3. 单击对话表单底部的Check All按钮,将编译器配置为使用Proteus
运行此命令后您应该注意到,对话表单上的高科技编译器行被标记为已安装。
IDE底部的输出窗口还将报告编译器检查的结果
在这个阶段,我们已经有了编译器,源代码和原理图。
使用VSM Studio中的Build菜单上的Build Project命令(或Build图标)编译固件。
编译器的输出被写入IDE的底部窗格,在完成时您应该会得到一条编译成功的消息
下一步是在虚拟硬件上运行仿真并测试我们编译的代码
*VSM Studio自动配置常见的编译器选项,以正确地构建您的程序,以便在Proteus中进行模拟。
如果您需要调整设置(例如,链接到外部库),您可以通过“构建”菜单上的“项目设置”进行调整。
运行模拟
运行模拟就像按Proteus左下方动画控制面板上的play按钮一样简单
您应该会看到Schemical选项卡出现在前台,并且LCD面板显示默认时间。
F1评估板的微芯片演示代码有三种模式,一种用于时间,一种用于温度,第三种用于从POT 获得ADC读数。
您可以通过按原理图上的control按钮与仿真交互并循环运行各种工作模式。
在温度模式下,您可以通过单击递增或递减按钮来调节MCP9800温度传感器上的温度。
当前温度通过I2C总线传输到PIC处理器,然后格式化并显示在LCD上。
在电压模式下,您可以调整电位计的值。
电压读数由处理器进行转换,然后显示在LCD面板上。
PIC微控制器有一个10位LCD,因此在0至3.3V范围内,我们的显示值范围为0至1023。
完成后,按动画控制面板上的停止按钮停止模拟。
重要说明
当我们在Proteus中运行模拟时,发生了很多事情,这些事情可能不会立即显现出来。
首先,原理图上的微控制器以与物理PIC执行其编程固件完全相同的方式执行编译的固件文件。
使用VSM Studio IDE只需在成功编译后将输出文件发送到原理图,就可以实现“编程”步骤的自动化。
您会注意到,原理图端的几乎所有导线都在一个带有名称的端子中。
对于那些不熟悉终端连接的人来说,有必要解释一下它是如何工作的。
在原理图上,任何两个名称相同的端子都被认为是连接的(就像一根“虚拟”导线)。
例如,温度传感器侧的RC3和RC4引脚对应于连接到PIC处理器上I2C引脚的RC3和RC4引脚。
我们倾向于这样布局原理图,以避免通心粉式布线,并将原理图拆分成易于识别的逻辑块。
需要了解的重要一点是,所有信号都是在可见导线上传输的。
这意味着您可以在任何可以看到导线的地方附加电压探头或测量仪器(确实,我们将在教程后面同时进行)。
ISIS所做的只是在两个终端之间“跳转”信号,就像有一根线连接一样。
您可以在ISIS参考手册中阅读更多有关此类连接的信息。
最后,应用程序底部的状态栏报告所经过的模拟时间。
根据计算机的功率,处理器的时钟速度和原理图的复杂性,特定的仿真可能不是实时运行的,但它将始终同步运行,执行时间会在状态栏上报告。
例如,在特别慢的计算机上,时钟模式下的模拟可能不会随着墙上的时钟前进而前进,但它将总是随着模拟时间的前进而前进。
写入固件
现在我们已经通过模拟完成了工作流,让我们向程序添加一些功能。
我们知道按下按钮可以在时间显示,温度和锅显示之间切换,所以我们可以很容易地在这里添加另一种操作模式。
首先切换到VSM Studio IDE选项卡并打开main.c文件(双击项目树中的项)。
您将看到文件顶部附近有一些函数原型和操作模式的枚举。
我们需要为我们的测试模式添加一个新的函数原型,还需要为枚举添加一个相应的值。
您可以添加以下内容:
接下来,我们需要找到按钮切换逻辑,以便添加我们新的操作模式。
最简单的方法是搜索其他模式之一。
右键单击VSM Studio中的编辑窗口,从结果上下文菜单中选择Find,然后输入MODE_POT作为搜索项。
几乎第一个命中就是我们正在寻找的那个,即按钮释放时的开关语句,该语句循环显示模式的设置。
我们需要做的就是添加新模式。
*注意,您还需要更改前一个case语句的显示模式。
在代码的下面,还有另一个switch语句,它操作当前的显示模式。
同样,我们需要在这里调用我们的函数。
最后一步是编写一个函数,当我们进入我们的操作模式时,它会做一些事情。
我们将把它添到
文件的底部
你可以在这里尝试和添加任何你喜欢的东西,但是我们会做一些简单的事情,向显示器写入一个
值,并在LED上添加一个二进制计数器。
由于这里使用PORTE写入LED,因此还需要配置端口引脚。
我们将在main函数顶部的外围配置部分中设置ANSELE。
最后一步是像前面讨论的那样构建项目并启动ISIS。
如果您犯了一个错误(就像我们在这里所做的那样),您将在输出窗口中得到一个编译器错误。
单击此错误将导航到问题。
在我们的例子中,我们从行尾漏了一个分号。
*有些错误--例如链接器错误--显然将无法导航。
在这些情况下,您可能需要通过project settings命令更改选项/包含项。
当我们这次运行模拟时,我们可以使用按钮循环操作模式,直到达到我们自己的模式(时间->温度->测试)。
此时,我们应该在显示器上看到我们显示的数字,并在LED上看到字节周期计数
再次按下动画控制面板上的停止按钮,停止模拟。
这个例子有点做作,也不太令人兴奋,但它确实展示了如何在虚拟硬件上快速编写和模拟代码。
活动弹出窗口
到目前为止,我们一直在VSM Studio选项卡中编写我们的代码,并在原理图捕获选项卡上进行模拟。
这没有什么问题,如果你将其中一个标签拖到另一个屏幕上,它可以在两个显示器上工作得很好。
但是,在调试时,您通常更感兴趣的是单步执行代码,并只查看电路板的一小部分以进行验证。
Proteus中的主动弹出系统就是为了做到这一点而设计的--在模拟期间将原理图的定义部分带入VSM Studio。
在我们的例子中,温度传感器就是一个很好的例子,我们可能希望在调试期间看到并与之交互。
要将其添加为活动弹出窗口,请执行以下操作:
1)切换到ISIS选项卡并选择活动弹出图标
2)从左上方开始,并在其周围拖动一个框。
3)当您完成时,您应该看到一个蓝色虚线围绕区域。
*如果你犯了错误,你可以右键点击虚线并删除。
同样,如果你的定位是错误的,你可以右键点击虚线并拖动。
其他可能的活动弹出窗口的候选者是模式选择按钮,POT和显示本身,所以我们可以重复上面的过程,在这些项目周围拖动额外的框。
完成后,您的原理图应该如下所示。
因为我们指定了活动弹出窗口,所以假设我们将在VSM Studio内工作(调试)。
如果您现在按play按钮来运行模拟,您应该会发现您切换到VSM Studio选项卡,并且活动的弹出窗口显示在IDE的右侧。
*当我们自由执行代码时,选项卡的source和variables区域将显示一条模拟运行消息。
我们将在本教程的下一节介绍调试。
活动弹出式窗口之所以聪明,不仅是因为它们将原理图中的一些区域带入调试环境,还因为您可以与它们进行交互。
例如,如果单击S1按钮切换模式,则应看到I2C温度传感器上的温度显示发生变化,如果随后调整传感器上的温度,则显示应反映变化。
您可以切换回Schemical选项卡,您将看到与活动弹出窗口中完全相同的状态。
当你停止模拟(从动画控制面板),活动的弹出窗口将消失,VSM Studio将从它的“调试布局”切换到它的“设计布局”,在那里你可以再次编辑和编译你的源代码。
*您只能在停止模拟时在原理图上创建或调整活动弹出窗口。
但是,您可以在运行模拟时通过拖动调整VSM Studio中活动弹出窗口的大小。
现在,我们已经配置了活动弹出窗口,我们可以开始研究如何在第一次出现问题时调试问题。
基本调试
Proteus VSM的大部分真正功能来自于它的调试功能。
我们已经看到了如何在自由运行模拟期间编写代码和进行测试,现在我们来看看如何在模拟时间内逐步完成代码。
使用动画控制面板上的暂停按钮开始模拟
程序将切换到VSM Studio选项卡,活动弹出窗口将显示在右手边,主面板将报告一个“没有源行消息”,程序变量列表将出现在屏幕底部。
在这个阶段,模拟已经“启动”,并且找到了一个稳定的操作点,但是没有指令执行,也没有实时时间过去。
未显示源代码,因为在当前程序计数器值处没有源行
您可以从窗口顶部的组合框中选择任何程序源文件,但我们将从main.c文件开始,它包含主要的程序控制循环
举一个简单的例子,让我们在释放按钮时在主事件循环中设置一个断点。
设置/切换断点的最简单方法是双击要中断的代码行。
断点指示器应该出现在源窗口的左侧,在有问题的代码行旁边。
如果您错误地设置了断点,那么您可以通过再次双击该行(或从右侧上下文菜单)来删除它或切换它。
如果我们现在运行模拟(play按钮),它将在自由运行模式下愉快地切换执行,直到我们释放模式切换按钮(S1),此时按钮释放的代码将被击中,模拟将暂停。
您可以通过点击活动弹出窗口中的按钮轻松完成此操作。
到达断点后,我们可以通过常见的命令单步执行代码(和系统),这些命令可以在source 窗口的右上方或者VSM Studio中的debug菜单上找到。
或者,您可以使用F10和F11快捷键分别为‘步进’和‘步进’。
如果您确实需要详细检查行为,您甚至可以在程序集级别对代码进行单步执行。
右键单击源菜单,从结果上下文菜单中选择“反汇编”,然后使用与前面相同的步骤命令。
右键单击并再次选择“反汇编”以返回到高级源代码单步执行
*您可能会注意到,在步骤调试期间,显示的活动弹出窗口没有显示完整的可读输出。
这是正确的,并且是多路复用显示的结果。
如果您想要运行到下一个按钮释放,只需按下动画控制面板上的播放按钮,然后单击活动弹出窗口上的按钮再次触发断点。
完成后右键单击并选择“清除所有断点”,然后按动画控制面板上的“停止”按钮以结束调试会话。
重要说明
当您在Proteus中遇到断点或单步调试时,了解整个系统处于时间控制之下是很重要的。
例如,这意味着当系统暂停时,电容器不会放电或电机失去动量。
当您跨过一个命令时,指令将被执行,这些指令的效果将通过系统传播,然后系统将再次暂停。
在调试期间,您可以通过状态栏上的输出看到这种受控制的时间提前。
还有许多其他调试窗口可用,本教程中没有讨论这些窗口。
所有这些都可以从VSM Studio 中的debug窗口启动,并将出现在IDE的底部。
当模拟暂停时,数据将显示在窗口上。
监视窗口--这是一种特殊情况--将在本教程的下一节中单独讨论。
监视窗口
监视窗口是一个调试窗口,在自由运行模拟期间提供实时数据,它还为我们提供了一种不同的方法来定位断点。
首先,让我们使用watch窗口监控来自POT的ADC转换。
使用Proteus底部的play按钮启动模拟,然后从VSM Studio中的debug菜单启动watch 窗口。
您应该看到它在IDE底部显示为停靠的选项卡。
接下来,右键单击监视窗口,并从上下文菜单中选择“按名称添加项目”。
我们想添加ADC 寄存器ADRESH和ADRESL,双击条目即可。
完成后退出对话表单,您应该会看到这两个项目都出现在“监视”窗口显示中。
我们现在需要使用活动弹出窗口(或切换到原理图选项卡)来切换到POT读取模式。
单击控制按钮三次以循环模式,然后使用器件左侧的执行器按钮来改变电位计上的值。
如果您发现更容易理解结果,可以将项目的显示格式更改为二进制。
您可以通过右键单击watch窗口中的每个项目并将显示格式更改为二进制来完成此操作。
由于这是10位ADC,我们希望最大值为1023或0x03FF,当POT完全上升时,我们应该看到该值。
现在让我们假设我们需要在返回的路上抓住中点。
我们知道,中点值结果应该在0x1FF左右,因此我们可以在观察项上设置条件以触发断点。
我们通过右键单击一个监视项并从上下文菜单中选择watchpoint condition来实现这一点。
在本例中,当ADRESH均等于0x01且ADRESL小于或等于0xFF时,我们希望停止。
这将起作用,因为在从最大值下降的过程中,我们第一次达到该值时将处于中点电压.
注意,您需要单独配置ADRESH和adresl。
完成后,“监视”窗口显示应如下所示。
.
设置好观察条件后,我们现在需要做的就是调整锅向下,直到当条件满足时断点开始。
和之前一样,您可以通过VSM Studio内部的POT活动弹出窗口或切换到Schemical选项卡来完成此操作。
当触发时,您应该看到监视项上的值是0x1FF,并且如果需要的话,您可以在条件被触发的位置开始单步执行您的代码。
*当您想要捕获溢出条件时,监视条件对于调试计时器代码之类的事情特别有用。
*您可以通过右键单击监视项,选择监视点条件,然后从结果对话中选择“关闭监视点”选项来禁用监视点表达式。
在我们继续讨论硬件断点之前,要么禁用观察点条件(如上所述),要么完全删除观察项,然后按动画控制面板上的停止按钮结束模拟。
硬件断点
到目前为止,我们已经查看了如何根据软件条件(观察点和断点)闯入模拟。
也可以使用硬件断点对象,以便在硬件条件发生时检查代码。
例如,如果我们希望捕捉I2C总线上活动的开始,我们可以在I2C线路上设置一个硬件断点,如下所示。
切换到原理图选项卡,然后从左侧的模式选择器中选择电压探针图标。
接下来,点击编辑窗口开始放置,将鼠标移动到总线上的SDA线上,然后再次左键点击将探针落在导线上。
现在,右键单击探测并从结果上下文菜单中选择edit properties。
选择digital breakpoint,我们希望在低电平有效时触发,因此输入0作为触发值。
单击“确定”,然后按“播放”运行模拟。
您应该会发现,模拟几乎会立即暂停,VSM Studio 中的source窗口将显示我们刚刚执行了一个将SDA设置为低电平的命令。
这个断点实际上发生在初始化例程内部。
如果我们希望跳过此操作,仅在进入I2C模式时激活,则需要设置断点并启动时间。
通过停止模拟,切换到原理图模块并像前面一样编辑来完成此操作。
将arm时间设置为1秒。
这一次,当我们运行仿真时,断点将不会触发,直到我们按下模式选择按钮进入温度模式(温度在I2C总线上传输)。
您应该会发现在源代码中的一个I2C例程中结束。
您可以使用前面几节中描述的步进和调试,从此处遵循代码路径。
完成后再次停止模拟。
交互测量
在设计中检查信号和波形是很常见的,Proteus提供了两种主要方法。
例如,假设我们需要检查来自MCP9800温度传感器的I2C通信量;我们可以通过交互方式或更传统的基于图的方法来实现这一点。
我们需要做的第一件事是整理原理图,并移除我们之前使用过的调试项。
右键单击原理图上的探头,然后从上下文菜单中选择“删除”,即可移除电压探头。
同样,我们可以右键点击活动弹出对象的边框并删除它们。
*当在原理图上定义了一个活动的弹出窗口时,当模拟开始时,Proteus将切换到VSM Studio,因为假设您主要是在调试源代码。
因为我们现在正在分析信号,所以我们希望移除活动的弹出窗口,以便模拟开始时打开示意选项卡。
接下来要做的是放置和连接I2C调试器。
选择instrument图标,该图标将在零件库中生成可用交互式测量工具列表。
在本例中,明显的备选方案是I2C协议分析器。
单击器件库中的I2C分析仪,将其选中,然后按通常方式将其放置在原理图上。
为了便于布线,您需要将其置于温度传感器下方。
接下来,我们需要给引脚连线。
请注意,光标在电线的起始点和停止点上都变成绿色。
因此,布线过程是将鼠标放置在起始点(I2C调试器上的引脚)上,直到光标变为绿色,单击鼠标左键开始放置,将鼠标移动到目标点(光标变为绿色),最后单击鼠标左键终止放置。
使用此技术将SCL和SDA线路都连接到I2C总线。
一个我们已经连接好分析器,我们就可以开始模拟了。
您应该会立即看到,I2C调试器还有一个额外的窗口,似乎是一些初始化/标识流量。
要查看正常传输,我们需要按下原理图上的按钮切换到温度模式显示。
因为代码是不断轮询的,所以你应该从动画控制面板暂停模拟,这样我们就可以花一些时间来分
析流量。
*如果您在单个帧中工作,则当模拟暂停时,VSM Studio选项卡将出现在前台,因为假设您对待执行的源代码感兴趣。
然而,分析器将保持在顶部。
如果您想同时看到原理图和源代码,您可以使用活动弹出窗口,或者将VSM Studio选项卡拖到一些空闲空间上分开
协议分析器中使用的语法是标准的,应该是熟悉的。
您可以通过左侧的“+”框展开任何序列。
外设(MCP9800)的标准地址为0x90,因此我们可以从读取请求中看出,序列为start(S),然后是读取请求0x91(读取请求,位0置位),然后是0x1B(数据),依此类推。
如您所料,接收到的数据(0x1B)为小数点27,对应于外设上当前显示的温度。
您可以通过运行仿真,改变MCP9800原理图器件上的温度,然后再次暂停以检查I2C调试器上的显示输出来进行实验。
请注意,对于这样的不断轮询固件,在性能方面有相当大的开销,因为我们不断地向显示器写入文本数据。
然而,在大多数情况下,您正在使用该仪器进行测试或调试,在这一点上,
模拟速度相对于问题解决是次要的。
与所有调试窗口一样,您可以在不使用调试器时关闭它,然后从VSM Studio或ISIS中的“调试”菜单重新打开它。
进一步阅读:
有关协议分析器以及其他仪器的更多信息,请参阅Proteus VSM参考手册。
特别要注意的是,您可以将分析仪用作I2C主机(或从机)器件,也可以简单地用作监控器。
有关原理图上的拾取,放置和布线的更多信息,请参见ISIS教程文档,可从主页上发布。
基于图的测量
通过使用基于图的模拟,我们可以用不同的方式来看待相同的流量。
然而,有一些重要的差异影响了我们如何设置模拟,即:
在基于图形的仿真过程中,您不能与电路交互。
基于图的模拟运行一段指定的时间。
直到这段时间结束并且模拟停止,结果才可见。
鉴于上述情况,让我们看看如何用数字图表分析I2C通信量。
首先,通过右键单击交互式I2C调试器并从上下文菜单中选择delete来删除它。
接下来,用鼠标右键在显示器和电线周围拖动一个标签框,以便它们都突出显示,从而为图形留出一些空间。
左按下鼠标并将该批次拖动到示意图的右侧。
现在选择图形图标,然后从零件库中选择数字图形。
左键单击您想要图形所在位置的左上角的鼠标,然后向下和向右移动鼠标。
再次左键单击提交位置。
注意,原理图上的图形不需要特别大。
当我们稍后分析模拟结果时,我们将最大化它。
添加了图形之后,我们现在需要告诉它我们要跟踪哪些线。
我们通过将探针连接到导线上,然后将探针指定为图形上的迹线来实现这一点。
选择电压探针图标,然后在两条I2C线路上各放置一个探针。
这与我们前面在硬件断点一节中讨论的完全一样。
如果您需要为探针腾出一些空间,请右键单击电线末端的终端,右键单击并从上下文菜单中选择“拖动对象”,然后向左移动以为探针腾出空间。
你可以使用鼠标中键或F6/F7键在鼠标位置周围放大和缩小,如果你需要接近。
F8键将返回原理图的默认视图。
默认情况下,电压探头将获取端子的名称。
对它们进行重命名,使其在我们的模拟上下文中更有意义,这是很有用的。
您可以右键单击探测,编辑它的属性,然后分别将名称更改为SCL或SDA。
现在我们有了导线上的探针和原理图上的图表,我们需要将探针添加到图表中。
有几种方法可以做到这一点,但最简单的可能是将探针拖到图形上。
为此,右键单击探测器,选择拖动对象,将鼠标移动到图形上,然后再次左键单击以拖放。
对两个探头都执行此操作。
默认情况下,基于图形的模拟将从时间零运行到模拟时间的一秒。
在我们的例子中,从一秒运行到两秒,从而跳过初始化流量,会更有意义。
我们可以通过编辑图形(右键单击并编辑属性)和更改开始和停止时间来做到这一点。