ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
269286
BaN (28.08.2011 18:11, просмотров: 1814)
Взял на пробу пару трансиверов RFM22B. Запустил, нормально работают. Но появился следующий вопрос: Я предполагал, что при передаче одного байта от одного модуля к другому, возникающая задержка будет все время одинакова. Но измерив эту задержку, я увидел, что она колеблится в пределах 30мкс. Измерял таймером на частоте кварца 8МГц. Два модуля соединены между собой проводом и приемник раз в секунду создает перепад на этом проводе. По этому перепаду на передатчике возникает прерывание и отправляется один байт. В это время на приемнике измеряется задержка и, по приему байта модулем, таймер останавливается и измеренное значение передается по USB. Приемник и инициатор посылки: #pragma vector = TIMER1_OVF_vect __interrupt void TIMER1_OVF(void) { counter++; if (counter == 122) // Отсчитываем 1 секунду { counter = 0; TCCR1B = 0x00; TCNT1 = 0x0000; PORTC_Bit5 ^= 1; // Создаем перепад на проводе, чтобы передатчик послал байт TCCR1B = 0x01; while (nIRQ); // Ждем, пока приемник не примет байт TCCR1B = 0x00; RFM22B_delay = TCNT1; TCCR1B = 0x01; flag_USB_TX = 1; // Переход в режим приема SPI_WRITE(0x05, 0x02); // interrupt on recieve packet SPI_WRITE(0x07, 01); // SPI_READ(0x03); //read the Interrupt Status1 register SPI_READ(0x04); SPI_WRITE(0x07, 05); while (!nIRQ); } } Передатчик: #pragma vector = PCIN1_vect __interrupt void EXT_PCINT(void) { // Переход в режим передачи SPI_READ(0x03); //read the Interrupt Status1 register SPI_READ(0x04); SPI_WRITE(0x05, 0x04); // interrupt is enable SPI_WRITE(0x7F, 0xAA);//Data_TX_RFM22B); SPI_WRITE(0x07, 9); // go to TX-mode while (!nIRQ); } Чем может быть вызвана эта задержка?