基于RlTOS和ISP功能的数字仪表系统设计与实现

发布者:omega34最新更新时间:2007-02-09 来源: 国外电子元器件关键字:循环  实时  调试  编程 手机看文章 扫描二维码
随时随地手机看文章

引言

Atmel公司的控制器以其集成度高、在线调试方便等特点广泛应用于工程实践领域,文中以某武器系统的前期预研为背景,讨论了数字仪表系统的软硬件实现过程,其主要功能包含:实时采集配电箱系统的6路正负模拟电压值及作战环境温度,并通过MSl2232B型液晶模块动态式显示。

1 软件特性

随着C语言在嵌入式系统中的广泛运用,软件系统的实时性、复杂性设计要求也越来越高,用通常的单任务无限循环结构与中断服务子程序相配合的编程思想已难以完成相关的软件设计或实现较为困难,RTOS(多任务实时操作系统)是现阶段较为流行的处理方式。


  RTOS的基本设计思想是将多种系统输入和处理要求,按功能做成不同的任务函数体,并分配适当的优先级,参考Windows系统的多线程处理机制,将CPU执行时间划分成若干区段,每个任务函数体对应一个时间片段.在规定的时间内执行完后允许切换到另一个任务,因各时间段非常短,表现的是多任务实时处理特性。因为任务并非同时执行且具备跳转特性,所以整个项目管理文件内可以有多个无限循环结构,且省略了main入口函数,这是RTOS最大的特色。文中以Keil集成开发环境为平台,利用RTX5l Tiny版本来完成整个软件设计过程。

ISP(在系统可编程)是一种适合Atmel系列器件的Flash技术,通过PC的LPT标准并行接口,能实时地将Intel格式的源程序代码下载到微控制器的相应存储区域。ISP的最大特点是简化了调试过程,提高了软件系统的可维护性,使其具备了在线升级特性。而且整个开发过程省去了反复插拔电路的操作。

2 系统硬件构成

本系统硬件主要包括如下几个模块:AT89S52型主控制器、ADC0809型模/数转换、MSl2232B型液晶显示器、温度传感器及语音报警等。其中AT89S52型微处理器主要完成外围器件的硬件控制及相关数据解算,ADC0809采集6路模拟信号并输入主控制器,MSl2232B完成数字及相关标识字符的显示,配电系统的电压波动超出预定指标时由语音模块给出相应的报警信息。


  2.1主控制器模块

主控制器是Atmel公司生产的AT89S52型单片微控制器,与常规C51系列相比,其突出特点是具有8KB闪速式存储器(降低了对外扩存储器的要求)、256B RAM内存(可容纳更多局部变量)、8个中断源及ISP在线可编程特性。

2.2液晶显示模块

MSl2232B属于图形点阵系列的显示器件,具有双行显示功能,其点阵结构为122×32,通过AT89s52给出必要的数据和指令来操作MSl2232B主、辅控制器,从而完成图形、字符等相关信息的显示。该液晶显示模块还具有较强的通用性.用户用少量元件就可以构成一个完整的LCD系统。电路连接如图1所示。

2.3 A/D数据采集模块

由于本系统涉及多路模拟信号,故选择了AD(20809型通用模/数转换器,它采用逐次逼近方式完成A/D转换过程,其片内带有8路模拟开关,能自动锁存信号,输入电压范围是0V~+5V,因为该器件的输出具有1TrL三态锁存缓冲器结构,所以可以直接连人单片微控制器的I/O口。相关的接口连接如图2所示。

需要说明的是,在本系统6路电源信号中只有一路负电源信号符合ADC0809 0V~5v的输入特性,因此必须配备相应的反相电路,则通过LM358型运算放大器来完成。利用LM358还可以扩展监测范围(以降低测量精度为前提),这对于精度要求不太高的场合是可行的。图2中PC817型光耦用于检测负电压信号,当IN4为低电平信号时对应负电压信号,此时在MSl2232B的相应行位置给出“-”号标志,这不仅解决了正负电压同行显示的兼容性问题,而且减少了软件设计量(由6路简化为3路),同时使系统实时性相应提升。

2.4温度传感器模块

DSl8820是Dallas公司推出的l—Wire式数字温度传感器,它能实时采集现场环境的温度数据,并将相应的值转换为数字量输出。该温度传感器与AT89S52的连接如图3所示。

2.5语音报警模块

该模块主要实现异常情况下告警信息的输出,只要配电箱电压信号的波动值超出一定的范围,音频告警装置即给出不同的频率信号使蜂鸣器发声,以提示相关操作人员注意。

3 系统软件设计

按RTOS系统的程序结构要求,软件工程主要由如下4部分组成:初始化、数据采集与A/D转换、显示子程序、温度监测与告警模块。

如果将初始化设置为任务0,那么除了要完成相应的硬件配置与变量赋初值外,还必须启动所有其他任务,另外,因为初始化过程只须进行一次,所以Task 0还应当删除其自身。具体的程序代码如下所示:

void Init(void)_task_Intial

{

variable=0;

LcdInitialO;

ClrScreenO;

0s_create_task(AI)C0809I)ata);

os_create_task(DSl8820Temperate);

0s_create_task(LCMI)isplay);

0s_delete_task(Intial);

}

其中相关的宏定义变量值为:

#define Intial O

#define ADC0809Data 1

#define DSl 8820Temperate 2

#define LCMDisplay 3

在Keil集成开发环境下调试本程序时,除了要包括相应的头文件(rtx51tny.h)外,还必须设置好相应的环境参数值。

3.1数模转换子程序

数据采集与A/I)转换子程序主要对配电箱传来的模拟信号进行采样、量化及返回值处理。软件编程时的电气时序及相关技术要求如图4所示。

??? 在时序图中,上升沿清空量化结果寄存器内的值,下降沿启动,A/D转换;采样启动脉冲的高电平状态至少应维持100μs;EOC变为低电平表示转换过程正在进行,且启动信号的硬件迟滞效应时间至少应为10μs;MSB对应AT89S52并口的:P0.7,LSB对应P0.0。

关键部分的程序源代码及注释如下:

unsigned int AI)C0809(void)

{

unsigned int wait=3;

ChannelChooseA=1;

ChannelChooseB=0;

ChannelChooseC=0;

ADStartPulse=0;

ADStartPulse=1;//产生A/D转换的启动脉冲

(上升沿部分)

delay();//保证启动脉冲的高电平宽度

至少大于100μs

ADStartPulse=0;//产生A/D转换的启动脉冲

(下降沿部分)

wait--;

wait--; //指令延时以保证达到:EOC

变为低电平所需的硬件迟滞要求。

‘whilefADConvertEOC==0):

return(Result);/将A/[)转换后的量化值返

回到主函数中。

}

3.2液晶显示模块

MSl2232B型图形点阵液晶显示(LCM)模块左右分为Master和Slave控制器,上下共分4页,左边列地址为0-61,右边列地址为0-61,对该器件的操作关键是按时序图正确配置好主、辅控制器的工作状态。利用AT89S52访问LCM时有二种常用的方法,即存储器映射寄存器寻址和模拟接口时序,本系统采用后一种方法。主要函数模块源代码分析:

void MasterWriteD(unsigned char Ramdata)

//向Master控制器写数据

{

ReadOrWrite=0;

InstructionOrData=1;

MasterEl=1;

P0=Ramdata;

MasterEl:0;

}

void MasterWriteI(unsigned char Ramdata)

//向Master控制器写指令

{

ReadOrWrite=0;

InstructionOrData=0;

MasterEl=1;

P0=Ramdata;

MasterE1=O;

}

void ReadState(void) //检测主、辅控制器工作状态

{

ReadOrWrite=1;

InstructionOrData=0;

MasterEl=1:

SlaveE2=1;

PO=0xff;

while(BusStateBusy==1);

}

void SetPage(unsigned char page0,unsigned char pagel)

{

MasterWriteI(0xb8 | pagel);

SlaveWriteI(0xb8 | page0);

}

void SetColumn(unsigned char address0,unsigned char addressl)

{

MasterWriteI(0x3f & addressl);

SlaveWfiteI(0x3f & address0);

}

//在主控制器操作的左边LCM屏上显示一列信息(由8个像素点构成)

void MasterPutChar(unsigned char masterchar)

{

ReadState();

MasterWriteD(masterchar);

}

一般说来。AT89S52的RAM存储空间是有限的,而图形或字符的点阵代码(可以下载相关的应用插件,由.bmp文件或字符自动生成)如果太大,放置到RAM区会出现内存不足的告警提示,为此可按如下方式处理:

unsigned char code Dotn[]=lOxOO,Ox00,0x30,

0x00,0x30,Ox00,Ox00,0x00};

即将点阵代码通过code关键字限定后放于ROM区域内。

??? 3.3 DSl8820的1-Wire子程序

DSl8820的突出优点是将现场采集的环境温度直接以数字形式输出,这样可以省去后续的信号放大及模/数转换部分,构建外围电路的元件少且相对简单,系统成本低廉;1-Wire接口与AT89S52通信,其结构便于多点测量且易于扩展;测温范围宽(-550℃~1250℃)且精度高。

对l-Wire的操作关键是软件时序的处理,对于不同的晶体振荡器其延时参数是不同的,本系统以12MHz为例给出如下主要程序代码:

bit DallassReset(void)

{

unsigned char presence=0;

DallassDataout=1; //发出复位脉冲前先释

放总线

delay(10);

DallassDataout=0;

delay(240);//保证延时在4801μs~9601μs之间

DaUassDataout=1;

delay(35);

Dresence=DallassDataout;

delay(60);

return(presence);

}

//写时序从主控制器把总线拉低时开始

void writeCommand(unsigned char command)

{

unsigned char count;

for(count=O;count<8;count++)

{

DallassDataout=0;

if(command&0x01==1)

{

DallassDataout=1;

//写“1”时序在将总线拉低后,AT89S52主控制器必须在15μs内释放总线,所以此语句之前不能有较长时间的延时语句

}

delay(35);//无论写“1”还是写“0”时序都必须有至少601as的低电平 DallassDataout=1;//总线恢复的过程

command=command>>1;

}

}

//读时序从主控制器将总线拉低至少1μs后释放总线的时刻开始

unsigned char readdata(void)

{

unsigned char value;

unsigned char midtemp=0;

for(value=0;value<8;Value++)

{

I DallassDataout=0;

midtemp=midtemp>>1;

-nop_O;

_nop_O;

DallassDataout=1;

//读时序时,控制器必须在15μs内释放总线,然后采样总线状态,所以此语句之前不能延时太长的时间的延时语句

if(DallassDataout==1)

{

midtemp=midtemp | 0x80;

//因为midtemp初始被赋值为0,所以如果采样总线状态为0则不必处理,0会自动被返回

}

delay(35);

//延时70μs完成此次Bit

位读时序过程,为下一次读作准备

}

return(midtemp);

}

void delay(unsigned char out)

{

unsigned char in;

for(in=out;in>O;in--);

}

4 ISP的结构原理

将ISP功能集成到成型的PCB上就可以实现程序的实时更新与升级操作,其结构原理如图5所示,这对于复杂工程系统设计显然是很方便的,也是切实可行的。

5 结论

随着智能仪器仪表技术的发展,显示模块的液晶化已成为一种较为流行的趋势。本文给出的软硬件设计方案已在某武器系统的调试过程中得到正确、可靠、稳定的运行。它不仅克NT模似仪表体积大、故障率高的缺陷,而且由于运用了RTOS技术,使数据检测的敏捷度得到大幅提升。另外,ISP功能的在线集成也为系统功能的扩充预留了空间。

关键字:循环  实时  调试  编程 引用地址:基于RlTOS和ISP功能的数字仪表系统设计与实现

上一篇:基于单片机的车载超级电容测试系统设计
下一篇:热电偶传感器测温系统的设计应用

推荐阅读最新更新时间:2024-05-13 18:17

plc顺控循环执行的流程 PLC中断功能介绍
plc这样理解中断功能,在理解中断时,首先要清楚plc的运算周期或者说是扫描周期,有必要说下plc顺控循环执行的流程,这是理解中断的前提,必须要掌握,分为三部分,输入处理、程序处理、输出处理、 1、输入处理,可编程控制器在执行程序前,将可编程控制器的所有输入端子的ON/OFF状态读入输入映像区,程序执行过程中即使输入发生变化,输入映像区的内容也不会变化,在执行下一个循环的输入处理时读取该变化。 2、程序处理、plc根据程序内存中的指令内容,从输入映像区和其他软元件的映像区中读出各软元件的ON/OFF状态,然后从0步依次开始运算,并将每次得出的结果写入到映像区中。因此,各软元件的映像区随着程序的执行逐步改变其内容,此外,输出
[嵌入式]
plc顺控<font color='red'>循环</font>执行的流程 PLC中断功能介绍
PIC16F877定时器0的查询方式调试
PIC16F877单片机定时器0的查询方式调试程序如下: #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); void init(void); uint intnum; void main(void) { init(); while(1) { if(T0IF) { T0IF = 0; if(++intnum =1953) { intnum = 0; RD0 = !RD0; } } } } void init(void) { TRISD =
[单片机]
在FL2440上使用kei MDK 调试程序(J-link)
一 新建一个工程 单击Project - New µVision Project...菜单项 二 选择CPU 这里我们选择三星的2440A 点击OK后会提示你是否添加CPU启动代码这里点否。就可以了。 三 添加文件 这里我们以FL关盘自带的LED实验代码为例;直接把飞凌的led文件下的实验代码 复制到刚才建立工程的那个文件夹下就可以了。接着在keil下点击file-open,打开刚才的那两个文件。 四 编译设置 1.首先是target选项卡 2.接着是User D:Program FilesKeilARMBIN40fromelf.exe --bin -o @p.bin @p.axf
[单片机]
在FL2440上使用kei MDK <font color='red'>调试</font>程序(J-link)
QuickLogic推出ArcticLink 3 S2 LP可编程Sensor hub
运作时的功耗仅75微瓦-延长消费类电子设备的电池寿命 硅半导体平台支持迅速扩展的巨大SenseMe算法库 美国加利福尼亚州桑尼维尔,2015年4月9日── QuickLogic公司(纳斯达克股票代码:QUIK)是从事超低功耗可编程Sensor hub创新的公司,今天宣布该公司的超低功耗可编程Sensor hub增加新产品-ArcticLink 3 S2 LP。这个新平台在工作时的功耗仅仅75微瓦(在1.1 V时消耗电流68微安),是目前市场上功耗最低的可编程sensor hub。与QuickLogic的广泛SenseMe 算法库和参考设计一起,设计人员可以用ArcticLink 3 S2 LP增加更多的特性
[手机便携]
QuickLogic推出ArcticLink 3 S2 LP可<font color='red'>编程</font>Sensor hub
C51---10 DS1302实时时钟
DS1302介绍✨ DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能 RTC(Real Time Clock): 实时时钟,是一种集成电路,通常称为时钟芯片 引脚定义和应用电路 内部结构框图 寄存器定义 时序定义 BCD码 DS1302时钟
[单片机]
C51---10 DS1302<font color='red'>实时</font>时钟
飞思卡尔16位单片机(二)开发环境搭建及新建、调试工程
一、安装CodeWarrior 飞思卡尔16位单片机的开发环境为CodeWarrior5.1,这个软件安装比较简单,软件的安装文件可以从相应的网站上下载。安装CodeWarrior所需要的电脑的硬件资源也比较宽泛,目前一般的电脑都可以满足这个要求,可以支持win10、win7等操作系统。安装过程按照按照软件的提示一步步操作即可。 二、安装USBDM驱动 USBDM是飞思卡尔16位单片机的少些代码及调试程序的工具。飞思卡尔16位单片机可以支持多种调试工具,典型的有官方的调试器和开源的USBDM调试器,由于开源的调试器版本比较多,不同版本驱动的安装方法也不相同,所以USBDM驱动的安装需要参考厂家的使用说明进行。安装
[单片机]
飞思卡尔16位单片机(二)开发环境搭建及新建、<font color='red'>调试</font>工程
采用Keil4为ARM7 (LPC2103)创建工程 及J-link调试
采用Keil4为ARM7创建工程,采用J-LINK调试,具体步骤如下: 在菜单里的Project里选择New uVision project...,选择正确的路径并命名保存; 在弹出来的对话框中选择CPU,NXP(founded by philips)- LPC2103; 在弹出的对话框按“yes”复制LPC2100启动文件到工程; 在Project里面选择Option for Target'Target 1'...,Target里面的IROM1要配置正确(0x0 0x8000),一般采用默认值就可以了;Output选择里面的Name of Executable的命名不能用点号;Debug里面的选择
[单片机]
泛华恒兴推出基于PXI总线的双通道可编程电阻卡
近日,北京泛华恒兴科技有限公司(简称:泛华恒兴)推出了一个款基于PXI总线的双通道可编程电阻卡—PS PXI-3110。 PS PXI-3110通过软件选取最优的校准数据、补偿电路对输出的电阻进行补偿,为用户提供高精度的电阻输出。PS PXI-3110选用精密低温漂电阻,并通过低功耗控制将功耗降低了1/3,在减少板卡热量的同时,降低了因温度变化或其他环境因素改变导致阻值改变的非线性误差。PS PXI-3110支持自动/手动两种配置模式。 “PS PXI-3110前端具备一个15V的过压保护电路,当输入电压超过15V时,电阻卡会自动将通道电阻设置为最大电阻输出,电阻卡具有输入过压检测功能,防止电压过高导致板卡损坏。”泛华恒兴硬件
[电源管理]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved