前言:一款测量仪器做出来容易,想好做好还是需要投入更多的时间和心血。
项目概述:硬件已经定型,在C8051F020基础上的软件开发。
一 关于C8051F单片机:虽然自己整过8051单片机,但那已经是6~7年前的事情了,这款单片机听说说但一直没有用过,不知道这款增强型CIP51核有啥优点。通过添加插件可以在KEILC51中进行开发,仿真器用的U-EC6,便宜但也容易坏,下载用的是KEIL或者flash programming utility,用的是JTAG口进行调试。因为51单片机的特点,keil中配置要注意,大部分的变量要加xdata修饰。
二配置工具:用的是configration wizard2可以自动化配置相应的外设并自动生成C/ASM代码,这个还是比较给力的。但这个优先权交叉开关还是要好好研究下才能正确使用。IO/串口/定时器/DAC/ADC(都是12位)这些模块没有什么特别的。
三项目模块:240128A液晶(多级菜单,2种(11类)测试项,一个通讯设置项(上传数据)时间修改、定时、出厂设置等)
3.1:240128A驱动:这个利用了长沙太阳人公司的驱动文件,但是它是8*8,或者16*16字体的没有12*6/12字体的。所以在此基础上更改了字体,增添了区域填充。区域清除。定点字符串输出、数据有效位显示等函数。缺点是将测量处理函数和这个文件放在了一起,独立性模块化的不够。
太阳人在液晶驱动方面做了许多有益的工作:通过自动化工具”Sunman字符图形点阵代码生成器“自动生成相应的点阵字模数据。增添显示内容很是方便。
3.2菜单结构设计:开机界面,启动自检界面、主界面、各测试项界面和通讯设置界面的3级菜单结构。各个固定显示界面要定义相应的显示结构体。可以利用排版工具大概定义好界面格式设计。
3.3同PC的USB通讯(CP2102芯片TTL转USB):构建握手协议,结合串口进行大数据量的数据上传(从存储芯片中读出来然后按内容传递)
3.3ADC和DAC:都是利用CD4051电子开关切换进行2个单片机通道的AD采集(其中一个专用于电池电量检测),CD4051电子切换开关很方便但要结合DAC、ADC做好采集却不是那么容易:当通过DAC控制光源开闭,定时器中实现高低电平频率。做起来很是费劲,ADC尝试了各种办法,最后采用滚动滤波算法,在高电平期间一直滚动获得ADC数值,在低电平时开始计算(去掉最大最小平均和累加和平均结合),计算好后进行相应通道编码提示。
3.4关于AD采集通道的校正和误差:由于器件和电路的硬件差异,各通道存在误差,如果保证各通道对相同物质采集的一致性是个困难的问题。我的思路是:上电后采用上下界二分法快速找到各通道满量程ADC和0ADC值得DAC范围(12位DAC/ADC,在0xfff~max~min~0的两边区间,ADC得到的都是0xfff和0),然后以0.9max给DAC作为采集信息的源(不要饱和)。低电平时DAC给0(小于MIN就行)、每种颜色的光源(波长相同)的这个满偏和0偏应该差异不大,当以MAX测各通道ADC若值小于一定值,我们可以判定通道是否完好。
即便是这样,我们还是需要做一遍在满偏和0偏时的ADC值存下来作为基础参数。这也是ADC的实际值得范围(包含了各种误差信息)。
备注:如果可以通道能做成并行的能单独控制光的开闭,这样更能保证采集的稳定。
3.5按键:仪器的11个按键配合多级菜单结果完成所有的功能也需要精心思考才能完成菜单逻辑。
3.6微型打印机:sprint和炜煌的微型打印机是第一次接触,挺好用的,串行形式(TTL/232/USB),可设置打印方向字体大小、行间距等。在开发初期可以用上位机和printf完成打印格式设计。
4用到的小工具:CheckTool.exe校验工具、LoveString.exe字符编码工具等。