朱敦忠,周红锴,吕广文,袁 梅
(桂林理工大学南宁分校,广西 南宁530001)
Proteus软件是一款含有丰富的集成芯片、分立元件和硬件接口电路,能进行PCB设计具有软、硬件仿真相结合的EDA工具软件,该软件被广泛地应用到电类专业的“单片机”、“嵌入式”等课程教学以及电子产品开发过程中[1-4]。在单片机控制系统中单片机经常需要和各种硬件接口电路进行连接,在软件设计过程中常需要依据接口芯片的时序进行程序设计,为了能更直观地观察单片机控制接口芯片的时序,本文设计一个单片机控制的简易数字电压表系统,通过使用Proteus软件进行系统设计并使用Proteus图表查看单片机控制ADC0831芯片的时序仿真,探索使用利用Proteus图表波形仿真在单片机控制芯片读写时序仿真的方法[5]。
简易数字电压表系统以AT8951单片机作为主控芯片,以ADC0831作为模数转换芯片并以4共阳数码管作为显示器件。其中ADC0831把采集的模拟电压转换为相应的数字量并传送到AT8951芯片,AT8951单片机负责数据的处理,将ADC0831芯片采集模拟电压结果送到数码管进行显示。电路连接上,在 Proteus软件中将 AT8951单片机的 P1.0、P1.1、P1.2引脚分别与ADC0831芯片的的片选、时钟CLK、数据 DO 引脚相连接,单片机 P0.0、P0.1、P0.2、P0.3 引脚与驱动4位共阳数码管的三极管相连接,通过单片机P2口与4位共阳数码管段码相连接,被测电压用可调电阻RV4通过5 v电压分压模拟。简易数字电压表系统的Proteus仿真电路图如图1所示[6]。
如图2所示,给出了简易数字电压表系统程序流程图。首先对AT8951单片机、数模转换器ADC0831芯片、4位数码管等进行初始化设置。接着对输入的待测电压进行检测,从ADC0831芯片读取被测电压值的二进制数据,然后,AT8951单片机根据算法将该二进制数据转换成十进制电压值送到数码管进行显示。
图1 简易数字电压表电路图
图2 简易数字电压表程序流程图
在简易数字电压表系统中,AT8951单片机作为主控芯片,模数转换器ADC0831芯片把采集的模拟电压转换为相应的数字量并传送到AT8951单片机进行数据的处理,AT8951单片机将处理结果送到数码管进行显示。因此,主控单片机AT8951对模数转换器ADC0831芯片的软件控制显得尤为重要。
如图3所示,给出了ADC0831时序[7]。
图3 ADC0831时序图
根据图3,编制主控单片机控制模数转换器ADC0831芯片读写时序程序如下:
(1)选择探针模式。在Proteus的左侧工具箱上选择电压探针按钮图标 ,依次在ADC0831芯片CS、CLK、DO管脚连线上放置电压探针[5]。
(2)选择图表模式并放置图表。在Proteus的左侧工具箱中选择图表模式按钮图标 ,在右侧的GRAPHS选项中选择DIGITAL即数字图表,然后将鼠标移到编辑窗口,点击左键开始放置图表,拖出一个适当大小的矩形,再次点击左键完成图表的放置[7]。
(3)添加电压探针到数字图表。依次选择ADC0831芯片CS、CLK、DO管脚的电压探针按住鼠标左键拖到DIGITAL图表中,然后释放鼠标左键(该操作像移动探针到另一个位置一样)[5]。
(4)生成图表仿真波形。在主菜单[Graph]→[Simulate Graph]命令(或使用快捷键:空格键),生成仿真波形,如图4 所示[5]。
图4 仿真图表波形
(5)查看仿真波形。在仿真图表上单击鼠标右键选择 Maximize(show window),将弹出 DIGITAL ANALYSIS-PROSPICE仿真窗口。可以通过该窗口中的View菜单,对仿真图形放大与缩少,其中选择Zoom Area选项可以将鼠标选中的波形区域放大[5]。
查看ADC0831芯片资料,要获得ADC0831转换的8位数据可以通过unsigned char Read Data From ADC0831(void)函数实现,该函数的读写时序控制过程为:(1)初始化。ADC0831_DO为1即将单片机P1.2口设置为输入(目的是读取ADC0831的DO口数据),ADC0831_CS=1,ADC0831_CLK=0;(2)启动过程。ADC0831_CS=0,ADC0831_CLK=0,然后经过Tset-up时间后给ADC0831_CLK传送一个下降沿的时钟来启动ADC0831芯片进行AD转换;(3)获取数据过程。每来个时钟且在下降沿时获取1位AD数据且一个字节数据的转换数据传送形式为:高位到低位依次完成数据转换,因此依次进行8次左移从而实现一个字节AD转换结果;(4)转换结束。ADC0831_CS=1完成数据的转换。
查看ADC0831芯片资料Tset-up时间250 ns,从图5的DX:+1000 n可知程序满足ADC0831芯片Tset-up时间要求(1000 n>250 ns)。从图5的DO可以得出ADC0831的一个字节转换数据为(01000000)2=64,根据转换公式:被测电压/AD转换数据=ADC0831参考电压/256,即被测电压=(ADC0831参考电压*AD转换数据)/256,本文的简易数字电压表系统ADC0831参考电压为5 V,被测电压信号用可调电阻RV4对5 V电压分压进行模拟,当可调电阻RV4调到25%位置时如图1所示,读取到一个字节转换数据为(01000000)2=64如图5,经过转换公式计算被测电压 =(5*64)/256=1.25 V与图1仿真结果显示的电压相符。
图5 放大后的图表波形
在单片机控制系统中,单片机常需要根据芯片时序图进行读写控制。因此,单片机控制芯片读写时序是否正确将直接影响系统能否正常工作。使用Proteus软件的图表仿真波形查看单片机控制芯片读写时序的方法可以直观的查看实际程序设计是否正确,该方法有助于定性的分析单片机对芯片进行操作过程中出现的问题,对电类专业学生学习单片机控制芯片读写时序的认识以及缩短电子工程师产品开发周期起到很重要的作用。
参考文献:
[1]周润景,张丽娜.基于Proteus的电路及单片机设计与仿真[M].北京:北京航空航天大学出版社,2006.
[2]王 超,杨莲红.Proteus仿真软件在单片机实践教学中的应用[J].现代电子技术,2014,37(14):84-87.
[3]王海燕,杨艳华.Proteus和Keil软件在单片机实验教学中的应用[J].实验室研究与探索,2012,31(5):88-91.
[4]王 娟.Proteus软件在单片机专题实训中的应用[J].实验室研究与探索,2012,31(8):72-75.
[5]邓 力.使用Proteus仿真图表对单片机指令时序仿真[J].科技通报,2013,29(5):130-133.
[6]王 瑾.基于Proteus的数字电压表仿真设计[J].电子设计工程,2013,21(1):122-124,128.
[7]叶 刚.基于ADC0831数字电压表的设计[J].电脑知识与技术,2017,13(8):243-144.