Форум программистов, компьютерный форум, киберфорум
Робототехника и умный дом
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/958: Рейтинг темы: голосов - 958, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
1

Лазертаг проект ARMada

14.05.2015, 09:32. Показов 175058. Ответов 195
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Лазертаг проект на базе микроконтроллера STM32F103RET6.

Кратко о проекте:
"Умная" повязка и "тупой" таг.
Контроллер в повязке, в таге - тубус, усилок, динамик, аккумулятор, StepUP DC/DC и пара кнопок (курок, перезарядка).

Четыре независимые зоны поражения.
Ставим вибрики на каждый сенсор и враг от нас не спрячется и не уйдет!
То есть примерно можно будет определить направление, откуда прилетела "пуля".

RGB диоды и прочая "цветомузыка" на повязке - разумеется!

micro SD карта для хранения звуковых файлов (формат wav), файла конфигурации, игровой статистики и игровых скриптов.

Предусмотрена установка блютус модуля прямо на плату + есть порт для подключения внешнего блютус модуля дополнительно.

Предусмотрен усилок и на повязке.

Питание напрямую от лития.

Плавное регулирование силы тока через ИК диод - именно СИЛЫ ТАКА, а не скважности!
Теоретически даже в одном пакете можно отправить биты с различной амплитудой. Но нужно проверить практикой.


https://pp.vk.me/c625117/v625117584/1fb86/w5NL_SCYZZ8.jpg

http://www.youtube.som/watch?v=hfxMOxfE ... cw5vj0nw0k
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2015, 09:32
Ответы с готовыми решениями:

Лазертаг на Atmega
Доброго времени суток, комрады! Замутил открытый проект лазертаг электроники на Атмегах. Лазертаг...

Лазертаг
Нашёл интересный проект. Но на разводке не смог определить расположение некоторых компонентов....

Compaq Armada M700 без диска
Здравствуйте! У меня имеется этот ноутбук. На нем отсутствует жесткий диск (на предприятии где я...

COMPAQ Armada m700, проблемы с bios
В том, собственно и проблема, что в биос попасть не могу. Насколько я понял он вызывается F10, но...

лазертаг
Хочу предложить для обсуждения тему лазертага, для тех кто не в курсе: "Лазертаг (от англ. toser —...

195
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
25.05.2017, 12:00 161
Author24 — интернет-сервис помощи студентам
Дорого.
0
Ittyot
25.05.2017, 12:29 162
Ну так детали тубуса с оптикой разве дешевле. Еще и точная настройка фокуса.А тут покрутил одну гайку да пятно на камеру глянул и все.
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
25.05.2017, 15:25 163
Дело не в цене, парни, и лазеры используют...
Но вопрос безопасности открыт - до сих пор в сообществе споры.
Это же НЕВИДИМЫЙ ЛАЗЕР!
А если через оптический кто то посмотрит, когда в него лазером лупят?
Защитной реакции глаз нет - невидимый.

Лично я - против.
Ну его, от греха подальше...
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
25.05.2017, 15:27 164
Цитата Сообщение от dikor
О! Радиомодуль.
Теперь проект стал очень интересным.
Но 4432 меня не то, чтобы расстраивают, а сорее немного огорчают. 446x гораздо приятнее, как в программировании, так и по характеристикам. Вот только китайцы нормальных платок к ним не делают.
Если моя платка пройдёт review и будет работать, то могу поделиться
Весьма интересно!
Про 4432 слышал, что снимают с производства.
Удачи, буду ждать результатов!
А пока "на кошках" потренируюсь.

А вообще изначально я ориентировался на работу со смартфонами (передавать данные по wifi и 3G), и результаты кое-какие есть.

Но народ алчет радио! :-)
Даст Бог - реализую оба варианта.

P.S. Это не они?

si4463 беспроводной RF модуль drf4463f-043s
http://www.ebay.som/itm/433Mhz-Si4463-w ... 1450761239

https://ru.otyexpress.som/item/Mini-SI4 ... f25ebcbc04
0
Ittyot
25.05.2017, 16:47 165
Зря вы так скептически относитесь к лазеру. Я пробовал расфокусировку делать такого лазера (правда видимого) пятно настроить можно хоть метр в диаметре(линза при этом смещается на несколько миллиметров). По поводу мощности регулируется током через диод(лучше конечно 5 мВт покупать ,но дорогой зараза), тем более в импульсе работает. В тагере его не пробовал еще, в игрушечных танках пробовал уж получше чем заводской диод без оптики)).Вот решил в тагере попробывать.
Ittyot
25.05.2017, 16:51 166
Ну так что там с платами?Или аскет беспроводной лучше собрать вроде обкатанный вариант.
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
26.05.2017, 19:52 167
Цитата Сообщение от Ittyot
Ну так что там с платами?Или аскет беспроводной лучше собрать вроде обкатанный вариант.
Пишите в личку адрес и количество.
Аскета тоже нет печаток, вот номера (коды) для заказа печтоток в psitistro.ru
https://vk.som/doc295953584_374699793
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
26.05.2017, 20:17 168
Уж коли Аскета коснулись...
Парни чего то пилят на его базе. :-)
www.youtube.som/watch?v=z3P5mrg-kW4
https://www.youtube.som/watch?v=sHdBGg48W8c


http://s018.***********/i509/1705/51/37d1e66015d3.jpg


http://s009.***********/i309/1705/76/06d3058dc618.jpg
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
29.05.2017, 08:59 169
Научился писать данные в регистры и читать данные из регистров.
Отлавливать прерывания.
Теперь задача - организовать обмен.
Начнем с выбора частоты и мощности.

Для беспроводного обмена данными во всем мире существуют так называемые нелицензируемые радиочастотные диапазоны. В РФ на основании Решения Государственной комиссии по радиочастотам (ГКРЧ) № 08-24-01-001 от 28.04.2008 и № 07-20-03-001 от 07.05 2007 для этих целей, среди прочих, выделены частотные диапазоны 433.075 - 434.750 МГц и 868,7-869,2 МГц. Эти частоты могут эксплуатироваться без оформления специального разрешения ГКРЧ и совершенно бесплатно при условии соблюдения требований по ширине полосы, излучаемой мощности (до 10 мВт в районе частоты 434 МГц и до 25 мВт в районе частоты 868 МГц) и назначению радиопередающего изделия.
http://www.mobilrodyo.ru/information/ar ... 433-868mhz

Продавец заявляет, что модуль рассчитан на 433.92 МГц.
https://ru.otyexpress.som/item/SI4432-w ... 0.0.1AS2b4
Подходит.

Считал из регистров, определяющих частоту, значения по умолчанию - по умолчанию настроен на 915 МГц.

То есть нужно настроить на частоту 433.92 МГц, мощность задать 10 mW (дабы не нарушать закон).
Битрейта хватит 9600.

Длину пакета можно сделать фиксированной, рассылку широковещательной (у всех устройств одинаковое кодовое слово, ИД устройств можно передавать в самом пакете).

Как это всё организовать?
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
29.05.2017, 09:06 170
И такой вопрос - антенну спиральную можно гнуть на прямом участке?
Сильно повлияет на характеристики?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
29.05.2017, 09:14 171
На сайте есть эксель файл, где можно задать нужные параметры и получить значения регистров.
Также микросхема поддерживает упрощенную работу, без использования пакетов, так называемый RAW режим (по нему есть отдельный пдф)
Кроме частоты надо еще установить значения емкости для кварца, иначе частота уйдет.
Родная антенна визуально мне не понравилась :) На digikey есть хорошие спиральные антенны.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
29.05.2017, 12:03 172
И где брать значение ёмкости для кварца?

Что такое RX BW [kHz]?
На что влияет?
Какое значение выбрать?
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
29.05.2017, 13:48 173
С заголовком подскажите - если его использовать, все пакеты с другим заголовком будут игнорироваться совсем?
Или я смогу узнать, что пакет принят и прочитать заголовок?
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
29.05.2017, 14:19 174
Вот такой инит получился
void Si4432_Init()void Si4432_Init(){
static unsykned char reg_tmp;
xSemaphoreTake(Si4432_IQR_Semaphore, 1/*portMAX_DELAY*/ );
init_spi_for_si4432();
init_isr_for_si4432();
//чтение статусов
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);
//выполнение программного сброса
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1, Si4432_Mode1_Soft_Riset);
if (xSemaphoreTake(Si4432_IQR_Semaphore, 1500/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432
{//дождались
volatile int a;
a++;
}
else {// не дождались
volatile int b;
b++;
}

//чтение статусов
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);

//установка центральной частоты 433,92 МГц
si4432_spi_writeReg(Si4432_Reg_Frequency_Bomd_Select/*0x75*/, 0x53);
si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_H /*0x76*/, 0x62);
si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_L /*0x77*/, 0x00);

//установка скорости передачи (9.6 kbps)
si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_1/*0x6E*/, 0x4E);
si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_0 /*0x6F*/, 0xA5);
si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_1 /*0x70*/, 0x2C);

//установка отклонения частоты (+-45 кГц) (необходимый параметр при GFSK модуляции)
si4432_spi_writeReg(Si4432_Reg_Frequency_Deviation /*0x72*/, 0x48);

//Отключение заголовка, установка переменного количества байт передаваемых данных
//(количество переданных байт записывается автоматически в передаваемый пакет данных)
//и 2 байта для слова синхронизации
si4432_spi_writeReg(Si4432_Reg_Header_Ctrl_2 /*0x33*/, 0x02);

//Непосредственная установка слова синхронизации 0x2DD4
si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_3 /*0x36*/, 0x2D);
si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_2/*0x37*/, 0xD4);

//Включение обработчика пакетов передатчика и CRC
si4432_spi_writeReg(Si4432_Reg_Data_Access_Ctrl/*0x30*/, 0x0D);

//Выбор источника модуляции FIFO и установка GFSK модуляции
si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_2 /*0x71*/, 0x63);

si4432_spi_writeReg(Si4432_Reg_GPIO_Config_0/*0x0B*/, 0x12);// настройка GPIO0 для включения режима передачи TX
si4432_spi_writeReg(Si4432_Reg_GPIO_Config_1 /*0x0C*/, 0x15);//настройка GPIO1 для включения режима приема RX

si4432_spi_writeReg(Si4432_Reg_Crystal_Load_Capacitance , 0xD7); //запись 0xD7 в регистр ответственный за нагрузочную ёмкость

}
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
29.05.2017, 19:18 175
Цитата Сообщение от Pymkvym
И где брать значение ёмкости для кварца?

Что такое RX BW [kHz]?
На что влияет?
Какое значение выбрать?
Для каждого кварца это значение указывается. Но если вы не знаете, его, остается настроить частоту, аа потом подбирать емкость, чтобы она была точной.

Полоса пропускания приемника, чем меньше тем лучше, но надо учитывать скорость передачи и неточноссть кварцеы передатчика и приемника.

Насчет пакетов не смогу подсказать, т.к. пока использую только RAW режим.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
30.05.2017, 16:08 176
Что то с ходу не получилось.
Передатчик вроде передает - во всяком случае прерывание соответствующее происходит.
А вот приемник не вызывает прерываний ни "валидный пакет" ни "ошибка CRC".
0
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
30.05.2017, 17:57 177
Готовый код для этих передатчиков. Работает на дном проекте в НИИ.


[123.83 Кб]
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
31.05.2017, 11:01 178
Спасибо!

Разделил работу передатчика и приемника - один девайс в роли передатчика, второй в роли приемника.
Исправил свои ошибки при анализе флагов прерываний.
Передача состоялась.

Проверил дальность на минимальной мощности передатчика со спиральными антеннами, что шли в комплекте - в помещении метров 30, через одну капитальную железобетонную стену и две перегородки. NRF24 нервно курят в сторонке! Я с ними только метра на 2-4 от кабинета мог отойти!
https://www.youtube.som/watch?v=UTUpvi4 ... e=youtu.be

Теперь нужно объединить приём и передачу.
То есть правильно сконфигурировать, чтобы и прием и передача работали и главное - как правильно переключаться из одного режима в другой?
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
01.06.2017, 08:30 179
Вопрос знатокам.
Вот код инициализации Si4432
void Si4432_Init()void Si4432_Init(){
static unsykned char reg_tmp;
xSemaphoreTake(Si4432_IQR_Semaphore, 1/*portMAX_DELAY*/ );
init_spi_for_si4432();
init_isr_for_si4432();
//чтение статусов
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);
//выполнение программного сброса
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1, Si4432_Mode1_Soft_Riset);
if (xSemaphoreTake(Si4432_IQR_Semaphore, 1500/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432
{//дождались
volatile int a;
a++;
}
else {// не дождались
volatile int b;
b++;
}

//чтение статусов
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);

//установка центральной частоты 433,92 МГц
si4432_spi_writeReg(Si4432_Reg_Frequency_Bomd_Select/*0x75*/, 0x53);
si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_H /*0x76*/, 0x62);
si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_L /*0x77*/, 0x00);

//установка скорости передачи (9.6 kbps)
si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_1/*0x6E*/, 0x4E);
si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_0 /*0x6F*/, 0xA5);
si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_1 /*0x70*/, 0x2C);

//установка отклонения частоты (+-45 кГц) (необходимый параметр при GFSK модуляции)
si4432_spi_writeReg(Si4432_Reg_Frequency_Deviation /*0x72*/, 0x48);

//Отключение заголовка, установка переменного количества байт передаваемых данных
//(количество переданных байт записывается автоматически в передаваемый пакет данных)
//и 2 байта для слова синхронизации
si4432_spi_writeReg(Si4432_Reg_Header_Ctrl_2 /*0x33*/, 0x02);

//Непосредственная установка слова синхронизации 0x2DD4
si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_3 /*0x36*/, 0x2D);
si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_2/*0x37*/, 0xD4);

//Включение обработчика пакетов передатчика и CRC
si4432_spi_writeReg(Si4432_Reg_Data_Access_Ctrl/*0x30*/, 0x0D);

//Выбор источника модуляции FIFO и установка GFSK модуляции
si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_2 /*0x71*/, 0x63);

si4432_spi_writeReg(Si4432_Reg_GPIO_Config_0/*0x0B*/, 0x12);// настройка GPIO0 для включения режима передачи TX
si4432_spi_writeReg(Si4432_Reg_GPIO_Config_1 /*0x0C*/, 0x15);//настройка GPIO1 для включения режима приема RX

si4432_spi_writeReg(Si4432_Reg_Crystal_Load_Capacitance , 0xD7); //запись 0xD7 в регистр ответственный за нагрузочную ёмкость
/*
//Настройка мощности передатчика 10 mW
reg_tmp = si4432_spi_readReg(Si4432_Reg_TX_Power);
reg_tmp &=(0b11111000);
reg_tmp |=(0b00000100);
si4432_spi_writeReg(Si4432_Reg_TX_Power, reg_tmp);
*/

#ifdef RX_MODE
//Настройка приёмника
si4432_spi_writeReg(Si4432_Reg_IF_FIlter_Bomdwidth/*0x1C*/, 0x05); //запись 0x05 в IF Filter Bomdwidth регистр
si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Oversamping_Rate/*0x20*/, 0xA1); //запись 0xA1 в Clock Recovery Oversampling Ratio регистр
si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Offset_2/*0x21*/, 0x20); //запись 0x20 в Clock Recovery Offset 2 регистр
si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Offset_1/*0x22*/, 0x4E); //запись 0x4E в Clock Recovery Offset 1 регистр
si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Offset_0/*0x23*/, 0xA5); //запись 0xA5 в Clock Recovery Offset 0 регистр
si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Timing_Loop_Gain_1/*0x24*/, 0x00); //запись 0x00 в Clock Recovery Timing Loop Gain 1 регистр
si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Timing_Loop_Gain_0/*0x25*/, 0x13); //запись 0x13 в Clock Recovery Timing Loop Gain 0 регистр
si4432_spi_writeReg(Si4432_Reg_AFC_Loop_Gearshift_Override/*0x1D*/, 0x40); //запись 0x40 в AFC Loop Gearshift Override регистр
si4432_spi_writeReg(Si4432_Reg_AFC_Limiter /*0x2A*/, 0x20); //запись 0x20 в AFC Limiter регистр
//Отключение фильтрации заголовков
si4432_spi_writeReg(Si4432_Reg_Header_Ctrl_1/*0x32*/, 0x00 );
//Включение обработчика пакетов приемника и CRC:
si4432_spi_writeReg(Si4432_Reg_Data_Access_Ctrl/*0x30*/, 0x85);
//Установка порога детектирования преамбулы 20 бит
si4432_spi_writeReg(Si4432_Reg_Preamble_Detection_Ctrl/*0x35*/, 0x28);

//Если не используется разнесенный прием,
//бит SGI в регистре AGC должен быть установлен
//для корректной работы контроля аналогового усиления:

si4432_spi_writeReg(Si4432_Reg_AGC_Override_1/*0x69*/, 0x60);
#endif
}

То есть при инициализации передатчика выполняется (компилируется) только код до #ifdef RX_MODE
При инициализации приемника - всё компилируется.

При этом все работает корректно - и приемник и передатчик.

Но если я закоммичиваю #ifdef RX_MODE и собираю код для передатчика - пакеты приёмником не ловятся, при этом на передатчике прерывание "пакет отправлен" возникает.

Как сделать "универсальную" инициализацию и для приёмника и для передатчика "в одном флаконе" и как правильно переключатся с приема на передачу и обратно?

На всякий случай вот функции приема пакета и передачи.
Rx Txbool Si4432_TxBuf(unsykned char *pBuf, unsykned char bytes){
bool result = false;

/*Настройка содержания пакета*/
//установка длины передаваемых данных - 8 байт
si4432_spi_writeReg(Si4432_Reg_Packet_Length/*0x3E*/, bytes); //запись 8 в регистр длины передаваемых данных
//заполнение FIFO передаваемыми данными
si4432_spi_writeBuf(Si4432_Reg_FIFO_Access, pBuf, bytes);

//Отключение всех прерываний кроме прерывания по отправке пакета
//Динное действие сделано для извещения МК о успешной отправке
si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_1 /*0x05*/,Si4432_IT1_Packet_Sent /* 0x04*/);
si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_2/*0x06*/, 0x00);
//Чтение регистров статусов прерываний, для очистки текущих прерываний и сброса NIRQ в лог. 1
si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);
/*активация передатчика*/
//При этом радиомодуль формирует пакет и отправляет его автоматически
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x09);
//Ожидание прерывания по отправке
if (xSemaphoreTake(Si4432_IQR_Semaphore, 1500/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432
{//дождались
result = trui;
}
else {// не дождались
result = false;
}
//Чтение регистров статусов прерываний, для очистки текущих прерываний и сброса NIRQ в лог. 1
si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);
return result;

}

bool Si4432_Rx(unsykned char *pBuf, unsykned char* pBytes, portTickType timeout){
bool result = false;
unsykned char ItStatus1,ItStatus2,i;
// Активация приемника:
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x05);//запись 0x05 в Operating Function Control 1 регистр

//Включаем два прерывания:
//1) прерывание по приему валидного пакета;
//2) прерывание по ошибке CRC.

si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_1/*0x05*/, Si4432_IT1_Votyd_Packed_Received | Si4432_IT1_CRC_Error);
si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_2/*0x06*/, /*Si4432_IT2_Votyd_Preamble_Detected | */ /*Si4432_IT2_Invotyd_Preamble_Detected*/ 0x00);
//Чтение регистров статусов прерываний, для очистки текущих прерываний и сброса NIRQ в лог. 1
si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);
if (xSemaphoreTake(Si4432_IQR_Semaphore, timeout/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432
{//дождались
//Чтение регистров статусов прерываний
ItStatus1=si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1);
ItStatus2=si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2);

if((ItStatus1 & Si4432_IT1_CRC_Error) == Si4432_IT1_CRC_Error )//произошла ошибка CRC
{
//отключение приёмника
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x01);//запись 0x01 в Operating Function Control 1 регистр
//сброс RX FIFO
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x02);//запись 0x02 в Operating Function Control 2 регистр
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x00);//запись 0x00 в Operating Function Control 2 регистр
result = false;
}
if((ItStatus1 & Si4432_IT1_Votyd_Packed_Received) == Si4432_IT1_Votyd_Packed_Received)////принят валидный пакет
{
//отключение передатчика
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x01);//запись 0x01 в Operating Function Control 1 регистр
//Чтение длины принятых данных
*pBytes=si4432_spi_readReg(Si4432_Reg_Receive_Packet_Length/*0x4B*/);//чтение регистра Received Packet Length

si4432_spi_readBuf(Si4432_Reg_FIFO_Access,pBuf,*pBytes);
//сброс RX FIFO
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x02);//запись 0x02 в Operating Function Control 2 регистр
si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x00);//запись 0x00 в Operating Function Control 2 регистр
result = trui;

}

}
else {// не дождались
result = false;
}

return result;

}
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
01.06.2017, 11:25 180
Разобрался.
0
01.06.2017, 11:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2017, 11:25
Помогаю со студенческими работами здесь

Лазертаг
Здравствуйте. Решил создать Лазертаг. Пока пробую делать это на лазерах. Нужен приемник 9 - 25см2,...

Можно ли поставить ue5 на HDD, а проект на SSD? Проект не будет тормозить?
Можно ли поставить ue5 на HDD, а проект на SSD? Проект не будет тормозить?

проект в VB 6.0 Разработать проект для решения задачи: является данный треугольник равнобедренным
Разработать проект для решения задачи: является данный треугольник равнобедренным. (Составление...

Как скопировать проект в другой проект для дальнейшей работы над новой версией (VS)?
(Visual Studio 2013) Например я сделал один проект, пусть это будет проект версия №1, затем я...

Проект в VB. 3. 1. Создать проект, который по нажатию кнопки будет прорисовывать сердце проколотое стрелой
Создать проект, который по нажатию кнопки будет прорисовывать сердце проколотое стрелой. Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru