Взял на пробу пару трансиверов 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);
}
Чем может быть вызвана эта задержка?
-
- Настройки модуля: BaN(2617 знак., 28.08.2011 18:19)