RE: [Tinyos-help] how to get 3 ADC Port value from Tmote sky
Chen Bleed
bleed1979 at hotmail.com
Sat Sep 15 08:01:12 PDT 2007
It seems OK except "// get data from X channel and fire off Y channel conversion".
I found no method to fire off.
I use tmote sky
OS: tinyos 1.1.15
> Date: Thu, 13 Sep 2007 11:14:00 -0600> From: schip at santafe.edu> To: bleed1979 at hotmail.com> CC: tinyos-help at Millennium.Berkeley.EDU> Subject: Re: [Tinyos-help] how to get 3 ADC Port value from Tmote sky> > I think what you need to do is have separate names for each ADC 'channel'> and call their getData()'s in sequence, something like this:> > in the Config file:> > ProjectOtherM.ADCx -> ADCC.ADC[TOS_ADC_SENSORX_PORT];> ProjectOtherM.ADCy -> ADCC.ADC[TOS_ADC_SENSORY_PORT];> ProjectOtherM.ADCz -> ADCC.ADC[TOS_ADC_SENSORZ_PORT];> > (I'm not sure about your ASSOCIATE_ADC_CHANNEL() stuff, on micaX's> under T1 I simply use the channel number. Is this perhaps T2, or> else I'm still unfamiliar with Tmote specifics...?)> > in the code:> > after startup or in your timer.fired():> > call ADCx.getData();> > Then chain the gets in the individual Ready() methods:> > // get data from X channel and fire off Y channel conversion> async event result_t ADCx.dataReady( uint16_t data )> {> ...> call ADCy.getData();> return SUCCESS;> }> > > MS> > Chen Bleed wrote:> > I want to get three value from tmote sky.I use 3-axis accelerator > > sensor, and I need the X, Y, Z Output.> > I'm unable to get three values at one time, so i try to get one value > > at one time, then get three times to be a cycle.> > (If anyone get some solutione like get three values at one time, please > > tell my how to do.)> > This program seems to get only one value.Please help me to solve this > > problem.> > > > ***************** IntMsg.h *****************> > typedef struct IntMsg {> > uint16_t val;> > //uint16_t src;> > uint16_t testval;> > //uint16_t testval2;> > //uint16_t testval3;> > } IntMsg;> > > > enum {> > AM_INTMSG = 153> > };> > > > > > ***************** SensorX.h *****************> > enum> > {> > TOS_ADC_SENSORX_PORT = unique("ADCPort"),> > > > TOSH_ACTUAL_ADC_SENSORX_PORT = ASSOCIATE_ADC_CHANNEL(> > /* INPUT_CHANNEL_A3,*/> > INPUT_CHANNEL_A2,> > REFERENCE_VREFplus_AVss,> > REFVOLT_LEVEL_1_5> > ),> > };> > > > > > ***************** SensorY.h *****************> > enum> > {> > TOS_ADC_SENSORY_PORT = unique("ADCPort"),> > > > TOSH_ACTUAL_ADC_SENSORY_PORT = ASSOCIATE_ADC_CHANNEL(> > /* INPUT_CHANNEL_A1, */> > INPUT_CHANNEL_A0,> > REFERENCE_VREFplus_AVss,> > REFVOLT_LEVEL_1_5> > ),> > };> > > > > > ***************** SensorZ.h *****************> > enum> > {> > TOS_ADC_SENSORZ_PORT = unique("ADCPort"),> > > > TOSH_ACTUAL_ADC_SENSORZ_PORT = ASSOCIATE_ADC_CHANNEL(> > /* INPUT_CHANNEL_A2,*/> > INPUT_CHANNEL_A1,> > REFERENCE_VREFplus_AVss,> > REFVOLT_LEVEL_1_5> > ),> > };> > > > ***************** ProjectOther.nc *****************> > includes IntMsg;> > includes SensorX;> > includes SensorY;> > includes SensorZ;> > > > configuration ProjectOther {> > > > }> > > > implementation> > {> > components Main, ProjectOtherM, TimerC, LedsC, ADCC, GenericComm as Comm;> > > > Main.StdControl -> ProjectOtherM.StdControl;> > ProjectOtherM.Timer -> TimerC.Timer[unique("Timer")];> > Main.StdControl -> TimerC.StdControl;> > ProjectOtherM.Leds -> LedsC.Leds;> > ProjectOtherM.SendMsg -> Comm.SendMsg[AM_INTMSG];> > ProjectOtherM.SubControl -> Comm.Control;> > ProjectOtherM.ADC -> ADCC.ADC[TOS_ADC_SENSORX_PORT];> > ProjectOtherM.ADC -> ADCC.ADC[TOS_ADC_SENSORY_PORT];> > ProjectOtherM.ADC -> ADCC.ADC[TOS_ADC_SENSORZ_PORT];> > ProjectOtherM.ADCControl -> ADCC;> > > > }> > > > ***************** ProjectOtherM.nc *****************> > includes IntMsg;> > includes SensorX;> > includes SensorY;> > includes SensorZ;> > > > module ProjectOtherM {> > provides {> > interface StdControl;> > interface IntOutput;> > }> > uses {> > interface StdControl as SubControl;> > interface SendMsg;> > interface Timer;> > interface Leds;> > interface ADC;> > interface ADCControl;> > }> > }> > > > implementation {> > int state;> > bool pending, flag_y, flag_g, flag_r;> > TOS_Msg msg_data;> > uint16_t ADCval;> > > > void readIRSensor();> > task void chooseADCChannel();> > > > /* interface StdControl */> > command result_t StdControl.init() {> > atomic ADCval = 0;> > atomic state = 1;> > pending = FALSE;> > call Leds.init();> > call Leds.redOff();> > call Leds.yellowOff();> > call Leds.greenOff();> > call ADCControl.init();> > > > return call SubControl.init();> > }> > > > command result_t StdControl.start() {> > call Timer.start(TIMER_REPEAT, 1000);> > return call SubControl.start();> > }> > > > command result_t StdControl.stop() {> > return call SubControl.stop();> > }> > > > /* interface IntOutput */> > command result_t IntOutput.output(uint16_t value) {> > IntMsg *message = (IntMsg *)msg_data.data;> > > > if(!pending)> > {> > pending = TRUE; > > readIRSensor(); > > atomic {> > message->val = ADCval;> > /*message->src = TOS_LOCAL_ADDRESS;*/> > if(!(state%3)) message->testval = 0x0099;> > else if((state%3)==1) message->testval = 0x0088;> > else message->testval = 0x0077;> > }> > > > if (call SendMsg.send(0x0111, sizeof(IntMsg), &msg_data))> > return SUCCESS;> > > > pending = FALSE;> > }> > return FAIL;> > }> > /* interface ADC */> > void readIRSensor(){> > call Leds.greenToggle();> > call ADC.getData();> > }> > async event result_t ADC.dataReady( uint16_t data ) {> > ADCval = data;> > post chooseADCChannel();> > return SUCCESS;> > }> > > > task void chooseADCChannel()> > {> > if(!(state%3)) call ADCControl.bindPort( TOS_ADC_SENSORX_PORT, > > TOSH_ACTUAL_ADC_SENSORX_PORT );> > else if((state%3)==1)call ADCControl.bindPort( > > TOS_ADC_SENSORY_PORT, TOSH_ACTUAL_ADC_SENSORY_PORT );> > else call ADCControl.bindPort( TOS_ADC_SENSORZ_PORT, > > TOSH_ACTUAL_ADC_SENSORZ_PORT );> > > > }> > > > /* interface SendMsg */> > event result_t SendMsg.sendDone(TOS_MsgPtr msg, result_t success) {> > if (pending && msg == &msg_data)> > {> > pending = FALSE;> > if(success == 0) atomic state--;> > }> > return SUCCESS;> > }> > > > /* interface Timer */> > event result_t Timer.fired() {> > if (call IntOutput.output(state))> > atomic state++;> > dbg(DBG_USR1,"state=%i\n",state);> > dbg(DBG_USR1,"ADCval=%i\n",ADCval);> > return SUCCESS;> > }> > }> > ------------------------------------------------------------------------> > 2 GB 超大容量 、創新便捷、安全防護垃圾郵件和病毒 — 立即升級 Windows Live > > Hotmail? <http://mail.live.com >> > > > > > ------------------------------------------------------------------------> > > > _______________________________________________> > Tinyos-help mailing list> > Tinyos-help at Millennium.Berkeley.EDU> > https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help> > -- > Platform: WinXP/Cygwin> TinyOS version: 1.x, Boomerang> Programmer: MIB510> Device(s): Mica2, MicaZ, Tmote> Sensor board: homebrew>
_________________________________________________________________
聰明搜尋和瀏覽網路的免費工具列 — MSN 搜尋工具列
http://toolbar.live.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.millennium.berkeley.edu/pipermail/tinyos-help/attachments/20070915/14ac7890/attachment.html
More information about the Tinyos-help
mailing list