Re: [Tinyos-help] how to get 3 ADC Port value from Tmote sky�
Michael Schippling
schip at santafe.edu
Sat Sep 15 10:01:47 PDT 2007
Sorry....
fire-off means call ADCy.getData();
This will start the second (Y) conversion.
Then in ADCy.dataReady() call ADCz.getData();
to start the Z conversion. In ADCz.dataReady()
you could chain back to ADCx.getData() or leave
it to your timer to start the next set.
MS
Chen Bleed wrote:
>
> 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
> >
>
>
> ------------------------------------------------------------------------
> 聰明搜尋和瀏覽網路的免費工具列 — Windows Live 搜尋工具列
> <http://toolbar.live.com/>
--
Platform: WinXP/Cygwin
TinyOS version: 1.x, Boomerang
Programmer: MIB510
Device(s): Mica2, MicaZ, Tmote
Sensor board: homebrew
More information about the Tinyos-help
mailing list