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