#антенны
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6⚡2😎2❤1🔥1👾1
Media is too big
VIEW IN TELEGRAM
#новое
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2🤝2🆒2
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉5❤2👾2👍1🍾1😎1
Media is too big
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1😁1😎1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2❤🔥1🤩1🤓1🆒1
Media is too big
VIEW IN TELEGRAM
👍7⚡3👏2🔥1🏆1🫡1
Media is too big
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤬11😁3💩3👍1🤯1🤡1💯1🦄1😎1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3👎1🤓1🆒1
для интересующихся:
0x8F4320 => 1000 1111 0100 0011 0010 0000
разворачиваем каждые 4 бита
1000 1111 0100 0011 0010 0000 => 0001 1111 0010 1100 0100 0000
Получение первых 4 битов: Двоичное: 0001 Десятичное: 1
Получение оставшихся 20 бит: Двоичное: 1111 0010 1100 0100 0000 Десятичное: 1 * 2^19 + 1 * 2^18 + 1 * 2^17 + 1 * 2^16 + 0 * 2^15 + 0 * 2^14 + 1 * 2^13 + 0 * 2^12 + 1 * 2^11 + 1 * 2^10 + 0 * 2^9 + 0 * 2^8 + 1 * 2^7 + 0 * 2^6 + 0 * 2^5 + 1 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 0 * 2^0 Десятичное: 524288 + 262144 + 131072 + 65536 + 0 + 0 + 4096 + 0 + 2048 + 1024 + 0 + 0 + 128 + 0 + 0 + 16 + 0 + 0 + 0 + 0 Десятичное: 983040
все по даташиту.
#филин
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡5🤓2👨💻2👾2
ДронЗавод
Как рассчитать синтезатор частоты RTC6715: пример для частоты 5386 MHz
В этом посте мы рассмотрим, как с помощью шины SPI настроить синтезатор частоты на чипе RTC6715 для получения частоты 5386 MHz. Мы отправляем данные по шине SPI в 25-битном формате, который включает в себя адрес, бит чтения/записи и сами данные.
Шина SPI и структура данных
На шине SPI данные передаются в последовательном виде. В нашем случае, данный поток состоит из:
4 бит адреса
1 бит чтения/записи (write = 1)
20 бит данных
Порядок передачи: 4 бита адреса, 1 бит чтения/записи, 20 бит данных.
Значение данных
ADDRESS (0x01) - Синтезатор регистра B
R/W (1) - Запись (Write)
DATA (0000 0010 1010 0000 0101) - Данные синтезатора
Разбиение данных регистра
Регистры синтезатора разбиваются следующим образом:
SYN_RF_N_REG [12:0]: первые 13 бит данных
SYN_RF_A_REG [6:0]: последние 7 бит данных
Значения
N (10-битное значение): 00001010100 (84 в десятичной форме)
A (7-битное значение): 0101 (5 в десятичной форме)
Формула расчета частоты
С помощью этих значений и следующих параметров системы мы сможем рассчитать частоту:
FLO (Частота локального осциллятора)
FREF (Частота опорного осциллятора = 1 MHz)
R = 8 (Делитель частоты)
FLO = 2 * (N * 32 + A) * (FREF / R)
Расчет частоты
Подставим значения:
Итог
Таким образом, данные, отправленные по шине SPI: 0001 1 0000 0010 1010 0000 0105, настраивают синтезатор RTC6715 на получение частоты локального осциллятора (FLO) равной 5386 MHz.
Эту технику можно использовать для настройки других частот путем изменения регистров SYN_RF_N_REG и SYN_RF_A_REG.
Надеюсь, это руководство было полезным! Не стесняйтесь задавать вопросы или предоставлять комментарии.
В этом посте мы рассмотрим, как с помощью шины SPI настроить синтезатор частоты на чипе RTC6715 для получения частоты 5386 MHz. Мы отправляем данные по шине SPI в 25-битном формате, который включает в себя адрес, бит чтения/записи и сами данные.
Шина SPI и структура данных
На шине SPI данные передаются в последовательном виде. В нашем случае, данный поток состоит из:
4 бит адреса
1 бит чтения/записи (write = 1)
20 бит данных
Порядок передачи: 4 бита адреса, 1 бит чтения/записи, 20 бит данных.
0001 1 0000 0010 1010 0000 0101
Значение данных
ADDRESS (0x01) - Синтезатор регистра B
R/W (1) - Запись (Write)
DATA (0000 0010 1010 0000 0101) - Данные синтезатора
Разбиение данных регистра
Регистры синтезатора разбиваются следующим образом:
SYN_RF_N_REG [12:0]: первые 13 бит данных
0000 0010 1010 0SYN_RF_A_REG [6:0]: последние 7 бит данных
000 0101Значения
N (10-битное значение): 00001010100 (84 в десятичной форме)
A (7-битное значение): 0101 (5 в десятичной форме)
Формула расчета частоты
С помощью этих значений и следующих параметров системы мы сможем рассчитать частоту:
FLO (Частота локального осциллятора)
FREF (Частота опорного осциллятора = 1 MHz)
R = 8 (Делитель частоты)
FLO = 2 * (N * 32 + A) * (FREF / R)
Расчет частоты
Подставим значения:
FLO = 2 * (84 * 32 + 5) * (8 MHz / 8)
FLO = 2 * (2688 + 5) * 1 MHz
FLO = 2 * 2693 MHz
FLO = 5386 MHz
Итог
Таким образом, данные, отправленные по шине SPI: 0001 1 0000 0010 1010 0000 0105, настраивают синтезатор RTC6715 на получение частоты локального осциллятора (FLO) равной 5386 MHz.
Эту технику можно использовать для настройки других частот путем изменения регистров SYN_RF_N_REG и SYN_RF_A_REG.
Надеюсь, это руководство было полезным! Не стесняйтесь задавать вопросы или предоставлять комментарии.
👍6⚡5👀3🤯1🌚1🤓1👨💻1🙉1
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡5🤯1🤓1👨💻1
Media is too big
VIEW IN TELEGRAM
📡 Сканер Частот "ФИЛИН" 📡
Представляем "ФИЛИН" – сканер для мониторинга радиочастотных диапазонов 1.2 ГГц, 2.4 ГГц и 5.8 ГГц.
🚀 Roadmap - что планируем реализовать
Основные Особенности:
Многочастотное Сканирование:
Независимое сканирование всех трёх диапазонов.
Высокая точность и надежность обнаружения сигналов.
Регулярное Обновление:
Использует RTOS (Real-Time Operating System) для постоянного обновления данных.
Настройки Порогов Сигнала:
Возможность устанавливать пороги сигналов для каждого диапазона.
Функция Мьюта:
Возможность отключения нежелательных диапазонов.
Сброс к Заводским Настройкам:
Быстрое возвращение к исходной конфигурации при необходимости.
Технические Характеристики:
Частотные Диапазоны: 1.2 ГГц, 2.4 ГГц, 5.8 ГГц.
Дисплей: OLED.
Питание: встроенная lion батарея выход под power bank.
#филин
Представляем "ФИЛИН" – сканер для мониторинга радиочастотных диапазонов 1.2 ГГц, 2.4 ГГц и 5.8 ГГц.
🚀 Roadmap - что планируем реализовать
Основные Особенности:
Многочастотное Сканирование:
Независимое сканирование всех трёх диапазонов.
Высокая точность и надежность обнаружения сигналов.
Регулярное Обновление:
Использует RTOS (Real-Time Operating System) для постоянного обновления данных.
Настройки Порогов Сигнала:
Возможность устанавливать пороги сигналов для каждого диапазона.
Функция Мьюта:
Возможность отключения нежелательных диапазонов.
Сброс к Заводским Настройкам:
Быстрое возвращение к исходной конфигурации при необходимости.
Технические Характеристики:
Частотные Диапазоны: 1.2 ГГц, 2.4 ГГц, 5.8 ГГц.
Дисплей: OLED.
Питание: встроенная lion батарея выход под power bank.
#филин
🔥11👍5🎉2🍾2😍1🏆1
🛠 Важность Писать Читаемый Код 🛠
Привет, коллеги-разработчики! Сегодня хотим поговорить о важности написания простого и читаемого кода. В мире программирования, читаемость кода имеет огромное значение. Это не только облегчает процесс отладки и поддержки, но и делает наш код более понятным для других разработчиков.
📡 Наш Подход 📡
На скриншоте приведён ключевой метод из прошивки нашего сканера частот "ФИЛИН". Этот метод отвечает за несколько важных задач: обновление данных всех диапазонов частот, вычисление максимального RSSI, обновление временных меток всех диапазонов, агрегация данных для отображения на интерфейсе, сглаживание значений с помощью скользящего окна, отсечка значений по среднеквадратичному отклонению, установка уведомлений и состояний устройства на основе текущих данных и предупреждений, проверка состояний всех диапазонов на наличие активных предупреждений.
Этот код еще претерпит множество изменений, но он должен оставаться понятным для всех, кто будет с ним работать.
🔍 Почему это важно?
1. 📚 Читаемость и Понятность: Хорошо структурированный код легко читается и понимается, даже если вы видите его впервые.
2. 🛠 Отладка и Поддержка: В явном коде легче находить и исправлять ошибки, добавлять новые функциональности.
3. 📈 Совместная Работа: Когда ваша команда растет, читаемый код помогает новым разработчикам быстро включаться в работу.
4. 🎯 Надежность: Читаемый код снижает вероятность появления багов и упрощает тестирование.
Создавайте программы, которыми будете гордиться! Пишите читаемый код, снижайте технический долг и делайте мир программирования лучше!
#филин
Привет, коллеги-разработчики! Сегодня хотим поговорить о важности написания простого и читаемого кода. В мире программирования, читаемость кода имеет огромное значение. Это не только облегчает процесс отладки и поддержки, но и делает наш код более понятным для других разработчиков.
📡 Наш Подход 📡
На скриншоте приведён ключевой метод из прошивки нашего сканера частот "ФИЛИН". Этот метод отвечает за несколько важных задач: обновление данных всех диапазонов частот, вычисление максимального RSSI, обновление временных меток всех диапазонов, агрегация данных для отображения на интерфейсе, сглаживание значений с помощью скользящего окна, отсечка значений по среднеквадратичному отклонению, установка уведомлений и состояний устройства на основе текущих данных и предупреждений, проверка состояний всех диапазонов на наличие активных предупреждений.
Этот код еще претерпит множество изменений, но он должен оставаться понятным для всех, кто будет с ним работать.
🔍 Почему это важно?
1. 📚 Читаемость и Понятность: Хорошо структурированный код легко читается и понимается, даже если вы видите его впервые.
2. 🛠 Отладка и Поддержка: В явном коде легче находить и исправлять ошибки, добавлять новые функциональности.
3. 📈 Совместная Работа: Когда ваша команда растет, читаемый код помогает новым разработчикам быстро включаться в работу.
4. 🎯 Надежность: Читаемый код снижает вероятность появления багов и упрощает тестирование.
Создавайте программы, которыми будете гордиться! Пишите читаемый код, снижайте технический долг и делайте мир программирования лучше!
#филин
👍11🔥1🫡1
Media is too big
VIEW IN TELEGRAM
🌊 Реализация Диаграммы "Водопад" в Нашем Сканере Частот "ФИЛИН" 🌊
Привет, коллеги! Сегодня хотим поделиться с вами тем, как мы реализовали диаграмму "Водопад" в нашем сканере частот "ФИЛИН". Диаграмма "Водопад" позволяет визуализировать изменения уровня сигнала (RSSI) с течением времени, отображая данные в виде движущегося графика.
📋 Цель:
Создать визуализацию, которая покажет изменения RSSI (Received Signal Strength Indicator) в режиме реального времени, перемещая данные вверх по экрану, подобно движению воды в водопаде.
🛠 Как мы это сделали:
Мы использовали библиотеку TFT_eSPI для работы со спрайтами и отображения данных на экране. Далее, применили класс WaterfallSprite, который наследуется от TFT_eSprite и добавили в него метод drawWaterfall для отрисовки диаграммы.
Метод drawWaterfall выполняет следующие задачи:
1. 📏 Получает размеры спрайта.
2. 📉 Перемещает данные на один пиксель вниз, освобождая верхнюю строку.
3. 🎨 Отрисовывает верхнюю строку данных на основе текущих значений RSSI.
🔥 Пример использования:
Создание и очистка спрайта:
Обновление спрайта при наличии новых данных:
Перемещение и вывод спрайта на экран:
🔍 Почему это важно?
Диаграмма "Водопад" позволяет нам видеть изменения сигнала в динамике, что очень полезно для анализа и мониторинга. Реализуя это в нашей прошивке, мы обеспечили наглядность и удобство восприятия данных пользователем.
#филин
Привет, коллеги! Сегодня хотим поделиться с вами тем, как мы реализовали диаграмму "Водопад" в нашем сканере частот "ФИЛИН". Диаграмма "Водопад" позволяет визуализировать изменения уровня сигнала (RSSI) с течением времени, отображая данные в виде движущегося графика.
📋 Цель:
Создать визуализацию, которая покажет изменения RSSI (Received Signal Strength Indicator) в режиме реального времени, перемещая данные вверх по экрану, подобно движению воды в водопаде.
🛠 Как мы это сделали:
Мы использовали библиотеку TFT_eSPI для работы со спрайтами и отображения данных на экране. Далее, применили класс WaterfallSprite, который наследуется от TFT_eSprite и добавили в него метод drawWaterfall для отрисовки диаграммы.
class WaterfallSprite : public TFT_eSprite
{
public:
using TFT_eSprite::TFT_eSprite;
void drawWaterfall(uint8_t *data)
{
int16_t height = this->height();
int16_t width = this->width();
memmove(_img + width, _img, (height - 1) * width * 2);
for (size_t x = 0; x < width; ++x)
{
uint16_t color = rssiToColor565(data[x]);
drawPixel(x, 0, color);
}
}
};
Метод drawWaterfall выполняет следующие задачи:
1. 📏 Получает размеры спрайта.
2. 📉 Перемещает данные на один пиксель вниз, освобождая верхнюю строку.
3. 🎨 Отрисовывает верхнюю строку данных на основе текущих значений RSSI.
🔥 Пример использования:
Создание и очистка спрайта:
waterfallSprite.createSprite(DISPLAY_CHANNELS(), GRAPH_HEIGHT);
waterfallSprite.fillScreen(TFT_BLACK);
Обновление спрайта при наличии новых данных:
waterfallSprite.drawWaterfall(frequencyRange.rssi);
Перемещение и вывод спрайта на экран:
waterfallSprite.pushSprite(0,0);
🔍 Почему это важно?
Диаграмма "Водопад" позволяет нам видеть изменения сигнала в динамике, что очень полезно для анализа и мониторинга. Реализуя это в нашей прошивке, мы обеспечили наглядность и удобство восприятия данных пользователем.
#филин
🔥8❤2👍2
Media is too big
VIEW IN TELEGRAM
🔧 Разработка state машины для обработки кнопок: больше, чем просто нажатие!
Наверняка многие из вас сталкивались с задачей обработки нажатий кнопок в своих проектах. На первый взгляд, задача выглядит простой: реагировать на нажатия двух кнопок. Но когда дело доходит до определения коротких и длинных нажатий, одновременных нажатий и устранения дребезга, процесс становится гораздо интереснее и сложнее.
🎯 Основные задачи:
1. Устранение дребезга при нажатии и отпускании кнопок.
2. Определение коротких нажатий.
3. Определение длинных нажатий.
4. Обработка одновременных нажатий обеих кнопок.
🛠 Структура нашей state машины с подробными переходами:
- IDLE (Ожидание):
- Ждём нажатия кнопки.
- При нажатии любой кнопки переходим в состояние DEBOUNCE и отмечаем время.
- DEBOUNCE (Устранение дребезга):
- Проверяем, прошло ли время дребезга (30 мс).
- Если да и кнопку отпустили, возвращаемся в IDLE.
- Если да и кнопку удерживают, фиксируем состояние кнопок и переходим в PRESS_FIXED.
- PRESS_FIXED (Проверка фиксированного нажатия):
- Если обе кнопки удерживаются:
- при отпускании до 1000 мс: переход в SHORT_PRESS_BOTH.
- при удержании более 1000 мс: переход в LONG_PRESS_BOTH.
- Если одна кнопка удерживается:
- при отпускании до 1000 мс: переход в соответствующее SHORT_PRESS состояние.
- при удержании более 1000 мс: переход в соответствующее LONG_PRESS состояние.
- SHORT_PRESS_UP, SHORT_PRESS_DOWN, SHORT_PRESS_BOTH:
- Обрабатывать короткое нажатие.
- Сохранять настройки.
- Переход в состояние RELEASE_DEBOUNCE для ожидания устранения дребезга при отпускании.
- LONG_PRESS_UP, LONG_PRESS_DOWN, LONG_PRESS_BOTH:
- Обрабатывать длинное нажатие с повторяющимся действием (например, увеличение/уменьшение чувствительности).
- Сохранять настройки.
- При отпускании переход в RELEASE_DEBOUNCE.
- RELEASE_DEBOUNCE (Устранение дребезга при отпускании):
- Проверять, прошло ли достаточное время для устранения дребезга при отпускании (30 мс).
- Возвращаться в состояние IDLE.
📊 Итоги:
- Реализация state машины для обработки кнопок может быть непростой задачей.
- Важно думать о всех возможных состояниях и переходах между ними.
- Учитывайте устранение дребезга для стабильной работы вашей системы.
Обработка нажатий кнопок – это искусство! 🎨 Поделитесь своим опытом и лайфхаками в комментариях. 👇
#Программирование #Задачи #Arduino #Электроника #StateMachine #филин
Наверняка многие из вас сталкивались с задачей обработки нажатий кнопок в своих проектах. На первый взгляд, задача выглядит простой: реагировать на нажатия двух кнопок. Но когда дело доходит до определения коротких и длинных нажатий, одновременных нажатий и устранения дребезга, процесс становится гораздо интереснее и сложнее.
🎯 Основные задачи:
1. Устранение дребезга при нажатии и отпускании кнопок.
2. Определение коротких нажатий.
3. Определение длинных нажатий.
4. Обработка одновременных нажатий обеих кнопок.
🛠 Структура нашей state машины с подробными переходами:
- IDLE (Ожидание):
- Ждём нажатия кнопки.
- При нажатии любой кнопки переходим в состояние DEBOUNCE и отмечаем время.
- DEBOUNCE (Устранение дребезга):
- Проверяем, прошло ли время дребезга (30 мс).
- Если да и кнопку отпустили, возвращаемся в IDLE.
- Если да и кнопку удерживают, фиксируем состояние кнопок и переходим в PRESS_FIXED.
- PRESS_FIXED (Проверка фиксированного нажатия):
- Если обе кнопки удерживаются:
- при отпускании до 1000 мс: переход в SHORT_PRESS_BOTH.
- при удержании более 1000 мс: переход в LONG_PRESS_BOTH.
- Если одна кнопка удерживается:
- при отпускании до 1000 мс: переход в соответствующее SHORT_PRESS состояние.
- при удержании более 1000 мс: переход в соответствующее LONG_PRESS состояние.
- SHORT_PRESS_UP, SHORT_PRESS_DOWN, SHORT_PRESS_BOTH:
- Обрабатывать короткое нажатие.
- Сохранять настройки.
- Переход в состояние RELEASE_DEBOUNCE для ожидания устранения дребезга при отпускании.
- LONG_PRESS_UP, LONG_PRESS_DOWN, LONG_PRESS_BOTH:
- Обрабатывать длинное нажатие с повторяющимся действием (например, увеличение/уменьшение чувствительности).
- Сохранять настройки.
- При отпускании переход в RELEASE_DEBOUNCE.
- RELEASE_DEBOUNCE (Устранение дребезга при отпускании):
- Проверять, прошло ли достаточное время для устранения дребезга при отпускании (30 мс).
- Возвращаться в состояние IDLE.
📊 Итоги:
- Реализация state машины для обработки кнопок может быть непростой задачей.
- Важно думать о всех возможных состояниях и переходах между ними.
- Учитывайте устранение дребезга для стабильной работы вашей системы.
Обработка нажатий кнопок – это искусство! 🎨 Поделитесь своим опытом и лайфхаками в комментариях. 👇
#Программирование #Задачи #Arduino #Электроника #StateMachine #филин
👍8🔥4🤓3
Media is too big
VIEW IN TELEGRAM
🚁 Тест нашего сканера частот "ФИЛИН" в поле 🚁
И снова привет, друзья! Сегодня хотим поделиться с вами результатами полевых испытаний нашего сканера частот "ФИЛИН", который находится в стадии разработки. Мы взяли Mavic 3T и протестировали наш детектор с точки старта на расстоянии 400 метров. Результаты оказались многообещающими!
📡 Как это было:
Мы использовали наш прототип сканера частот "ФИЛИН", чтобы зафиксировать сигнал на частоте 2.4 ГГц. Оператор и точка старта были расположены на расстоянии 400 метров от устройства. Во время полета Mavic 3T наш детектор успешно обнаружил сигнал, и вы можете увидеть это на прикрепленном видео.
🔍 Почему это важно:
1. Дальность обнаружения: Наше устройство продемонстрировало хорошие результаты на расстоянии 400 метров, что подтверждает его высокую чувствительность.
2. Реальное тестирование: Эти тесты показывают, что наш сканер частот "ФИЛИН" движется в правильном направлении и может эффективно отслеживать и анализировать сигналы.
3. Постоянное совершенствование: Мы продолжаем работать над улучшением нашего устройства, и такие тесты помогают нам выявить области для улучшений.
#филин
И снова привет, друзья! Сегодня хотим поделиться с вами результатами полевых испытаний нашего сканера частот "ФИЛИН", который находится в стадии разработки. Мы взяли Mavic 3T и протестировали наш детектор с точки старта на расстоянии 400 метров. Результаты оказались многообещающими!
📡 Как это было:
Мы использовали наш прототип сканера частот "ФИЛИН", чтобы зафиксировать сигнал на частоте 2.4 ГГц. Оператор и точка старта были расположены на расстоянии 400 метров от устройства. Во время полета Mavic 3T наш детектор успешно обнаружил сигнал, и вы можете увидеть это на прикрепленном видео.
🔍 Почему это важно:
1. Дальность обнаружения: Наше устройство продемонстрировало хорошие результаты на расстоянии 400 метров, что подтверждает его высокую чувствительность.
2. Реальное тестирование: Эти тесты показывают, что наш сканер частот "ФИЛИН" движется в правильном направлении и может эффективно отслеживать и анализировать сигналы.
3. Постоянное совершенствование: Мы продолжаем работать над улучшением нашего устройства, и такие тесты помогают нам выявить области для улучшений.
#филин
🔥7⚡4👍3❤2🎉2👀1