Hi Janos ,

I am doing the same steps. I am still searching what did I do wrong... I am
using system which has been newly checked out from tinyos-2.x development
repository.

Is it possible to use only the codes in the directory *
/tinyos-cvs/tinyos-2.x-contrib/vu/tos/chips/msp430* without changing any
other codes in the current repository? I mean is it possible *not to use
your cc2420 stack*? Can I apply only changes you have done on msp430 timer
subsystem without changing any other thing? Does the whole system work
stable when we switch only Timer A and Timer B ?

Thanks so so much...

06 Ağustos 2010 17:27 tarihinde Janos Sallai <[email protected]>yazdı:

> Sinan,
>
> The problem is that it's not possible to tell the radio stack to
> transmit a message at time t. The time delay between
> TimeSyncAMSend.send() being called and the message actually going out
> has a significant jitter (clear channel assessment, collision
> avoidance mechanism is going on in between).
>
> However, there are couple of ways to figure out if timestamping works well.
> 1. Keep your transmitter as it is, transmitting a message
> approximately every 5 seconds. Set up two receivers with the receiver
> code you currently have. The time delay between receiving messages i
> and j should be the same on both receivers.
> 2. Modify your transmitter to report the transmit timestamps of each
> message sent (use the PacketTimestamp interface in
> TimeSyncAMSend.sendDone() ). The difference between the transmit
> timestamps of messages i and j should be the same as the delay between
> receiving those messages at the receiver.
>
> Janos
>
> 2010/8/6 Sinan Yildirim <[email protected]>:
> > Hi Janos,
> >
> > thanks for your reccomendations. I have tried it but however I think that
> > there are inconsistencies between the timestamps I receive.
> >
> > One of the nodes periodically sends a beacon in every 5 seconds using a
> > AlarmMilli and TimeSyncAMSend. When the other nodes receive and timestamp
> > these messages, I notice that there is a big error on the difference of
> > timestamps of two consecutive beacon receivals. For example, I get
> 5261323
> > and 5189177 values at the same node for the difference.
> >
> > Is it because DCO calibration? Or any other thins to consider?
> >
> > Thanks for your valuable comments and helps...
> >
> > 05 Ağustos 2010 18:47 tarihinde Janos Sallai <[email protected]
> >
> > yazdı:
> >>
> >> Sinan,
> >>
> >> I actually have an alternative cc2420 radio stack implementation under
> >> tinyos-2.x-contrib/vu that does what you want. That is, the msp430
> >> timer subsystem is reprogrammed such that timer A is the 32kHz timer
> >> and timer B is the micro timer. The radio stack uses the micro timer
> >> for timestamping, gets rid of the timestamp queue (historically a
> >> source of lots of bugs), eliminates spurious acks (no ack is sent out
> >> unless received packet is accepted by higher layers of the radio
> >> stack), and much more. It doesn't do security, though.This stack uses
> >> the same driver infrastructure as the rf2xx stack for the iris.
> >>
> >> To use my cc2420 stack, follow the steps below:
> >> 1. Make sure you have the latest tinyos sources (google code SVN or
> >> sourceforge CVS are both fine).
> >> 2. Check out tinyos-2.x-contrib/vu from the CVS at sourceforge.
> >> 3. Do a cd to the local directory where tinyos-2.x-contrib/vu is
> >> checked out, and type "source setenv" (without the double quotes) to
> >> set up some environment variables.
> >> 4. Change "include $(MAKERULES)" to "include $(VUMAKERULES)" in the
> >> applications makefile. This will make sure that the code in the
> >> tinyos-2.x-contrib/vu tree takes precedence over the ones in the main
> >> tinyos tree.
> >> 5. Compile the application with make telosb as usual.
> >>
> >> Janos
> >>
> >> 2010/8/5 Sinan Yildirim <[email protected]>:
> >> > Hi again,
> >> >
> >> > I wanted to add some comments to my last reply.
> >> >
> >> > When I connect Timer A to SFD, I could get time= 0 from async event
> void
> >> > CaptureSFD.captured( uint16_t time )  and  it means all timestamps are
> >> > invalid. Also, I could not get time values LocalTimeMicroC component
> and
> >> > it
> >> > always returns 0.
> >> >
> >> > However, when I remove my modifications and connect SFD to Timer B
> >> > again, I
> >> > can get time values LocalTimeMicroC component which uses timer A.
> >> >
> >> > So should I do something to time subsystem when I connect timer A to
> >> > SFD?
> >> >
> >> >
> >> > 05 Ağustos 2010 12:35 tarihinde Sinan Yildirim <[email protected]>
> >> > yazdı:
> >> >>
> >> >> Hi Thomas,
> >> >>
> >> >> I am working on a similar platform to Telos I think... (It is
> Genetlab
> >> >> Sensenode platform). I have connected TimerA to the SFD line as you
> >> >> said. I
> >> >> have modified the file HplCC2420InterruptsC.
> >> >>
> >> >> configuration HplCC2420InterruptsC {
> >> >>
> >> >>   provides interface GpioCapture as CaptureSFD;
> >> >>   provides interface GpioInterrupt as InterruptCCA;
> >> >>   provides interface GpioInterrupt as InterruptFIFOP;
> >> >>
> >> >> }
> >> >>
> >> >> implementation {
> >> >>
> >> >>   components HplMsp430GeneralIOC as GeneralIOC;
> >> >>   components Msp430TimerC;
> >> >>   components new GpioCaptureC() as CaptureSFDC;
> >> >>   CaptureSFDC.Msp430TimerControl -> Msp430TimerC.ControlA0;
> >> >>   CaptureSFDC.Msp430Capture -> Msp430TimerC.CaptureA0;
> >> >> //  CaptureSFDC.Msp430TimerControl -> Msp430TimerC.ControlB1;
> >> >> //  CaptureSFDC.Msp430Capture -> Msp430TimerC.CaptureB1;
> >> >>   CaptureSFDC.GeneralIO -> GeneralIOC.Port41;
> >> >>
> >> >>   components HplMsp430InterruptC;
> >> >>   components new Msp430InterruptC() as InterruptCCAC;
> >> >>   components new Msp430InterruptC() as InterruptFIFOPC;
> >> >>   InterruptCCAC.HplInterrupt -> HplMsp430InterruptC.Port14;
> >> >>   InterruptFIFOPC.HplInterrupt -> HplMsp430InterruptC.Port10;
> >> >>
> >> >>   CaptureSFD = CaptureSFDC.Capture;
> >> >>   InterruptCCA = InterruptCCAC.Interrupt;
> >> >>   InterruptFIFOP = InterruptFIFOPC.Interrupt;
> >> >>
> >> >> }
> >> >>
> >> >> However, the node that I have programmed stopped sending and
> receiving
> >> >> packets after this modification... Any ideas? Do I need to make any
> >> >> other
> >> >> modifications?
> >> >>
> >> >> Thanks for your suggestions...
> >> >>
> >> >>  K. Sinan YILDIRIM
> >> >>
> >> >>   Ege University
> >> >>   Computer Engineering Department
> >> >>   Izmir, TURKEY
> >> >>
> >> >>
> >> >>
> >> >> 2010/8/4 Thomas Schmid <[email protected]>
> >> >>>
> >> >>> Hi Sinan,
> >> >>>
> >> >>> The problem is not in the TinyOS code. The hardware you use (I
> assume
> >> >>> TelosB or Sky?) does not support these timestamps by default. The
> >> >>> timestamps are taken when the SFD line toggles. This line is
> connected
> >> >>> to the TimerB, which is sourced from the 32kHz signal. Thus, you can
> >> >>> not get microsecond timestamps with it.
> >> >>>
> >> >>> You have two choices:
> >> >>> - Change TimerB to use a high-speed clock (note, DCO is not stable
> >> >>> enough, so your hardware has to have an external high-speed crystal
> or
> >> >>> clock) and rewire TinyOS to use TimerA for the virtual timer
> >> >>> subsystem.
> >> >>> - connect the SFD line to a TimerA input line. Then, use this to
> >> >>> capture the timestamps.
> >> >>>
> >> >>> Cheers,
> >> >>>
> >> >>> - Thomas
> >> >>>
> >> >>>
> >> >>>
> >> >>> 2010/8/4 Sinan Yildirim <[email protected]>:
> >> >>> > Hello all,
> >> >>> >
> >> >>> > I have a problem on microsecond precision timestamps. I am using
> >> >>> > CC24
> >> >>> > radio
> >> >>> > chip and MSP430 microcontroller. As far as I understood, the
> packets
> >> >>> > are
> >> >>> > timestamped at CC2420ReceiveP and CC2420TransmitP files.
> >> >>> >
> >> >>> >   /***************** CC2420Receive Commands ****************/
> >> >>> >   /**
> >> >>> >    * Start frame delimiter signifies the beginning/end of a packet
> >> >>> >    * See the CC2420 datasheet for details.
> >> >>> >    */
> >> >>> >   async command void CC2420Receive.sfd( uint32_t time ) {
> >> >>> >     if ( m_timestamp_size < TIMESTAMP_QUEUE_SIZE ) {
> >> >>> >       uint8_t tail =  ( ( m_timestamp_head + m_timestamp_size ) %
> >> >>> >                         TIMESTAMP_QUEUE_SIZE );
> >> >>> >       m_timestamp_queue[ tail ] = time;
> >> >>> >       m_timestamp_size++;
> >> >>> >     }
> >> >>> >   }
> >> >>> >
> >> >>> >
> >> >>> >   async event void CaptureSFD.captured( uint16_t time ) {
> >> >>> >     uint32_t time32;
> >> >>> >     uint8_t sfd_state = 0;
> >> >>> >     atomic {
> >> >>> >
> >> >>> >       time32 = getTime32(time);
> >> >>> >       switch( m_state ) {
> >> >>> >
> >> >>> >       case S_SFD:
> >> >>> >         m_state = S_EFD;
> >> >>> >         sfdHigh = TRUE;
> >> >>> >         // in case we got stuck in the receive SFD interrupts, we
> >> >>> > can
> >> >>> > reset
> >> >>> >         // the state here since we know that we are not receiving
> >> >>> > anymore
> >> >>> >         m_receiving = FALSE;
> >> >>> >         call CaptureSFD.captureFallingEdge();
> >> >>> >         call PacketTimeStamp.set(m_msg, time32);
> >> >>> >         if (call PacketTimeSyncOffset.isSet(m_msg)) {
> >> >>> >            uint8_t absOffset =
> >> >>> > sizeof(message_header_t)-sizeof(cc2420_header_t)+call
> >> >>> > PacketTimeSyncOffset.get(m_msg);
> >> >>> >            timesync_radio_t *timesync = (timesync_radio_t
> >> >>> > *)((nx_uint8_t*)m_msg+absOffset);
> >> >>> >            // set timesync event time as the offset between the
> >> >>> > event
> >> >>> > time
> >> >>> > and the SFD interrupt time (TEP  133)
> >> >>> >            *timesync  -= time32;
> >> >>> >            call CSN.clr();
> >> >>> >            call TXFIFO_RAM.write( absOffset, (uint8_t*)timesync,
> >> >>> > sizeof(timesync_radio_t) );
> >> >>> >            call CSN.set();
> >> >>> >            //restoring the event time to the original value
> >> >>> >            *timesync  += time32;
> >> >>> >         }
> >> >>> >
> >> >>> >
> >> >>> > My problem is, as far as I understood, the "time" parameter of
> these
> >> >>> > functions are all in 32 KHz. I am currently implementing a time
> >> >>> > synchronization protocol and I need microsecond precision.
> Current
> >> >>> > version
> >> >>> > of TinyOs does not have interfaces that serves microsecond
> >> >>> > timestamps
> >> >>> > in my
> >> >>> > platform.
> >> >>> >
> >> >>> > What are your suggestions? Is there a way to get microsecond
> >> >>> > precision?
> >> >>> >
> >> >>> > Thanks for your helps and thanks a lot...
> >> >>> >
> >> >>> > K. Sinan YILDIRIM
> >> >>> >
> >> >>> > Ege University
> >> >>> > Computer Engineering Department
> >> >>> > İzmir, TURKEY
> >> >>> >
> >> >>> >
> >> >>> > _______________________________________________
> >> >>> > Tinyos-help mailing list
> >> >>> > [email protected]
> >> >>> >
> >> >>> >
> >> >>> >
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
> >> >>> >
> >> >>
> >> >
> >> >
> >> > _______________________________________________
> >> > Tinyos-help mailing list
> >> > [email protected]
> >> >
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
> >> >
> >
> >
>
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to