tonyk_av 45 2 июня, 2023 Опубликовано 2 июня, 2023 · Жалоба 2 hours ago, xvr said: А как вы Arduino с FreeRTOS скрещивали? Родная FreeRTOS не понимает ни start() ни loop() функций. В Инете попадался отдельный проект Дуни с FreeRTOS. Не вникал глубоко, подробностей не скажу, но задачи та штука крутить могла. А в чём сложность? Дуня, как мне показалось, почти С++, а там задачи крутятся. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 2 июня, 2023 Опубликовано 2 июня, 2023 · Жалоба 3 hours ago, tonyk_av said: А в чём сложность? Дуня, как мне показалось, почти С++, а там задачи крутятся. разные точки входа. У Arduino это setup() и loop(), у FreeRTOS это любая процедура, которая зовётся из стартапа и заканчивается vTaskStartScheduler() Например в isp-idf это библиотечные функции esp_startup_start_app и esp_startup_start_app_other_cores, а пользовательский main это app_main() Как у вас скрещивали Arduino и FreeRTOS не понятно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 3 июня, 2023 Опубликовано 3 июня, 2023 (изменено) · Жалоба 13 hours ago, xvr said: Как у вас скрещивали Arduino и FreeRTOS не понятно. У меня- никак. Говорю же, попадался на глаза такой проект. Интересно- поищите. Мне он нафиг не нужен, ибо у меня используется С++. P. S. До чего народ стал ленивым, что даже вбить arduino+freertos им впадлу. Изменено 3 июня, 2023 пользователем tonyk_av Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 3 июня, 2023 Опубликовано 3 июня, 2023 · Жалоба 2 hours ago, tonyk_av said: У меня- никак. Пардон, это вопрос не вам а ТС. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanSbor 0 3 июня, 2023 Опубликовано 3 июня, 2023 · Жалоба 23 часа назад, uriy сказал: Странный у вас подход. В первом посте написали что смотрели осцилом - сигнал отличный. Зачем тогда резисторы разные пробовать? У TCA9548A в даташите указана максимальная частот 400 кГц. У LIS2MDL да указано 3.4 МГц На подпаянных резисторах для частоты 1МГц резистор ставил 1,2к - сигнал практически идеальный. Но это не говорит о том что он в самой таске обработается. И да, частоту в 1 МГц ограничивает сам контроллер, то что TCA9548A пропускает такую частоту скорее фича чем баг. Но я учту это и скорее всего снижу частоту до 400 кГц, что бы не вылазить за рамки частотного ограничения по железу. для 400кГц резистор буду пробовать 3.3к и 4.7к, посмотрю на форму сигнала. 23 часа назад, xvr сказал: А как вы Arduino с FreeRTOS скрещивали? Родная FreeRTOS не понимает ни start() ни loop() функций. посмотрите пример Freertos в самой Arduino IDE - там все ясно и понятно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 3 июня, 2023 Опубликовано 3 июня, 2023 · Жалоба 42 minutes ago, AlanSbor said: посмотрите пример Freertos в самой Arduino IDE - там все ясно и понятно. Посмотрел, должно работать. А вот к коммутации датчиков есть вопросы - у вас 1 инстанс для опроса датчика, и 20 штук разных датчиков. Могут не сочетаться 😞 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanSbor 0 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 22 часа назад, xvr сказал: Посмотрел, должно работать. А вот к коммутации датчиков есть вопросы - у вас 1 инстанс для опроса датчика, и 20 штук разных датчиков. Могут не сочетаться 😞 1 task - одна задача, опрашивает 8 датчиков lis2mdl через TCA9548, должно работать по I2C. Не хотелось бы делать 20 tasks на каждый датчик - передерутся за шину при такой скорости. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 4 hours ago, AlanSbor said: Не хотелось бы делать 20 tasks на каждый датчик - передерутся за шину при такой скорости. Создаются объекты "Запрос", "Пул запросов" и "Поллер". Для опроса каждого датчика создаётся последовательность запросов. Поллер, опрашивающий датчики, делается как конечный автомат, который извлекает из пула запрос и выполняет его. У меня по такой схеме работают I2C и Модбас. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 10 hours ago, AlanSbor said: 1 task - одна задача, опрашивает 8 датчиков lis2mdl через TCA9548, должно работать по I2C. Вопрос не в колическтвае тасков, а в сочетании ОДНОГО инстанса класса Adafruit_LIS2MDL, который у вас обслуживает НЕСКОЛЬКО физических датчиков. Вы уверены, что он на это расчитан? И со стороны аппаратуры - в шилде LIS2MDL (или у каждой микросхемы, если они у вас в виде микросхем) есть своя поддяжка I2C? Так как при переключении каналов TCA9548 у вас только один канал будет подключён с I2C шине (с её поддяжкой), а остальные останутся без подтяжек на их конце I2C вообще - неизвестно как они на это отреагируют. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanSbor 0 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба В 04.06.2023 в 22:25, xvr сказал: Вопрос не в колическтвае тасков, а в сочетании ОДНОГО инстанса класса Adafruit_LIS2MDL, который у вас обслуживает НЕСКОЛЬКО физических датчиков. Вы уверены, что он на это расчитан? И со стороны аппаратуры - в шилде LIS2MDL (или у каждой микросхемы, если они у вас в виде микросхем) есть своя поддяжка I2C? Так как при переключении каналов TCA9548 у вас только один канал будет подключён с I2C шине (с её поддяжкой), а остальные останутся без подтяжек на их конце I2C вообще - неизвестно как они на это отреагируют. Если я правильно помню инстанс - указатель на выделенная память. Соответственно при вызове events память очищается и туда записываются новые данные. Поправьте пожалуйста меня если я ошибаюсь. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanSbor 0 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба В 04.06.2023 в 22:25, xvr сказал: Вопрос не в колическтвае тасков, а в сочетании ОДНОГО инстанса класса Adafruit_LIS2MDL, который у вас обслуживает НЕСКОЛЬКО физических датчиков. Вы уверены, что он на это расчитан? И со стороны аппаратуры - в шилде LIS2MDL (или у каждой микросхемы, если они у вас в виде микросхем) есть своя поддяжка I2C? Так как при переключении каналов TCA9548 у вас только один канал будет подключён с I2C шине (с её поддяжкой), а остальные останутся без подтяжек на их конце I2C вообще - неизвестно как они на это отреагируют. Подтяжки сделал для всех каналов - 2.4к, сигналы по i2C - отличные. Попробовал добавить каждому датчику отдельный инстанс - не помогло. Пробовал задержку между опросами каждого датчика - не помогло. Про event посмотрел /**************************************************************************/ /*! @brief Gets the most recent sensor event @param event The `sensors_event_t` to fill with event data @returns true, always */ /**************************************************************************/ bool Adafruit_LIS2MDL::getEvent(sensors_event_t *event) { /* Clear the event */ memset(event, 0, sizeof(sensors_event_t)); /* Read new data */ read(); event->version = sizeof(sensors_event_t); event->sensor_id = _sensorID; event->type = SENSOR_TYPE_MAGNETIC_FIELD; event->timestamp = millis(); event->magnetic.x = (float)raw.x * LIS2MDL_MAG_LSB * LIS2MDL_MILLIGAUSS_TO_MICROTESLA; event->magnetic.y = (float)raw.y * LIS2MDL_MAG_LSB * LIS2MDL_MILLIGAUSS_TO_MICROTESLA; event->magnetic.z = (float)raw.z * LIS2MDL_MAG_LSB * LIS2MDL_MILLIGAUSS_TO_MICROTESLA; return true; } /**************************************************************************/ Очистка при каждом обращении к event Куда копать дальше ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба У вас сейчас одна TCA9548A установленна, или все 3? Не могут они подраться -у каждой свои коммутируемые каналы, но между собой они не переключаются. Кстати у вас в коде нет отключения каналов TCA9548A при переключении на следующий коммутатор. PS. Можете попробовать (для отделения мух от котлет) запустить вашу таску без FreeRTOS - временно уберите отуда операции с семаформаи и замените xTaskDelay на Arduino delay. И позовите её прямо из start(). Если заработает, то нужно искать в FreeRTOS примитивах (что маловероятно). Если нет - то разбираться с I2C коммутаторами и пр. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanSbor 0 7 июня, 2023 Опубликовано 7 июня, 2023 · Жалоба 7 часов назад, xvr сказал: У вас сейчас одна TCA9548A установленна, или все 3? Не могут они подраться -у каждой свои коммутируемые каналы, но между собой они не переключаются. Кстати у вас в коде нет отключения каналов TCA9548A при переключении на следующий коммутатор. PS. Можете попробовать (для отделения мух от котлет) запустить вашу таску без FreeRTOS - временно уберите отуда операции с семаформаи и замените xTaskDelay на Arduino delay. И позовите её прямо из start(). Если заработает, то нужно искать в FreeRTOS примитивах (что маловероятно). Если нет - то разбираться с I2C коммутаторами и пр. Запаяны все три, у них разные адреса и поэтому подраться не могут. Про отключение я понял, но т.к. работает только один, пока не требуется. Вчера ночью пробовал и в freertos без всего - работает только нулевой канал и в одиночной программе дописал пару сенсоров - тоже работает только нулевой канал. Такое впечатление, что после подключения нулевого канала он больше не переключается, может его перед опросом следующего надо отключить и выбрать следующий, вечером попробую. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 7 июня, 2023 Опубликовано 7 июня, 2023 · Жалоба Все-таки очень бы хотелось посмотреть логическим анализатором что творится на ножках I2C непосредственно ESP32. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 7 июня, 2023 Опубликовано 7 июня, 2023 · Жалоба 4 hours ago, AlanSbor said: Запаяны все три, у них разные адреса и поэтому подраться не могут. Не они сами, а то, что за ними включено - ваши LIS2MDL. Ведь TCA9548A это не мосты I2C, а просто ключи. Все каналы, что были включены, напрямую подключаются к I2C мастера, а не обрабатываются самой TCA9548A, т.е. если вы в дальнейшем не образаетесь к TCA9548A её каналы всё равно остаются подключёнными к I2C. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться