ref2_5v: REFVOLT_LEVEL_1_5,
adc12ssel: SHT_SOURCE_ACLK,
adc12p: SHT_CLOCK_DIV_1,
sht: SAMPLE_HOLD_4_CYCLES,
sampcon_ssel: SAMPCON_SOURCE_SMCLK,
sampcon_id: SAMPCON_CLOCK_DIV_1
};
其中,TEMPERATURE_DIDOE_CHANNEL等于10,因为内置温度传感器所接的A/D的输入通道默认为通道10,REFERENCE_VREFpllus_Avss表示所采用的基准电压为内部基准电压,REFVOLT_LEVEL_1_5表示基准电压设置为1.5V,adc12ssel: SHT_SOURCE_ACLK 表示ADC12进行A/D转换的时钟基准是由ACLK提供的,SAMPCON_SOURCE_SMCLK表示TimerA的时钟基准(即控制采样的时钟基准)是由SMCLK提供的,在采样时,常常利用TimerA设置采样周期,如此一来就涉及到采样时钟定时器的工作频率,必须事先设置和好定时器的工作频率,定时器才能够正常工作。SAMPCON_CLOCK_DIV_1表示采样直接用的就是SMCLK,而没有经过分频。
除了传感器本身采集参数的配置,由于TinyOS的硬件都是抽象为组件实现的,因此传感器要实现将其输出电压送入单片机的采集通道中,传感器也必须要实现为组件,并且必须提供接口,才能和其他组件连接,供其他组件使用,传感器的组件连接图在图5-2中给出。
图5-2 传感器组件连接图
必须按照上述组件连接图将传感器组件的接口配置好,传感器与节点才能正常连接工作。配置好以后,便可以开始采样了,下位机的采样和无线传输的硬件抽象见图5-3所示:
图5-3 温度采集的硬件抽象图
各个组件之间通过接口连接起来,TimerMilliC可以设置定时器,即无线传送的周期,LedsC组件用于显示是否正常在发送和接收中,DemoSensorC定义了采集通道,AMSenderC、AMReceiverC及ActiveMessageC组件用于无线传送的实现。
当定时器时间到,触发Read.read()函数,将数据放入数据包中,连续采样十次后,触发AMSend.send()函数,数据就可以发送出去了,同时验证受到的是否为发出的数据,如果数据包长度一致,则认为其接受到的为正确的数据包,返回发送成功的标志SUCCESS,整个发送流程就结束了,其中发送过程的流程图见图5-4。
图5-4 发送过程流程图
接受采用的是TinyOS中自带的BaseStation程序,它的功能是接受节点发送到基站的数据,将其存储,并且发送到基站的串口上,用于与PC通信。其组件抽象如图5-5所示:
图5-5 BaseStation 组件抽象
与串口相关的组件是SerialActiveMessageC组件,在该组件中,实现了数据发送至串口,并保存在缓冲区。
5.1.4 温度测试上位机程序设计
由于并不确定数据桢的总的字节数,因此先设计一个简单的程序,观察其输出,得出其数据包的结构,并与事先定义的数据包比较,得到串口输出数据包的格式。前面板输出原始数组如图5-16所示:
图5-16 串口的原始数据
事先定义的数据包存放在apps/Oscilloscope/Oscilloscope.h中,具体定义如下所示:
enum {
BUFFER_SIZE=10
};
struct OscopeMsg
{
uint16_t sourceMoteID;
uint16_t lastSampleNumber;
uint16_t channel;
uint16_t data[BUFFER_SIZE];
};
根据定义得到串口数据包如表5-1所示:
表5-1
串口地址 链路层地址 AM数据包标志 广播地址 节点号 数据长度 网络组号 传送的数据包 CRC校验码 结束标志 LabVIEW传感网动态信号监控软件开发+文献综述(9):http://www.751com.cn/tongxin/lunwen_3658.html