Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь. |
08.11.2012, 19:56
|
|
Прохожий
Регистрация: 30.08.2010
Сообщений: 9
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от Easyrider83
|
Приемник сидит с поднятым СЕ все время приема.
|
Да.
Жду прерывание. А его нет.
|
|
|
|
08.11.2012, 19:58
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Тогда выкладывайте подробный алгоритм, что делаете. Я вам даже готовые коды выложил. Кучу времени потратил на их отладку.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
08.11.2012, 22:01
|
|
Прохожий
Регистрация: 30.08.2010
Сообщений: 9
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от Easyrider83
|
Тогда выкладывайте подробный алгоритм, что делаете. Я вам даже готовые коды выложил. Кучу времени потратил на их отладку.
|
Чтобы не утомлять чтением алгоритма, выкладываю лог инициализации для приемника снятый лог. анализатором (вставил пустые строки между записью блоков, для удобства чтения):
MOSI MISO
' ' (0x20) '14' (0x0E)
'11' (0x0B) '0' (0x00)
! (0x21) '14' (0x0E)
? (0x3F) '0' (0x00)
(0x22),'14' (0x0E)
? (0x3F) '0' (0x00)
# (0x23) '14' (0x0E)
'3' (0x03) '0' (0x00)
$ (0x24) '14' (0x0E)
'3' (0x03) '0' (0x00)
% (0x25) '14' (0x0E)
'2' (0x02) '0' (0x00)
& (0x26) '14' (0x0E)
'14' (0x0E) '0' (0x00)
' (0x27) '14' (0x0E)
~ (0x7E) '0' (0x00)
* (0x2A) '14' (0x0E)
'231' (0xE7) '0' (0x00)
'231' (0xE7) '0' (0x00)
'231' (0xE7) '0' (0x00)
'229' (0xE5) '0' (0x00)
'226' (0xE2) '0' (0x00)
+ (0x2B) '14' (0x0E)
'231' (0xE7) '0' (0x00)
'231' (0xE7) '0' (0x00)
'231' (0xE7) '0' (0x00)
'229' (0xE5) '0' (0x00)
'227' (0xE3) '0' (0x00)
1 (0x31) '14' (0x0E)
'20' (0x14) '0' (0x00)
2 (0x32) '14' (0x0E)
'20' (0x14) '0' (0x00)
3 (0x33) '14' (0x0E)
'20' (0x14) '0' (0x00)
4 (0x34) '14' (0x0E)
'20' (0x14) '0' (0x00)
5 (0x35) '14' (0x0E)
'20' (0x14) '0' (0x00)
[IMG] [/IMG]
|
|
|
|
08.11.2012, 22:12
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Да уж, не утомили )))) Одно скажу - 0x0E при чтении дефолтных настроек конфига - это правильно.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
08.11.2012, 22:32
|
|
Прохожий
Регистрация: 30.08.2010
Сообщений: 9
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от Easyrider83
|
Да уж, не утомили )))) Одно скажу - 0x0E при чтении дефолтных настроек конфига - это правильно.
|
первый байт это команда записи с адресом, ответом идет статус регистр
алгоритм просто неудобно анализировать, я использовал модуль SPI для работы с памятью, который подразумевает прожевывание больших массивов. Думал что радиомодуль инкрементирует адрес при записи, было бы очень удобно. Оказалось нет. Поэтому приходится перед каждым регистром писать команду записи с новым адресом.
Ну и лог анализатор все таки дает истинную картину а не предполагаемую.
|
|
|
|
09.11.2012, 09:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Вначале трансивер нужно вывести из повер-довна, подождать пару мс и потом продолжать инициализацию
В 24 пиши 43 или даже 53 - для пакетов по 20 байт
|
|
|
Эти 2 пользователя(ей) сказали Спасибо niXto за это сообщение:
|
|
|
09.11.2012, 18:53
|
|
Прохожий
Регистрация: 30.08.2010
Сообщений: 9
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от niXto
|
Вначале трансивер нужно вывести из повер-довна, подождать пару мс и потом продолжать инициализацию
В 24 пиши 43 или даже 53 - для пакетов по 20 байт
|
Я сделал задержку. На скриншоте кстати видно ее. После записи байта в регистр 00 пауза потом дальше.
24 вы имеете в виду регистр 0x04? Спасибо, попробую.
|
|
|
|
25.11.2012, 11:47
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2009
Сообщений: 609
Сказал спасибо: 37
Сказали Спасибо 140 раз(а) в 72 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Сообщение от Easyrider83
|
Выкладываю обновленные библиотеки под STM32 и STM8.
Пример использования:
Код:
|
unsigned char Init_RF (SPI_TypeDef* SPIx)
{
RF_InitTypeDef RF_InitStruct;
RF_InitStruct.RF_Power_State=RF_Power_On;
RF_InitStruct.RF_Config=RF_Config_IRQ_RX_On|RF_Con fig_IRQ_TX_Off|RF_Confing_IRQ_Max_Rt_Off;
RF_InitStruct.RF_CRC_Mode=RF_CRC16_On;
RF_InitStruct.RF_Mode=RF_Mode_RX;
RF_InitStruct.RF_Pipe_Auto_Ack=RF_Pipe1_Ack_Enable ;
RF_InitStruct.RF_Enable_Pipe=RF_Pipe0_Enable|RF_Pi pe1_Enable;
RF_InitStruct.RF_Setup=RF_Setup_5_Byte_Adress;
RF_InitStruct.RF_TX_Power=RF_TX_Power_High;
RF_InitStruct.RF_Data_Rate=RF_Data_Rate_1Mbs;
RF_InitStruct.RF_Channel=0x35;
RF_InitStruct.RF_RX_Adress_Pipe0[0]='S';
RF_InitStruct.RF_RX_Adress_Pipe0[1]='A';
RF_InitStruct.RF_RX_Adress_Pipe0[2]='P';
RF_InitStruct.RF_RX_Adress_Pipe0[3]='O';
RF_InitStruct.RF_RX_Adress_Pipe0[4]='G';
RF_InitStruct.RF_RX_Adress_Pipe1[0]='V';
RF_InitStruct.RF_RX_Adress_Pipe1[1]='A';
RF_InitStruct.RF_RX_Adress_Pipe1[2]='G';
RF_InitStruct.RF_RX_Adress_Pipe1[3]='O';
RF_InitStruct.RF_RX_Adress_Pipe1[4]='N';
RF_InitStruct.RF_Payload_Size_Pipe0=16;
RF_InitStruct.RF_Payload_Size_Pipe1=16;
RF_InitStruct.RF_Auto_Retransmit_Count=2;
RF_InitStruct.RF_Auto_Retransmit_Delay=3;
return RF_Init(SPIx, &RF_InitStruct);
} |
Для STM8 последняя строка выклядит так:
Код:
|
return RF_Init(&RF_InitStruct); |
В данном примере модуль настраивается на прием 16 байт с двух источников с именами "сапог" и "вагон" на скорости 1Мбит по каналу 0х35 с подтверждением передачи для "вагона".
Далее пример отправки пакета:
Код:
|
KeyActualFlag=RF_SendPayloadACK("TEST MESSAGE", 16); |
Переменная unsigned char KeyActualFlag принимает значение 0xFF если чип не отвечает в следствии проблем с железом или неправильной настройки, или 0 - если данные отправлены, подтверждение не получено и 1 если получено подтверждение передачи.
Функция приема возвращает номер потока или 0xFF, если данных нет.
Пример приема данных:
Код:
|
u8 Data[16];
u8 pipeN=0;
while(1)
{
pipeN=RF_Receive_Data(SPI1, Data, 16);
if (pipeN!=0xFF)
{
lcd_print_string("DATA! Pipe: ");
lcd_print_value(pipeN);
lcd_print_string(Data);
}
} |
|
Попробовал библиотеку. Возник вопрос, а она точно работает ?
Найденные проблемы:
Отсуствует процедура инициализации SPI. Добавил.
строка:
Код:
|
KeyActualFlag=RF_SendPayloadACK("TEST MESSAGE", 16); |
Должна выглядеть так:
Код:
|
KeyActualFlag=RF_SendPayloadACK(SPI2,"TEST MESSAGE", 16); |
Если инициализация делается так:
Код:
|
tmp=RF_Send_Cmd(SPIx, CONFIG_REG, RF_InitStruct-›RF_Config|RF_InitStruct-›RF_Power_State|RF_InitStruct-›RF_CRC_Mode|RF_InitStruct-›RF_Mode); |
То в регистре CONFIG поселяется значение 0x08.
Переделал так:
Код:
|
tmp=RF_Send_Cmd(SPIx, CONFIG_REG, RF_InitStruct-›RF_Power_State);
delay_ms(2);
tmp=RF_Send_Cmd(SPIx, CONFIG_REG, RF_InitStruct-›RF_Config|RF_InitStruct-›RF_Power_State|RF_InitStruct-›RF_CRC_Mode|RF_InitStruct-›RF_Mode); |
Стало гораздо лучше, конфиг пишется правильный с первого раза.
Но дальше... Дальше что-то незаладилось. Не могу передать ничего.
Считывал конфиг и сравнивал с другим примером - один в один, а передача при этом не идет. В процедуре передачи точно все правильно ?
Прием делается стендом на основе работающего примера с сайта: http://davidegironi.blogspot.ru/2012...on-atmega.html
Вот мой конфиг:
Код:
|
unsigned char Init_RF (SPI_TypeDef* SPIx)
{
RF_InitTypeDef RF_InitStruct;
RF_InitStruct.RF_Power_State=RF_Power_On;
RF_InitStruct.RF_Config=RF_Config_IRQ_RX_On|RF_Con fig_IRQ_TX_On|RF_Confing_IRQ_Max_Rt_On;
RF_InitStruct.RF_CRC_Mode=RF_CRC16_On;
RF_InitStruct.RF_Mode=RF_Mode_TX;
RF_InitStruct.RF_Pipe_Auto_Ack=RF_Pipe0_Ack_Enable ;
RF_InitStruct.RF_Enable_Pipe=RF_Pipe0_Enable;
RF_InitStruct.RF_Setup=RF_Setup_5_Byte_Adress;
RF_InitStruct.RF_TX_Power=RF_TX_Power_High;
RF_InitStruct.RF_Data_Rate=RF_Data_Rate_1Mbs;
RF_InitStruct.RF_Channel=76;
RF_InitStruct.RF_RX_Adress_Pipe0[0]=0xE2;
RF_InitStruct.RF_RX_Adress_Pipe0[1]=0xF0;
RF_InitStruct.RF_RX_Adress_Pipe0[2]=0xF0;
RF_InitStruct.RF_RX_Adress_Pipe0[3]=0xE8;
RF_InitStruct.RF_RX_Adress_Pipe0[4]=0xE8;
RF_InitStruct.RF_RX_Adress_Pipe1[0]=0xC2;
RF_InitStruct.RF_RX_Adress_Pipe1[1]=0xC2;
RF_InitStruct.RF_RX_Adress_Pipe1[2]=0xC2;
RF_InitStruct.RF_RX_Adress_Pipe1[3]=0xC2;
RF_InitStruct.RF_RX_Adress_Pipe1[4]=0xC1;
RF_InitStruct.RF_RX_Adress_Pipe2=0xC3;
RF_InitStruct.RF_RX_Adress_Pipe3=0xC4;
RF_InitStruct.RF_RX_Adress_Pipe4=0xC5;
RF_InitStruct.RF_RX_Adress_Pipe5=0xC6;
RF_InitStruct.RF_TX_Adress[0]=0xE2;
RF_InitStruct.RF_TX_Adress[1]=0xF0;
RF_InitStruct.RF_TX_Adress[2]=0xF0;
RF_InitStruct.RF_TX_Adress[3]=0xE8;
RF_InitStruct.RF_TX_Adress[4]=0xE8;
RF_InitStruct.RF_Payload_Size_Pipe0=16;
RF_InitStruct.RF_Auto_Retransmit_Count=6;
RF_InitStruct.RF_Auto_Retransmit_Delay=0;
return RF_Init(SPIx, &RF_InitStruct);
} |
Чую что-то упустил. Но кругом сомневаюсь.
|
|
|
|
25.11.2012, 14:41
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Под STM8 перекачайте файлы. Там куда-то одна строчка улетела. Как раз при использовании PIPE0 баг вылезал.
Инитиализацию SPI и GPIO я оставил для другой процедуры. Эти у меня кросс-платформенные.
Задержка не нужна. Нужно, чтобы между инитиализацией GPIO и поднятием CSN прошло хотя бы 2мс. Я использую OD выход и подтяжку резистором к плюсу. Поэтому после подачи питания у меня автоматом CSN=HIGH.
Проверяю чип так - после инитиализации должно вернуться значение 0x0E. Если вернулось - все интерфейс работает.
Последний раз редактировалось Easyrider83; 25.11.2012 в 14:44.
|
|
|
|
27.11.2012, 12:48
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2009
Сообщений: 609
Сказал спасибо: 37
Сказали Спасибо 140 раз(а) в 72 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Easyrider83, посмотрел новую библиотеку, кроме изменения списка параметров функций(убранного SPI порта) и новой функции проверки модуля, не нашел отличий. Ну и нехватает SPI библиотеки, с исправленными функциями.
использую под стм32.
Подскажете где искать ошибку ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:40.
|
|