Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь. |
21.09.2010, 07:10
|
|
Частый гость
Регистрация: 20.09.2010
Сообщений: 33
Сказал спасибо: 26
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Да, как заявлено, у 01+ нет болячек предшественников.
__________________
DCC и разные чудеса с ним.
XpressNet оказалась не такая страшная штука, если сравнивать с трансиверами. Но и трансиверы ничего страшного.
|
|
|
|
21.09.2010, 13:23
|
|
Частый гость
Регистрация: 20.09.2010
Сообщений: 33
Сказал спасибо: 26
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
В обще добился от трансивера статуса 2Е при одинаковых адресах TX и RX. Сделал пяти байтовый адрес. Но, при этом приемник ничего не принимает или даже выключен. Статус появляется только при отладке. Если запускаю без отладки в статусе при приходе прерывания вижу 00. Что это не понятно.
__________________
DCC и разные чудеса с ним.
XpressNet оказалась не такая страшная штука, если сравнивать с трансиверами. Но и трансиверы ничего страшного.
|
|
|
|
21.09.2010, 16:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
То есть перед командой W_TX_PAYLOAD статус читается как 0Е, после подачи W_TX_PAYLOAD ждете прерывание, по прерыванию читаете статус и там 2Е даже если приемник отключен?
Что в ФИФО_СТАТУС?
|
|
|
|
21.09.2010, 18:27
|
|
Частый гость
Регистрация: 20.09.2010
Сообщений: 33
Сказал спасибо: 26
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Не много не так.
Включаем передатчик, ждем немного, проверяем FIFO, если не пустой сбрасываем. Потом закидываю в буфер 5 байт, в размер payload для pipe. Стартуем передачу.
Цитата:
|
mirf_CE_lo;
PTX = 1; // Set to transmitter mode
TX_POWERUP; // Power up
delay_us(100);
mirf_read_register(FIFO_STATUS,n,1);
if (n[0] & (1‹‹TX_EMPTY))
{
mirf_CSN_lo; // Pull down chip select
spi_fast_shift( FLUSH_TX ); // Write cmd to flush tx fifo
mirf_CSN_hi; // Pull up chip select
};
delay_us(1);
mirf_CSN_lo; // Pull down chip select
spi_fast_shift(W_TX_PAYLOAD); // Write cmd to write payload
spi_transmit_sync(value,len); // Write payload
mirf_CSN_hi; // Pull up chip select
delay_ms(1);
mirf_CE_hi; // Start transmission
delay_us(10);
|
По идее по одному из трех событий (при передаче два) приходит прерывание.
Цитата:
|
uint8_t status;
uint8_t i[4];
uint8_t n;
// If still in transmitting mode then finish transmission
if (PTX) {
mirf_CE_lo; // Deactivate transreceiver
// Read MiRF status
mirf_CSN_lo; // Pull down chip select
status = spi_fast_shift(NOP); // Read status register
n = status;
mirf_CSN_hi; // Pull up chip select
usart_SendBcd(status);
RX_POWERUP; // Power up in receiving mode
mirf_CE_hi; // Listening for pakets
PTX = 0; // Set to receiving mode
delay_us(100);
if (status & (1‹‹MAX_RT))
{
mirf_CSN_lo; // Pull down chip select
spi_fast_shift( FLUSH_TX ); // Write cmd to flush tx fifo
mirf_CSN_hi; // Pull up chip select
mirf_config_register(STATUS, (1‹‹MAX_RT));
delay_us(1);
usart_puts("\n\r");
mirf_read_register(OBSERVE_TX,i,1);
n=i[0];
usart_puts("Observe:");
usart_SendBcd(n);
usart_puts("\n\r");
};
// Reset status register for further interaction
mirf_config_register(STATUS,(1‹‹TX_DS)); // Reset status register
}
|
В прерывании останавливаем передачу. Читаем статус. Запускаем приемник. А потом проверяем прочтенный ранее статус на события. Ну и сбрасываем флаги.
В FIFO_STATUS 0x11.
__________________
DCC и разные чудеса с ним.
XpressNet оказалась не такая страшная штука, если сравнивать с трансиверами. Но и трансиверы ничего страшного.
|
|
|
|
22.09.2010, 07:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Я же писал выше - после POWER_UP должна быть пауза минимум 2000 мкс
Пока связь не установите - вообще не играйтесь с этим битом, пусть всегда будет в 1
В передаче СЕ держите в 1 до прихода прерывания плюс таймер на 0,1 с от зависания
FLUSH_TX применяйте ТОЛЬКО если буфер переполнен - иначе возможно зависание трансивера (в л01 но возможно и в л01+). В л01 эта команда вообще не удаляет последний не-переданный пакет, в итоге при установке связи на приемник приходит сразу 2 пакета (не-переданный и текущий). Разруливаю программно - через идентификаторы
Не совсем понял - приемник у вас ждет прерывания, или вы периодически опрашиваете статус?
|
|
|
|
22.09.2010, 09:04
|
|
Частый гость
Регистрация: 20.09.2010
Сообщений: 33
Сказал спасибо: 26
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Приемник опрашивает статус и на всякий случай брейкпоинт стоит в обработчике прерывания.
Сейчас ситуация такая, EN_AA = 0b00000011 или 0b00000001 прерывания вообще не приходят.
__________________
DCC и разные чудеса с ним.
XpressNet оказалась не такая страшная штука, если сравнивать с трансиверами. Но и трансиверы ничего страшного.
Последний раз редактировалось OneginForte; 22.09.2010 в 09:14.
|
|
|
|
22.09.2010, 12:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Ну и как он что-либо примет, если радиочасть отключена и включена цифровая? Они параллельно работать НЕ могут. Вы хоть читаете что я раньше писал...
Включаете приемник на прием - и все, никаких обращений к чипу! Как только он что-то примет, выдаст прерывание и только тогда читайте-пишите
В EN_AA и EN_RXADDR пишите дефолтные значения. Тоже уже выше писал... У л01 тут какойто косяк, особо не разбирался, сделал "чтоб работало" по дефолту
|
|
|
|
22.09.2010, 15:10
|
|
Частый гость
Регистрация: 20.09.2010
Сообщений: 33
Сказал спасибо: 26
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
90% исходников в интернет вообще не пользуются прерываниями, а опрашивают статус на предмет дошло/пришло. Это меня и сбило с толку. Sparkfun божится, что их код для FOB 100% работает. Перенесу проекты под свои чипы, посмотрю.
__________________
DCC и разные чудеса с ним.
XpressNet оказалась не такая страшная штука, если сравнивать с трансиверами. Но и трансиверы ничего страшного.
|
|
|
|
22.09.2010, 17:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Пользоваться надо не чужими исходниками (неизвестной рабочести), а даташитом. Там все ясно сказано по работе чипа и его прерываниям...
У меня по алгоритму выше система разгоняется в идеальных условиях (расстояние 1...3 метра) до 1600 пакетов в секунду с подтверждением, по 32 байта данных. Используется для перепрошивки (через бутлодырь), 4...6 кБ в АТмега88 в реальных условиях заливаются за пару секунд
|
|
|
|
22.09.2010, 18:48
|
|
Частый гость
Регистрация: 20.09.2010
Сообщений: 33
Сказал спасибо: 26
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Кто-нибудь работал с RF модулями nRF2401A?
Ну код сильно изменен согласно вашим советам и моему понимаю даташита. Распечатал брошюрой. Сейчас хочу расширить обработчик прерываний с семафорами, чтобы не опрашивать сам чип в основном цикле, а только поглядывать на семафор.
__________________
DCC и разные чудеса с ним.
XpressNet оказалась не такая страшная штука, если сравнивать с трансиверами. Но и трансиверы ничего страшного.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:26.
|
|