NRF24L01+ пример инициализации

Форум, с конкретными примерами и реальными задачами и их решением.
Пишите в личку (admin, LEV-PRAV, mim) ссылки на темы, достойные быть скопированы сюда.

Модератор: Иван Николаевич

Re: NRF24L01+ пример инициализации

Сообщение Вячеслав (Вячеслав) » 21 июн 2017, 13:54

Добрый день. Вопрос по FC5: размерность констант (глобальных и локальных) задана как int.
Как задать её байтовой для уменьшения кода?
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Суперконсульт
Суперконсульт
Информация о пользователе

Re: NRF24L01+ пример инициализации

Сообщение andrewproffi (Андрей) » 21 июн 2017, 14:20

это какие переменные там типа int? :o
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Разработчик
Разработчик
Информация о пользователе

Re: NRF24L01+ пример инициализации

Сообщение Вячеслав (Вячеслав) » 22 июн 2017, 04:47

Путь: правка переменных-локальные - constants. Задать константу размерностью в байт не получилось. Вопрос остался.
constant_int.jpg

Пока использую в макросах локальные переменные, там задаю нужную размерность. Просто их количество из-за этого возрастает. Скажем: команда FLUSH_RX -это просто код 0xE2. Хотел сделать из неё константу размерностью байт и засылать в линию по её имени.
Нашел таблицы кодов для модуля nRF24L10, выкладываю здесь.
nRF24L01_tabl.rar
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: NRF24L01+ пример инициализации

Сообщение andrewproffi (Андрей) » 22 июн 2017, 05:05

в моей программе не использовались переменные типа INT насколько мне известно.
эти таблицы - карта регистров из даташита.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Разработчик
Разработчик
Информация о пользователе
Вернуться наверх

Re: NRF24L01+ пример инициализации

Сообщение mim (mim) » 22 июн 2017, 06:14

Когда вы уже научитесь изучать (читать) азы, а потом уже философствовать (на несколько страниц) на темы в которых мало что смыслите...
Сколько я уже вам всем писал - изучайте исходники, смотрите что получается, какой результат компиляции, смотрите Си, смотри ассемблер, заставляйте себя думать... Для того чтобы научиться "смыслить" (мыслить) нужно много читать и пытаться делать собственный анализ...
Начинайте отсюда define си Что и как определяется... затем изучаем какой компилятор используется (возможны нюансы). Вы через #define определили константы... Памяти (программ) будет взято столько сколько нужно для константы 10 - один байт, 1000 - два байта - смотрим ассемблер простого примера
Код: выделить все
#define FCV_MIM (1000)
#define FCV_TRUE (1)
#define FCV_FALSE (0)
MX_UINT16 FCV_Q;
while (1)
    {
        //Calculation
        //Calculation:
        //  q = q + mim
        FCV_Q = FCV_Q + FCV_MIM;
    }

Изначально видим что размерности константы нет!!! И не нужно смотреть (слепо верить) что там наплодили Матриксы.... Компилятор сам определит...
Далее в ассемблере
Код: выделить все
main
; { main ; function begin
   BSF STATUS, RP0
   CLRF gbl_ansel
   MOVLW 0x07
   BCF STATUS, RP0
   MOVWF gbl_cmcon0
   MOVLW 0xC0
   BSF STATUS, RP0
   MOVWF gbl_option_reg
label1
   MOVLW 0xE8
   BCF STATUS, RP0
   ADDWF gbl_FCV_Q, F
   MOVF gbl_FCV_Q+D'1', F
   MOVLW 0x03
   BTFSC STATUS,C
   INCF gbl_FCV_Q+D'1', F
   ADDWF gbl_FCV_Q+D'1', F
   GOTO   label1
; } main function end

Видим строки MOVLW 0xE8 и MOVLW 0x03 = 0х03E8 = 1000
Самостоятельно просмотрите варианты с другими размерностями констант... Сраните что происходит в PICах и AVRах...

В зависимости от значения константы компилятор присваивает ей тот или иной тип. С помощью суффиксов можно переопределить тип константы:
U или u представляет целую константу в беззнаковой форме (unsigned);
F (или f) позволяет описать вещественную константу типа float;
L (или l) позволяет выделить целой константе (long int);
L (или l) позволяет описать вещественную константу типа long double
Размерности определяются типом компилятора и могут отличаться..., например
Код: выделить все
 #define A 280U   // unsigned int
#define B 280LU  // unsigned long int
#define C 280    // int (long int)
#define D 280L   // long int
#define K 28.0   // double
#define L 28.0F  // float
#define M 28.0L  // long double




ЗЫ Использование #define улучшает читабельность и понятийность (со временем) программы, через время вы все забудите что такое 1000, а то что в программе будет написано, например R_REGISTER - сразу напомнит что это чтение регистра (команда чтения)...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: NRF24L01+ пример инициализации

Сообщение Вячеслав (Вячеслав) » 22 июн 2017, 09:32

mim писал(а):Когда вы уже научитесь изучать (читать) азы

Спасибо, что тратишь на нас своё время. Не волнуйся так. Железо я прикупил, это - главное.
В модуле nRF24 много регистров управления, имен разрядов в регистрах - ещё больше, хотелось бы упростить создание программы. В остальном ты прав.
andrewproffi писал(а):в моей программе не использовались переменные типа INT

Не о переменных был вопрос, о константах.
andrewproffi писал(а):эти таблицы - карта регистров из даташита

Описание, назначение на русском.
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: NRF24L01+ пример инициализации

Сообщение andrewproffi (Андрей) » 22 июн 2017, 11:46

Вячеслав писал(а):Описание, назначение на русском.

http://aterlux.ru/article/nrf24l01p
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Разработчик
Разработчик
Информация о пользователе
Вернуться наверх

Re: NRF24L01+ пример инициализации

Сообщение Вячеслав (Вячеслав) » 22 июн 2017, 15:33

Это есть у меня. Иногда 4 таблицы под носом удобнее чем 22 стр.текста. А таблиц таких там нет.
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: NRF24L01+ пример инициализации

Сообщение Вячеслав (Вячеслав) » 30 сен 2017, 06:34

Очередной тест эфирной связи через nRF24L01. Работает в железе в пределах квартиры.
Нажимаешь кнопку на передатчике и 4 байта улетели. Приемник (если он включен) ловит байты и индицирует их на LCD16x2. Контроллеры - какие были, кнопка на приемнике и датчики на передатчике для развития проекта.
Выкладываю схемы подключения в Proteus 7.10, макрос для nRF24L01 и урезанный компонент аппаратного SPI для PIC. Использую FC for PICmicro V5.5….
Проект потребовал усилий от переученного, сильно не ругайте старика. Еще потребуется заняться экономным по питанию режимом работы трансиверов и другими приключениями.
p16f88_4byte_nRF24_TX.rar

p16f874A_nRF24_RX.rar

FC5_PIC_SPI_LegacySHORT.rar
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Пред.

Вернуться в Готовые решения и примеры

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей