Sorry your questions don't compute for me...
Are you asking about a specific program, like one of the app demos?
If so which one?
The only advice I can give at this point is to look through the
tutorial in the doc directory of the TOS distribution.
MS
Lei Tang wrote:
Hi,
I'm also working with the MDA300 and MICAz. I have some problems which
may be straightforward to you guys.
1. How to setup the sampling rate? Can I just change
ANALOG_SAMPLING_TIME (for example, 10)? I tried. But it didn't make any
difference, or the sensor worked a few seconds and then stopped.
2. Does Sample.getSample() trigger a continuous sampling with the
ANALOG_SAMPLING_TIME interval?
3. How is radio (UART) communication called when data ready?
4. What is the timer used for?
Thanks.
LT
On 11/8/05, *Michael Schippling* <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
I would suspect the use of your "sending_packet" state variable.
It may be getting reset by the sendDone() in the midst of doing
your data acquisition, which will prevent the next message start.
MS
Alessandro Balvis wrote:
> Hy, I'm working with the MDA300 and Micaz for data analysis of a
signal.
> I have some problem with the code about the sending data. Everything
> works good until the event " Send.done", that block the
acquisition of
> data from MDA300, while the Timer is still working. I try to send
some
> results from the implemented FFT, just to try the send task with the
> radio. It works just once, the first time, then it stops. Why the
event
> blocks the execution of FFT? There is some problem with the timing of
> the command and event?
> I list the code for explication, any suggest or comment is
appreciated,
> thanks.
>
>
> Alessandro Balvis
> Centro Ricerche Enel - Pisa
> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
<mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
>
>
>
> includes sensorboard;
>
> includes sinewave;
>
> module MDA300M
>
> {
>
> provides interface StdControl;
>
> uses {
>
> interface Leds;
>
> //Sampler Communication
>
> interface StdControl as SamplerControl;
>
> //interface StdControl as SubControl;
>
> interface Sample;
>
> //interface LoggerWrite;
>
> //interface LoggerRead;
>
> //RF communication
>
> interface StdControl as CommControl;
>
> interface Send;
>
> interface RouteControl;
>
> interface CC2420Control as Radio;
>
> //Timer
>
> interface Timer;
>
> }
>
> }
>
>
>
> implementation
>
> {
>
> #define RATE_TIMER 50 // in decimi di secondo
>
> #define ANALOG_SAMPLING_TIME 1
>
> #define MDA300_PACKET1 1
>
> #define INTERVAL_TIMER 1024 * 14
>
> #define NSIGNAL 128
>
> uint16_t fr[NSIGNAL];
>
> uint16_t fi[NSIGNAL];
>
> uint16_t index;
>
> #define LOG2NSIGNAL 7 //ATTENZIONE!!
> Impostare bene il parametro
>
> uint16_t mr, nn, i, j, l, k, istep, n, shift;
>
> uint16_t qr, qi, tr, ti, wr, wi;
>
> uint16_t m;
> //dimensione dei dati 2^m
>
> //#define PACKET1_FULL 1 // contatore per
riempire
> pacchetto
>
> #define MSG_LEN 40 // excludes TOS
> header, but includes xbow header
>
> enum {
>
> SENSOR_ID = 7,
>
> POWER = 9,
>
> FREQ = 10,
>
> DATA_START = 12,
>
> } PacketDataEnum;
>
> /* Messages Buffers */
>
> //TOS_Msg packet;
>
> TOS_Msg radio_send_buffer;
>
> TOS_MsgPtr radio_msg_ptr;
>
> char *ptr_store;
>
> uint8_t msg_status;
>
> uint16_t Len;
>
> uint8_t power;
>
> uint16_t freq;
>
> uint8_t nsam, z;
>
> bool working;
>
> bool sending_packet;
>
> int8_t record[4];
>
>
/****************************************************************************
>
> * Inizializzo i componenti.
>
> *
>
>
****************************************************************************/
>
> command result_t StdControl.init() {
>
> call Leds.init();
>
> atomic {
>
> radio_msg_ptr = call Send.getBuffer(&radio_send_buffer,&Len);
>
> }
>
> msg_status = 0;
>
> nsam = NSIGNAL-1;
>
> z = 0;
>
> working = FALSE;
>
> sending_packet = FALSE;
>
> call SamplerControl.init();
>
> call CommControl.init();
>
> return SUCCESS;
>
> }
>
>
/****************************************************************************
>
> * Avvio i componenti. Avvio il clock. Setup del campionamento
>
> *
>
>
****************************************************************************/
>
> command result_t StdControl.start() {
>
> call SamplerControl.start();
>
> call CommControl.start();
>
> call Timer.start(TIMER_REPEAT, INTERVAL_TIMER);
>
> return SUCCESS;
>
> }
>
>
/****************************************************************************
>
> * Blocco i componenti.
>
> *
>
>
****************************************************************************/
>
> command result_t StdControl.stop() {
>
> call SamplerControl.stop();
>
> return SUCCESS;
>
> }
>
>
/****************************************************************************
>
> * Trasmissione del paccheto via radio
>
> *
>
>
****************************************************************************/
>
>
> task void send_radio_msg()
>
> {
>
> power = (uint8_t) call Radio.GetRFPower();
>
> radio_msg_ptr->data[POWER] = power;
>
> freq = (uint16_t) call Radio.GetFrequency();
>
> radio_msg_ptr->data[FREQ] = freq;
>
> radio_msg_ptr->data[FREQ+1] = (freq >> 8);
>
> //radio_msg_ptr->data[RSSI] = radio_send_buffer.strength;
>
> radio_msg_ptr->data[SENSOR_ID] = SENSOR_BOARD_ID;
>
> radio_msg_ptr->data[SENSOR_ID+1] = (SENSOR_BOARD_ID >> 8);
>
> call Send.send(radio_msg_ptr,Len);
>
> }
>
>
/****************************************************************************
>
> * Inserimento dati in pacchetto
>
> *
>
>
****************************************************************************/
>
> task void insert_result() {
>
> uint16_t ibuff;
>
> ibuff = 0;
>
> for (ibuff = 0; ibuff < 15; ibuff += 1) {
>
> radio_msg_ptr->data[DATA_START+ibuff] = 79; //fr[ibuff];
>
> }
>
> post send_radio_msg();
>
> }
>
>
/****************************************************************************
>
> * Elaborazione dati tramite FFT
>
> *
>
>
****************************************************************************/
>
>
> task void fix_fft() {
>
> m = 7; //ATTENZIONE!!
> Impostare bene il parametro
>
> n = 1 << m;
>
> mr = 0;
>
> nn = n - 1;
>
> tr = 0;
>
> ti = 0;
>
> shift = 1;
>
> istep = 0;
>
> call Leds.yellowOn();
>
>
>
> //Decimazione nel tempo e riordino dei dati
>
> for (m = 1; m<=nn; ++m) {
>
> l = n;
>
> do {
>
> l >>= 1;
>
> } while (mr+l > nn);
>
> mr = (mr & (l-1)) + 1;
>
> if (mr <= m) {
>
> tr = fr[m];
>
> fr[m] = fr[mr];
>
> fr[mr] = tr;
>
> ti = fi[m];
>
> fi[m] = fi[mr];
>
> fi[mr] = ti;}
>
> }
>
> l = 1;
>
> k = LOG2NSIGNAL;
>
> while (l < n) {
>
> shift = 1;
>
> istep = l << 1;
>
> for (m = 0; m < l; ++m) {
>
> j = m << k;
>
> if (j >= NSIGNAL/2) {
>
> wr = -sinewave[j-NSIGNAL/2+NSIGNAL/4];
>
> wi = sinewave[j-NSIGNAL/2];
>
> } else {
>
> wr = sinewave[j+NSIGNAL/2];
>
> wi = -sinewave[j];
>
> }
>
> if (shift) {
>
> wr >>= 1;
>
> wi >>= 1;
>
> }
>
> for (i = m; i < n; i += istep) {
>
> j = i + l;
>
> tr = ((wr)*(fr[j]))-((wi)*(fi[j]));
>
> ti = ((wr)*(fr[j]))+((wi)*(fi[j]));
>
> qr = fr[i];
>
> qi = fi[i];
>
> if (shift) {
>
> qr >>= 1;
>
> qi >>= 1;
>
> }
>
> fr[j] = qr - tr;
>
> fi[j] = qi - ti;
>
> fr[i] = qr + tr;
>
> fi[i] = qi + ti;
>
> }
>
> }
>
> --k;
>
> l = istep;
>
> }
>
> for (m = 0; m < NSIGNAL-1; m += 1) {
> //conversione in forma polare
>
> fr[m] = fr[m] >> 12;
>
> fi[m] = fi[m] >> 12;
>
> fr[m] = fr[m]*fr[m];
>
> fi[m] = fi[m]*fi[m];
>
> fr[m] = sqrt(fr[m]+fi[m]);
>
> dbg(DBG_USR1, "Ale: X(k=%d)=%d\n", m, fr[m]);
>
> }
>
> call Leds.yellowOff();
>
> post insert_result();
>
> }
>
>
/****************************************************************************
>
> * Messaggio trasmesso via radio.
>
>
****************************************************************************/
>
> event result_t Send.sendDone(TOS_MsgPtr pMsg, result_t success) {
>
> radio_msg_ptr = pMsg;
>
> call Leds.redToggle();
>
> atomic {
>
> sending_packet = FALSE;
>
> }
>
> return SUCCESS;
>
> }
>
>
/****************************************************************************
>
> * Timer Fired -
>
> *
>
>
****************************************************************************/
>
> event result_t Timer.fired() {
>
> call Leds.greenToggle();
>
> atomic {
>
> working = TRUE;
>
> sending_packet = TRUE;
>
> }
>
> record[3] = call
> Sample.getSample(7,ANALOG,ANALOG_SAMPLING_TIME,AVERAGE_FOUR);
>
> return SUCCESS;}
>
>
>
>
/****************************************************************************
>
> * Gestisco l'evento dataReady singolarmente
>
> * per tutti i tipi di dati generati dal MDA300
>
>
****************************************************************************/
>
> event result_t Sample.dataReady(uint8_t channel,uint8_t
> channelType,uint16_t dato) {
>
> switch (channelType) {
>
> case ANALOG:
>
> switch (channel) {
>
> case 7:
>
> if (working) {
>
> fr[z]=(int16_t) 1000*((dato/2048) - 1);
> //normalizzo il valore del seganel e
>
> call Leds.yellowToggle();
> //moltiplico per mille per operare con interi
>
> atomic {z += 1;
>
> nsam -= 1;
>
> }
>
> break;
>
> }
>
> }
>
> default:
>
> break;
>
> }
>
> atomic {
>
> if (nsam == 0 && sending_packet) {
>
> z = 0;
>
> nsam = NSIGNAL-1;
>
> working = FALSE;
>
> post fix_fft();
>
> }
>
> }
>
> return SUCCESS;
>
> }
>
> }
>
>
>
>
>
>
------------------------------------------------------------------------
>
> _______________________________________________
> Tinyos-help mailing list
> [email protected]
<mailto:[email protected]>
>
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
_______________________________________________
Tinyos-help mailing list
[email protected]
<mailto:[email protected]>
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help