实验 CC2530平台上ADC组件的TinyOS编程

实验目的:

  1. 加深和巩固学生对于TinyOS编程方法的理解和掌握
  2. 让学生初步掌握传感器的ADC组件应用方法
  3. 学生通过本实验能够初步的了解和掌握CC2530平台上传感器的连接方法,及TinyOS编程方法
  4. 高学生的上机和编程过程中处理具体问题的能力

实验要求:

  1. 实验要求自己独立的完成
  2. 编写和调试过程中出现的问题记录,并事后总结到报告中
  3. 实验程序调试完成后, 用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩
  4. 实验完成后,要上交实验报告

实验内容:

  1. 开发一个新的应用,每秒钟获取一次传感数据。以下述顺序完成这个新应用的开发。
    1. 首先使得应用能够以1秒为周期获取电压及芯片内部温度;
    2. 然后在上述基础上通过光敏传感器获取光照强度值。
  2. 在实验报告中分别给出上述两个阶段的源码

实验代码:

(1)配置文件TestAdcC.nc

configuration TestAdcC

{

}

implementation

{

components TestAdcM as App;

components MainC ;

App.Boot -> MainC.Boot;

 

components PlatformLcdC;

App.Lcd->PlatformLcdC.PlatformLcd;

App.LcdInit->PlatformLcdC.Init;

 

components new TimerMilliC() as Timer1;

App.Timer1 -> Timer1;

 

components new AdcC() as Ad;

App.AdControl->Ad;

App.AdRead->Ad;

 

}

 

(2)模块文件TestAdcM.nc

#include "ADC.H"

module TestAdcM

{

uses interface Boot;

uses interface PlatformLcd as Lcd;

uses interface Init as LcdInit;

uses interface AdcControl as AdControl;

uses interface Read<int16_t> as AdRead;

uses interface Timer<TMilli> as Timer1;

}

implementation

{

 

#define VDD 33

   uint16_t m_val;

  

task void CalcVolt()

{

 unsigned char s[16];

 m_val = ((float)m_val / (float)0x1FFF) *VDD;

 sprintf(s, (char*)"%d.%d V",  m_val/10, m_val%10);

 call Lcd.PutString(60,20,s);

}

 

 

event void Boot.booted()

{

call LcdInit.init();

call Lcd.ClrScreen();

       call Lcd.FontSet_cn(1,1);

       call Lcd.PutString_cn(0,20,"电压为 ");

call AdControl.enable(ADC_REF_AVDD,ADC_12_BIT,ADC_AIN7);

call Timer1.startPeriodic(1024);

     call Lcd.FontSet(1,1);

}

event void AdRead.readDone(error_t result, int16_t val)

{

m_val=val;

post CalcVolt();

}

event void Timer1.fired()

{

call AdRead.read();

}

}

 

3makefile 编译文件

COMPONENT=TestAdcC

include $(MAKERULES)

实验环境:

  1. 上位机操作系统为WindowsXP,在Cygwin环境下编译
  2. 集成开发环境为Notepad++

 

实验报告人:木舟 报告时间2018.11.16