- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序方案给你电路注入灵魂
程序设计 给你的电路注入灵魂
发表日期:2010-07-14 14:14:37 来源:《无线电》杂志 2009.01 作者:魏坤 【大 中 小】 浏览:4608次 评论:0条
没有程序,那一堆堆电路起不到任何作用,完全是一堆废板子!就像一台没有操作系统的电脑一样,只能废电。程序设计是整个示波器制作中的难点,本文将详细讲解程序的设计。该示波器中的程序全部是用C语言编写的,开发环境为CodeVisionAVR?C,源程序可到《无线电》网站(?)下载,下面就各个重要的子程序的设计一一叙述,其他程序见源程序。MCU2与MCU1的程序流程图分别见图1和图2。
?
同步触发的软实现
细心的朋友也许会发现这个示波器电路中缺少一部分电路,就是硬件触发电路。为了降低电路的复杂性,我没有做这个电路,而是用软件实现同步触发的。虽然这样做有个弊端,就是几乎无法实现单次触发,但是我基本不用这个功能。要用这个功能的朋友只需在程控放大器部分加上一个由高速比较器构成的迟滞比较器,然后将输出端接到一个外部中断的输入口即可。当然程序和电路就要作相应的变化,这里就不多讲了。软件触发的好处是触发条件更易调整,只需调整比较语句中的参数即可。保证可以用软件触发的条件是要有足够大的存储空间,显示一屏的数据为240个,但每次读进单片机的数据为500个,多余260个数据就是作为不满足触发条件的舍弃余量。为了以防万一,当从500个数据中已经读出超过260个数据但还没有符合触发条件的数据时,将跳出触发比较循环,重新从FIFO存储器中读出500个数据,因为FIFO存储器为4K容量,最多可以这样重复读取8次数据,所以软触发可以非常稳定地工作,在该示波器的MCU2中控制触发的语句见以下程序段:
程序的意思是只有当此时采样信号的数值是m且为上升沿时才可以触发,改变触发沿只需改变运算符,改变触发电压只需改变m的值即可,m的取值范围是0~255。 从采样数据中测信号峰峰值 本示波器能够测量输入信号电压的峰峰值,并显示在屏幕上。这个功能由峰峰值测量子程序完成,见下面的程序段。? 在程序开始时给a中赋值128,即基线电压值。因为一屏幕的显示数据为240个,所以用for()循环将if…else…判断语句执行240次,在a中存放最大值,在b中存放最小值。对每个数据进行比较,如果该数据比a大则将这个数据存入a,如果小于a,则将这个数据与b进行比较,比b大则抛弃,比b小则存入b。故当240个循环执行完后,a中存放的是这一屏幕数据中的最大值,b中存放的是这一屏幕显示数据中的最小值。在比较完后用a减去b,得到差值存入c中,则c中保存的值就是电压的峰峰值,调用电压计算显示子程序,根据当前的垂直灵敏度给c乘以不同的倍数,得到实际的峰峰值。当前垂直灵敏度的判断由一个switch()选择结构完成。biao寄存器中的数据是当前的垂直灵敏度,case?4:后面没有运算是因为程控放大器在此状态下的放大倍数为1,即没有放大也没有衰减。??? 在计算完峰峰值后,设置LCD显示器,使其工作在文本模式(因为只有在文本模式下对字库的调用才有效),然后设置屏幕上显示电压峰峰值的坐标(对该LCD模块的控制是先送命令,后送参数。例如设置X坐标“SdCmd(0x60);SdCmd(30);”中,第一个SdCmd()送的0x60是设置X坐标的命令,第二个SdCmd()送的30是X轴的坐标,其他设置相同。具体见光盘中LCD显示屏的资料。),在设置完LCD后约定显示格式,小数点后保留2位有效数字,显示单位为Vpp,显示完毕后需重新设置LCD工作状态,使其工作在图形模式用于波形显示。
?
将采样数据转换成显示数据 LCD显示屏为320×240点阵的图形显示模块,内置RA8803?控制器。模块不仅可以显示单一的文本、图形,而且可以实现双图层的(“或”、“异或”、“同或”、“与”四种逻辑关系)合成显示。在本示波器中方格线与波形是在不同的层上显示,显示关系为“或”,画方格线的程序见原程序,比较简单就不多说了,这里着重解释一下如何将采样数据转换成显示数据。? 显示屏的地址结构见图3,由图可知对显示数据的操作最小单位为字节,因为ATmega32的内存为2K字节,显示波形的区域为240×240,显示一屏波形所需处理的数据为7.2K,故ATmega32不可能同时处理一屏波形的全部数据,所以将一屏波形按字节分为30列,每次处理一列,处理完后直接显示,然后处理下一列。将AD转换所得的数据作为给LCD显示器写数据的列地址,因为一列数据位240字节,所以定义一个容量为240字节的数组lcd_buffer[240],lcd_buffer[?]在初始时数据全为00H,因为每次对数据的操作至少是一个字节,而每次处理的数据是所显示的一个点,所以
文档评论(0)