Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 20.05.2018, 02:47  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,374
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Да мне прерывание одно надо не пропустить. Я в нем контролирую таймер. Если импульс пришёл вовремя, то таймер сбрасывается. Если не вовремя - тикает дальше.
Реклама:
parovoZZ вне форума  
Непрочитано 03.06.2018, 05:12  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,374
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Сообщение от Исбанни Посмотреть сообщение
nRF24L01, да?
А кто как калибрует PLL в режиме передачи? В даташите говорится, что это надо делать каждые 4 мс. В режим приемника перейти? Если выключать питание, то очень долго включаемся обратно.
parovoZZ вне форума  
Непрочитано 03.06.2018, 07:30  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Это где вы такое нашли то у nRF24L01? У него и регистра то такого нету.
Регистр RF_SETUP имеет биты для установки мощности передатчика, для настройки скорости радиообмена (1 или 2 Мбит/с), для включения усилителя приемника и для принудительного включения PLL, которое делается только для теста передачи-приема.
Про "4 мс" дана рекомендация "не оставаться в режиме передатчика более 4 мс за один раз", что в принципе всегда выполняется при передаче одного пакета максимальной длины на минимальной скорости (1 Мбит/с).
То есть как бы общая рекомендация - не передавайте много данных за один раз, когда работаете с передачей без ACK. Расчет времени передачи пакета приведен в даташите.
При работе с ACK после каждого пакета происходит переключение TX-RX и повторная операция PLL lock, поэтому условие "не более 4 мс" всегда выполняется.

Последний раз редактировалось Исбанни; 03.06.2018 в 08:01.
Исбанни вне форума  
Непрочитано 03.06.2018, 16:06  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,374
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
Счастье Re: #include - оптимальное использование директивы

Судя по картинке из даташита, в режим приемника и в режим передатчика (при условии наличия в FIFO данных) мы попадаем через режим RX/TX Settings, в котором происходит калибровка PLL, на что уходит 130 uS. И в течение эти 130 uS ничего с трансивером делать нельзя - просто ждать. У меня сейчас сделано так - сижу в Power Down -› заношу в регистр pwr_up = 1 -› взвожу собаку на 16 мс и ухожу в сон -› через 16 мс просыпаюсь и заношу в FIFO данные, далее следующая конструкция:
Код:
nRF_GO();											
	do{
		nRF_SELECT();
		SPI_WriteByte(nRF_RD_REG(nRF_STATUS));
		Status = SPI_ReadByte(nRF_NOP);
		nRF_DESELECT();
	}while((Status & nRF_IRQ_MASK) == 0);				
	nRF_STOP();
сбрасываю все флаги прерываний

Код:
	
        Buf[0] = Status;									
	SPI_WriteArray(nRF_WR_REG(nRF_STATUS), 1, Buf);
-› заношу в регистр pwr_up = 0 -› ухожу в сон

С активированным ACK и количеством попыток передачи 15 раз через 250 uS всё это работает. Хост ACK не передаёт, поэтому все 15 раз идёт передача пакета. Теперь же хочу передавать пакеты максимально быстро. Получается, что работать надо по такому кругу (без ACK):
сидим в StandByI -› записываем данные в FIFO -› дергаем ногу CE -› не менее, чем через 10 uS ногу CE отпускаем -› если FIFO пуст и мы успели ногу CE отпустить, то круг замкнулся.
И вот тут появляются вопросы. Если FIFO не пуст, нога CE не опущена, в какой режим уйдет трансивер? Опустошит FIFO и уйдет в StandByII? Ну судя по картинке из даташита. Ежели мы попали в StandBYII и отпустили ногу CE, трансивер так и останется в этом режиме?

Как я понял, разница между режимам StandByI и StandByII следующая - в первом режиме для передачи дернуть ногу CE можно импульсом, во втором случае её надо держать. Но к моменту окончания передачи её надо отпустить, чтобы уйти в более экономичный StandByI.

В связи с этим вопрос - если ACK не активирован, то при окончании передачи взведётся ли флаг TX_DS? Ежели отслеживать флаг TX_EMPTY и по нему скидывать CE, то трансивер неизбежно уйдет в StandByII?
Получается, самое надёжное - это дергать CE таймером? Т.к. 130 uS неизбежно уходит на калибровку петли ФАПЧ, то и задний фронт импульса можно подзатянуть по времени.

А что, если поступиться энергопотреблнием и работать по такому кругу:
CE всегда =1, а мы просто закидываем данные в FIFO. Трансивер, судя по картинке, должен сам крутиться по кругу - StandByII -› TX_settings -› TX mode -› StandByII. Т.к. пребывание трансивера в режиме StandByII минимально - буквально то время, в течение которого центральный МК опрашивает флаг TX_EMPTY (либо обработка прерывания IRQ, если флаг TX_DS всё-таки взводится), а львиную долю времени это будет режим TX settings и TX Mode, то и загоняться по поводу энергопотребления не стоит.

Ну вот такие мысли, хоть и мимо темы абсолютно =)
parovoZZ вне форума  
Непрочитано 03.06.2018, 16:25  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Да нет там калибровки, там эти 130 мкс уходят просто на запуск и получение стабильной генерации PLL, как и в любом другом PLL.
А что касается "ждать", то модуль умеет генерировать прерывание TX_DS по окончанию передачи в эфир (и подтверждению, если оно включено).
Короче говоря, разрешаете это прерывание в регистре CONFIG записью 0 в позиции бита MASK_TX_DS, далее как обычно - загружаете по SPI данные payload, переводите CE в высокий, затем в низкий уровень и просто ждете прерывание по физической линии IRQ, когда она перейдет из 1 в 0. По получении этого сигнала читаете регистр статуса (при отправке первой команды, например W_REGISTER, принимаемый обратно по SPI байт будет содержать инфу регистра статуса), в ответе нас интересует бит TX_DS, если он =1, значит, прерывание было вызвано именно этим событием, стираете бит записью 1 в регистре SATUS, ну и переходите к новой записи payload.

Вы сначала наладьте простую связь между двумя модулями, а потом уже будете изобретать сложности.
Исбанни вне форума  
Непрочитано 03.06.2018, 20:56  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,374
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Да второй модуль на малинке и связь с ним есть.

ФАПЧ же цифровой на ряду с синтезатором частоты? А генератор входит в состав ФАПЧ? ГУН же сам по себе.

По второму вопросу сам нашёл:
Цитата:
In standby-II .... .
nRF24L01+ enters standby-II mode if CE is held high on a PTX device with an empty TX FIFO. If a new packet is uploaded to the TX FIFO, the PLL immediately starts and the packet is transmitted after the normal PLL settling delay (130µs).
Ну т.е. бум пробовать.
Ещё только сейчас увидел, что после подачи питания трансивер находится в ресете аж 100 mS.
parovoZZ вне форума  
Непрочитано 03.06.2018, 22:06  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

parovoZZ, таки со сменой предмета обсуждения лучше наверное открыть новую тему - другим интересующимся nRF будет проще искать. К #include продолжение совсем уже не относится. Определитесь с началом и попросите модераторов перенести часть в новую тему.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 04.06.2018, 01:46  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,374
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

А как пожаловаться?
parovoZZ вне форума  
Непрочитано 04.06.2018, 05:32  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

Да просто создайте новую тему "Запуск nRF24L01, проблемы, решения". В принципе, тема интересная, но в инете как-то не шибко то освещена, обрывочно как-то.
Исбанни вне форума  
Непрочитано 04.06.2018, 09:32  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: #include - оптимальное использование директивы

nRF24L01 мы с niXto переживали всю. Там уже живого места не осталось
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
AR_Favorit (05.06.2018)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OLED ssd1306 + STM32f030f4 miwutka Песочница (вопросы новичков) 195 07.01.2019 15:38
AVR Studio + CVAVR: директивы #include SwanSwan AVR 2 30.10.2016 18:50
Светодиоды "Straw Hat" - оптимальное использование mikesmith Отвлекитесь, эмбеддеры! 10 09.03.2014 02:28
usb cdc pic18f14k50 gromovi Proteus, KiCAD и другие ECAD 9 21.04.2013 15:31
В какой программе компелить код (подключение #include ) FedorChek Микроконтроллеры, АЦП, память и т.д 4 04.05.2009 20:00


Часовой пояс GMT +4, время: 23:40.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot