Здравствуйте, форумчане!
Вот разобрался ещё с одной проблемой TRC101(2).
Эта засада мучит всех и всегда.
Вот примеры:
Цитата:
|
Для скорости обмена, конечно, сделать отдельные м/c передатчика и приёмника это хорошее решение. Из опыта использования MLA, 49XA при работе как приёмопередатчик тормозит порядка 10-20мс (я так понял в силу несовершенности внутренней схемотехники) при переключении приём-передача
|
Другие делают задержку методом научного тыка
через Dummy Byte.
Цитата:
|
RFM12B_CMD(0x823; // Enable Sender
RFM12B_WRITE(0xAA); // Preamble
RFM12B_WRITE(0xAA); // Preamble
RFM12B_WRITE(0xAA); // Preamble
RFM12B_WRITE(0xCE); // Sync HighByte
RFM12B_WRITE(0xD4); // Sync LowByte
for (i=0;i‹size;i++)
{
RFM12B_WRITE(*ptr); // DATA Byte
ptr++;
}
RFM12B_WRITE(0xAA); // Dummy Byte
RFM12B_WRITE(0xAA); // Dummy Byte
RFM12B_WRITE(0xAA); // Dummy Byte
RFM12B_WAIT_READY();
RFM12B_CMD(0x820; // Disable Sender
}
|
Подключил передатчик и приёмник к логическому анализатору и после серии экспериментов ужаснулся. Как всё просто.
3 канал - инф. передатчика.
4 канал- CLK передатчика.
6 канал- CLK приёмника.
7 канал- инф. приёмника.
Заметьте насколько позже информация появляется на входе приёмника.
у меня 20кбод, чтение 16 бит.
Хотя вы анализируете бит
Код:
|
spi_Write_ISM_8(0xAA);
delay_us( 15 );
VT2:
if(input(SDI_M))
{ delay_us(1);
goto VT2;} |
перед загрузкой следующего байта , но в приёмнике он появиться позже.
Тут и начинается причина всех неудач. Выдача по анализу закончилась, а по факту ещё нет . Вы начинаете переключать в режим
приёма и тут всё становиться колом .
Задержка 1 мсек решила проблему. Она зависит от скорости естественно.
И всё заработало как часы. Я сам даже удивляюсь .
Кто в теме тот поймёт.