Sinan: > 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. Which setup do you use out of the two I described? Can you please send me the numbers you get?
Janos > 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
