Hi,
I am using tmote sky and trying to measure pressure using a pressure sensor. I 
am reading the V+ and V- from sensor using two adc channels. The problem is 
that if I do subtraction in the program I am getting different values that is 
in one case I am receiving two values of both channels and then I am doing 
subtraction in Matlab while in the other case I am subtracting the two channels 
in the code and receiving only the difference.The difference in values is 4-5 
units like
1590.0 8.0
1591.0 8.0
1592.0 8.0
1593.0 11.0
1594.0 8.0
1595.0 9.0
1596.0 8.0
1597.0 8.0
Two channel case:
Ch1                                                       
4680.0 3951.0                                   
4681.0 3950.0
4682.0 3951.0
4683.0 3952.0
4684.0 3950.0
4685.0 3953.0
Ch2:
4680.0 3939.0
4681.0 3939.0
4682.0 3938.0
4683.0 3940.0
4684.0 3941.0
4685.0 3939.0
Differnce:
11
10
12
11
9
14
-------------
I am not able to find what is the problem.
I am sampling in using case statement like:
module OscilloscopeTmoteSkyM
{
  provides interface StdControl;
  uses {
    interface Timer;
    interface Leds;
    
    interface SplitControl as HumidityControl;

    interface ADC as Humidity;
    //interface ADC as Temperature;
    interface ADC as TSR;
    interface ADC as PAR;
    interface ADC as InternalTemperature;
    //interface ADC as InternalVoltage;
    interface ADC as Pressure;
    interface ADC as Pressure2;

    interface ADCControl;


    interface Oscope as OHumidity;
    //interface Oscope as OTemperature;
    interface Oscope as OTSR;
    interface Oscope as OPAR;
    interface Oscope as OInternalTemperature;
    interface Oscope as OPressure;
    interface Oscope as OPressure2;

    interface ADCError as HumidityError;
    interface ADCError as TemperatureError;
  }
}
implementation
{

  enum {
    OSCOPE_DELAY = 1,
  };

  enum {
    HUMIDITY,
    TEMPERATURE,
    TSRSENSOR,
    PARSENSOR,
    ITEMP,
    IVOLT
  };

  norace uint16_t humidity, temperature, tsr, par, itemp, ivolt;
  norace int state;

  /**
   * Used to initialize this component.
   */
  command result_t StdControl.init() {
    call Leds.init();
    call Leds.set(0);
    state = HUMIDITY;
    call ADCControl.init();
    call ADCControl.bindPort( TOS_ADC_prs_PORT, TOSH_ACTUAL_ADC_prs_PORT );
    call ADCControl.init();
    call ADCControl.bindPort( TOS_ADC_prs2_PORT, TOSH_ACTUAL_ADC_prs2_PORT );


    //turn on the sensors so that they can be read.
    call HumidityControl.init();

    return SUCCESS;
  }

  event result_t HumidityControl.initDone() {
    return SUCCESS;
  }

  /**
   * Starts the SensorControl component.
   * @return Always returns SUCCESS.
   */
  command result_t StdControl.start() {
    call HumidityControl.start();
    return SUCCESS;
  }

  event result_t HumidityControl.startDone() {
    call HumidityError.enable();
    call TemperatureError.enable();
    call Timer.start( TIMER_ONE_SHOT, 250 );
    return SUCCESS;
  }

  /**
   * Stops the SensorControl component.
   * @return Always returns SUCCESS.
   */
  command result_t StdControl.stop() {
    call HumidityControl.stop();
    call Timer.stop();
    return SUCCESS;
  }

  event result_t HumidityControl.stopDone() {
    call HumidityError.disable();
    call TemperatureError.disable();
    return SUCCESS;
  }

  event result_t Timer.fired() {
    // set a timeout in case a task post fails (rare)
    call Timer.start(TIMER_ONE_SHOT, 100);
    switch(state) {
    case HUMIDITY:
      call Humidity.getData();
      break;
    case TEMPERATURE:
      call Pressure2.getData();
      break;
    case TSRSENSOR:
      call TSR.getData();
      break;
    case PARSENSOR:
      call PAR.getData();
      break;
    case ITEMP:
      call InternalTemperature.getData();
      break;
    case IVOLT:
      call Pressure.getData();
      break;
    default:
      call Timer.start(TIMER_ONE_SHOT, 10);
    }      
    return SUCCESS;
  }

  task void putHumidity() {
    call OHumidity.put(humidity);
    call Leds.yellowOn();
    call Timer.start(TIMER_ONE_SHOT, OSCOPE_DELAY);
  }
  task void putTemperature() {
    if(temperature>=ivolt)
    {call OPressure2.put(temperature-ivolt);}
    if(temperature<ivolt)
    {call OPressure2.put(ivolt-temperature);}

    
    call Leds.greenOn();
    call Timer.start(TIMER_ONE_SHOT, OSCOPE_DELAY);
  }
  task void putTSR() {
    call OTSR.put(tsr);
    call Timer.start(TIMER_ONE_SHOT, OSCOPE_DELAY);
  }
  task void putPAR() {
    call OPAR.put(par);
    call Leds.redOn();
    call Timer.start(TIMER_ONE_SHOT, OSCOPE_DELAY);
  }
  task void putIntTemp() {
    call OInternalTemperature.put(itemp);
    call Timer.start(TIMER_ONE_SHOT, OSCOPE_DELAY);
  }
  task void putIntVoltage() {
    call OPressure.put(ivolt);
    call Leds.set(0);
    call Timer.start(TIMER_ONE_SHOT, OSCOPE_DELAY);
  }

  async event result_t Humidity.dataReady(uint16_t data) {
    humidity = data;
    post putHumidity();
    state = TEMPERATURE;
    return SUCCESS;
  }

  event result_t HumidityError.error(uint8_t token) {
    humidity = 0;
    post putHumidity();
    state = TEMPERATURE;
    return SUCCESS;
  }

  async event result_t Pressure2.dataReady(uint16_t data) {
    temperature = data;
    post putTemperature();
    state = TSRSENSOR;
    return SUCCESS;
  }

  event result_t TemperatureError.error(uint8_t token) {
    temperature = 0;
    post putTemperature();
    state = TSRSENSOR;
    return SUCCESS;
  }

  async event result_t TSR.dataReady(uint16_t data) {
    tsr = data;
    post putTSR();
    state = PARSENSOR;
    return SUCCESS;
  }

  async event result_t PAR.dataReady(uint16_t data) {
    par = data;
    post putPAR();
    state = ITEMP;
    return SUCCESS;
  }

  async event result_t InternalTemperature.dataReady(uint16_t data) {
    itemp = data;
    post putIntTemp();
    state = IVOLT;
    return SUCCESS;
  }

  async event result_t Pressure.dataReady(uint16_t data) {
    ivolt = data;
    post putIntVoltage();
    state = HUMIDITY;
    return SUCCESS;
  }
}

If someone can tell me the problem it will be very helpful.
Thank you
Manu Suryavansh
University of Florida


 
---------------------------------
Never miss an email again!
Yahoo! Toolbar alerts you the instant new Mail arrives. Check it out.
_______________________________________________
Tinyos-help mailing list
Tinyos-help@Millennium.Berkeley.EDU
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to