程序说明 java V1.0 2015/2/08编程 |
MATLAB串口操做和GUI编程数组 |
概述async |
本文介绍了程序AD9512_Serial_GUI的编程思路和功能。该程序设计到MATLAB的图像用户界面编程的基本方法和串口的基本操做。程序目的在于经过串口写控制字对AD9512进行配置(AD9512经过SPI写入寄存器,本程序只是整个控制程序中的一部分)。ide |
修订历史函数 |
如下表格展现了本文档的修订过程 学习
[1]. 试验版本代表该版本应用笔记及对应代码没有经过实际验证,同时仿真分析也可能没有进行。试验版对应的版本号为V0.X。 [2]. 写入操做时将 'async' 去掉,基本经过验证,同时因为RS232写入是LSB的顺序,和FPGA端代码不匹配,所以此处更改了serialwrite程序。 |
简介 |
本程序基于MATLAB 2014a 编写,本文档中提到的"MATLAB"均指该特定版本MATLAB。 本程序想要实现的功能是:上位机控制AD9512,固然AD9512是和FPGA相连的,而FPGA经过串口和上位机链接。AD9512的控制方法参见其DataSheet,经过SPI配置。从原理上来讲,SPI和UART都是全双工的,可是读取过程当中也须要写入控制头,此处采用的是半双工方式。 本程序的思路在于将FPGA看做是一个UART转SPI的器件,直接经过上位机配置AD9512。FPGA端的处理暂时不考虑,本MATLAB程序按照须要写入的控制字生成传输程序。如下是本程序涉及到的相关背景知识。 串行通讯和RS232 略。(可参考MATLAB帮助 - Data File Management – Serial Port Devices或相关文献) MATLAB的串口操做 串口操做和实际上很简单,大部分从MATLAB的帮助中就能够找到。创建,打开,关闭,删除,写数据,读数据。基本操做就是这些。须要注意的是串口打开后切记要记得关闭。基本操做有 s=serial('COM1'); fopen(s); fwrite(s,100); %写一个字节 fread(s,[1 1],'unit8'); %读一个字节 fclose(s); delete(s); MATLAB的GUI编程 这一个程序仍是比较初级的,对于没有接触过MATLAB GUI编程的人来讲,参考MATLAB帮助 – MATLAB -GUI Building - GUI Building Basics - Examples and How To-Create a Simple GUIDE GUI,按照其中的例子本身完成一次,并了解其基本原理后,了解这个程序就十分容易了。 |
程序设计 |
程序设计流程按如下流程进行:
需求 程序功能分简单,具体来讲只须要实现3个功能便可。
界面设计 综合需求考虑需求,界面设计以下
其中,界面最下方准备在后续版本中添加状态输出窗口,以便及时了解程序的运行状态。本程序采用GUI Guide编写图像用户界面,用到了如下组件 statictext:静态文本 button:按钮 buttongroup:按钮组(将这些按钮联系在一块儿) table:表格 edittext:可编辑文本 panel:面板,把一些控件结合起来 编程中一个相对良好的习惯是给每一控件的"Tag"属性命名(有意义),而不该该使用默认名字。 对于MATLAB的GUI编程,我的观点是(暂时)对于复杂的应用不要采用MATLAB,对于简单的应用能够采用,可是真的很很差用。MATLAB的优点在于其强大的数学计算能力,若是应用不须要这一点(譬如说本应用),那么也不该该使用。 界面控制 此处我想表达的意思在于,当触发某一控件操做后,可以及时改变其余控件的相应状态,防止非法操做的进行。譬如,该程序仅对一个串口进行操做,在正确打开串口后,关闭串口前没法再次执行"打开"操做或是改变串口端口号。 完成这一功能及其简单,只须要采用set命令改变控件状态便可,譬如使得"打开"按钮没法使用(呈"灰色") set(handles.portOpen,'enable','off'); 这些语句大抵都写在Callback函数中。Callback函数大抵是MATLAB GUI编程中最重要的了,若是没记错的话相似java里面的监听。也就是说对某些操做的响应。不一样的控件出发callback的过程是不同的,具体能够参考帮助或是《MATLAB GUI 设计学习手记》。对于界面的几乎全部元素,均可以经过handles访问。 本版程序对部分操做有相应的处理,然而很不完善。这也说明看似简单的东西也须要仔细思索,作起来每每不是那么容易。 功能实现 本程序中有三个函数,包括
将其写出函数而不保留在主程序内的优势暂时看来有两点:其一是主程序过长并且大部份内容是MATLAB自动生成的;其二是对应不一样的应用须要修改参数或是输出格式时,只需相应修改这几个函数便可。 串口打开操做较为简单,经过获取可编辑文本框内的端口号打开便可。读写操做相似,如下以写操做为例作简要介绍。 写数据以前须要获取要写的数据,即用户输入表格中的数据。表格在MATLAB中叫作Uitable,里面存放的数据类型是cell array(元胞数组)。(cell是MATLAB的一种数据类型)必需要注意的是,在创建Uitable的时候设置个列的数据类型后,即便不使用set方法改变其类型,Uitable的数据类型也可能会由于你设置的cell的类型的变化而变化。(在创建Uitable的时候,也有相关的警告) 经过使用get方法能够获得表格内的所有数据data,经过data{m,n}能够访问相应位置的内容( data(m,n)访问的是元胞)。本程序中输入格式是字符串,对应应该是两位的16进制字符(程序暂时没有任何的查错能力,任何非法输出会致使程序中止运行)。 serialWrite中的操做就是简单的将16进制的字符串转换为数字,以后经过fwrite函数发送出去。相应的针对AD9512,有每次写入1byte的话,头部应该是0+addr,以后跟寄存器。将cell array中的字符串转换后发送便可,记得最后须要写5A寄存器完成更新的过程。在读取状况下,头部写8+addr就能够等待接收数据了。 |
参考 |
MATLAB帮助 MATLAB GUI 设计学习手记 MATLAB编程(第二版)- 菜鸟入门教材 |
代码 |
|