利用MAXQ3210进行环境监视
发布时间:2008/5/28 0:00:00 访问次数:460
maxq3210的特性及其监视功能
maxq3210包含2kb eeprom程序存储器、128字节eeprom数据存储器、64字节ram存储器。其内置的9v稳压器简化了电池供电电路。它也为其他电路元件输出5v电源。在调试方面,它用内置的jtag调试引擎取代了昂贵的外部仿真器。maxq3210集成了用于环境监视的外围部件。当环境条件不安全和发生变化时,它能够通过压电喇叭驱动器和大电流led驱动器等外围部件进行告警。这些外围部件在简单的保安系统、烟雾警报器、温度监视器和运动检测器等应用中很实用。
此外,maxq3210为环境监视电路提供了多种接口选项。其内部的电压比较器可以监视外部电路输出的随外部环境变化的电压值。其外部电路可以很简单,比如测量温度的热敏电阻;也可以较复杂,比如测量电容充电时间的斜率式模数转换器(adc)。
除了电压比较器外,maxq3210也可以通过数字i/o口监视外部电路。例如,当环境条件超出范围时,外部监视电路可以通过中断引脚向maxq3210发送中断请求信号。maxq3210也可以使用串行通信协议,通过数字i/o口与测量距离和照明情况的外部ic电路进行数据传输。
监视系统的软件架构
通常,为maxq3210编写的应用程序都很简短,足以用maxq汇编语言编写。下面列举的应用程序用max-ide工具包编写。max-ide是一个由dallas semiconductor免费提供的开发环境,为maxq系列微控制器提供了一个汇编和调试环境。图1示出了一个环境监视应用的基本架构。
图1. maxq3210的环境监视主程序循环在大部分时间内处于休眠状态,定期唤醒后去读取并分析传感器输出。
启动后,微控制器首先要经过一个初始化过程,将相关寄存器和配置位按照应用要求进行设置。如果微控制器初次加电,可能还需要一些额外的操作,例如制造商设定的一些测试和配置。经过初始化和加电检测后,应用程序进入主循环体,开始测量和响应外部环境的变化。首先,应用程序通过电压比较器或数字i/o口读取环境信息,并分析环境条件是否超出范围。接下来,进行系统诊断,如检测外部电路、测量电池电压、核实存储在数据eeprom中的永久性故障信息等等。随后,应用程序检查状态信息,其中包括告警(如低电池)和提示信息(如温度过高)。如果环境情况要求执行一些动作,有以下一些选项我们将在下面讨论:驱动喇叭发声,使led闪烁,通过i/o引脚和其他设备通信,或者简单地把告警信息存入数据eeprom以便后续分析。
简单的监视应用软件
可以下载为开发环境监视系统而编写的简单应用程序。该程序是在maxq3210评估工具上编写和测试的。一个按钮被用来切换告警和正常状态。喇叭发声表示告警。该环境监视应用的主循环体在下面几段中给出。用于环境监视的状态机非常简单:获取传感器输出并分析它是否超出了某种门限(温度太高,空气中烟雾浓度太大等)。如果超出边界,则发出告警。
mainloop: move dp[0], #condition_flag ; see if we are alarming move acc, @dp[0] ; read the alarm flag jump z, mainloop_nosignal ; skip next code if not alarming ; ; if our condition is above threshold, see if it is ; time to sound the horn ; call checksignaltime ; see if it is time to sound the horn jump nz, readandsleep ; back to sleep if no signal call signalcondition ; sound horn, light leds, etc. jump readandsleep ; let's go to sleep now ; ; in a real sensor, we still want to take readings even if we are ; signaling. we need to check to see if environmental conditions ; have returned to normal. ; mainloop_nosignal: call checkforselftest ; time to run periodic diagnostics? jump z, readandsleep ; skip if not time yet call selftest ; perform self diagnostics readandsleep: call readsensor ; get a 'sensor reading' call analyzesensor ; see if condition out of threshol
maxq3210的特性及其监视功能
maxq3210包含2kb eeprom程序存储器、128字节eeprom数据存储器、64字节ram存储器。其内置的9v稳压器简化了电池供电电路。它也为其他电路元件输出5v电源。在调试方面,它用内置的jtag调试引擎取代了昂贵的外部仿真器。maxq3210集成了用于环境监视的外围部件。当环境条件不安全和发生变化时,它能够通过压电喇叭驱动器和大电流led驱动器等外围部件进行告警。这些外围部件在简单的保安系统、烟雾警报器、温度监视器和运动检测器等应用中很实用。
此外,maxq3210为环境监视电路提供了多种接口选项。其内部的电压比较器可以监视外部电路输出的随外部环境变化的电压值。其外部电路可以很简单,比如测量温度的热敏电阻;也可以较复杂,比如测量电容充电时间的斜率式模数转换器(adc)。
除了电压比较器外,maxq3210也可以通过数字i/o口监视外部电路。例如,当环境条件超出范围时,外部监视电路可以通过中断引脚向maxq3210发送中断请求信号。maxq3210也可以使用串行通信协议,通过数字i/o口与测量距离和照明情况的外部ic电路进行数据传输。
监视系统的软件架构
通常,为maxq3210编写的应用程序都很简短,足以用maxq汇编语言编写。下面列举的应用程序用max-ide工具包编写。max-ide是一个由dallas semiconductor免费提供的开发环境,为maxq系列微控制器提供了一个汇编和调试环境。图1示出了一个环境监视应用的基本架构。
图1. maxq3210的环境监视主程序循环在大部分时间内处于休眠状态,定期唤醒后去读取并分析传感器输出。
启动后,微控制器首先要经过一个初始化过程,将相关寄存器和配置位按照应用要求进行设置。如果微控制器初次加电,可能还需要一些额外的操作,例如制造商设定的一些测试和配置。经过初始化和加电检测后,应用程序进入主循环体,开始测量和响应外部环境的变化。首先,应用程序通过电压比较器或数字i/o口读取环境信息,并分析环境条件是否超出范围。接下来,进行系统诊断,如检测外部电路、测量电池电压、核实存储在数据eeprom中的永久性故障信息等等。随后,应用程序检查状态信息,其中包括告警(如低电池)和提示信息(如温度过高)。如果环境情况要求执行一些动作,有以下一些选项我们将在下面讨论:驱动喇叭发声,使led闪烁,通过i/o引脚和其他设备通信,或者简单地把告警信息存入数据eeprom以便后续分析。
简单的监视应用软件
可以下载为开发环境监视系统而编写的简单应用程序。该程序是在maxq3210评估工具上编写和测试的。一个按钮被用来切换告警和正常状态。喇叭发声表示告警。该环境监视应用的主循环体在下面几段中给出。用于环境监视的状态机非常简单:获取传感器输出并分析它是否超出了某种门限(温度太高,空气中烟雾浓度太大等)。如果超出边界,则发出告警。
mainloop: move dp[0], #condition_flag ; see if we are alarming move acc, @dp[0] ; read the alarm flag jump z, mainloop_nosignal ; skip next code if not alarming ; ; if our condition is above threshold, see if it is ; time to sound the horn ; call checksignaltime ; see if it is time to sound the horn jump nz, readandsleep ; back to sleep if no signal call signalcondition ; sound horn, light leds, etc. jump readandsleep ; let's go to sleep now ; ; in a real sensor, we still want to take readings even if we are ; signaling. we need to check to see if environmental conditions ; have returned to normal. ; mainloop_nosignal: call checkforselftest ; time to run periodic diagnostics? jump z, readandsleep ; skip if not time yet call selftest ; perform self diagnostics readandsleep: call readsensor ; get a 'sensor reading' call analyzesensor ; see if condition out of threshol