Re: [Tinyos-help] how to get 3 ADC Port value from Tmote sky
Michael Schippling
schip at santafe.edu
Thu Sep 13 10:14:00 PDT 2007
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
More information about the Tinyos-help
mailing list