Перейти к содержанию
    

ESP32 + FREERTOS + TCA9548A + LIS2MDDL

7 часов назад, xvr сказал:

Не они сами, а то, что за ними включено - ваши LIS2MDL. Ведь TCA9548A  это не мосты I2C, а просто ключи. Все каналы, что были включены, напрямую подключаются к I2C мастера, а не обрабатываются самой TCA9548A, т.е. если вы в дальнейшем не образаетесь к TCA9548A её каналы всё равно остаются подключёнными к I2C.

Шина от esp к TCA подключена по даташиту с подтягивающими резисторами как и каждый датчик шиной подтянут резисторами. У меня одна шина 21-22 работает только с мультиплексорами и датчиками. Вторая занята другим датчиком.

Вот во время esp32/TCA9548 в программе без freertos,  опрашивается один датчик

image.thumb.png.51100750b2ef1e1b1ec074964bdefa30.png

 

Вот 8 инстансов под freertos обмен esp32/TCA9548 чисто в loop без task

image.thumb.png.a50024e2ce76ba22d970e19f0280788c.png

Вот одна task под freertos обмен esp32/TCA9548

image.thumb.png.3304cd8151a5f27e3371197394426f75.png

Тоже само только от другого датчика ответ

image.thumb.png.1fbc3107d4cdcdd84cd282f8480052cb.png

 

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по диаграммам из датчиков читается нечто небольшое и переменное (+/- 0). А что вы из них ожидаете?

 

PS. В DS написано:

Quote

The value of the magnetic field is expressed in two’s complement.

Т.е. это числа со знаком, а не unsigned, как трактуются в Adafruit классе. Похоже бага в Adafruit_LIS2MDL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 07.06.2023 в 20:15, xvr сказал:

Судя по диаграммам из датчиков читается нечто небольшое и переменное (+/- 0). А что вы из них ожидаете?

 

PS. В DS написано:

Т.е. это числа со знаком, а не unsigned, как трактуются в Adafruit классе. Похоже бага в Adafruit_LIS2MDL

Нашел разницу в работе с Freertos и без него. Под freertos бардак с протоколом именно в библиотеке Adafruit_LIS2MDL

image.thumb.png.8891ab3608c112fa9283264da72bfd8c.png

Записано,  будем работать с 71 адресом и каналом 0x1

Дальше зачем то библиотека пытается читать 71 адрес 2 раза на что получает по шапке.

Через 100мс (задана задержка мной что бы легче искать было ) получаем ответ от датчика

image.thumb.png.c67527db7ea372438256ee7b70d97a7d.png

Данные нормально идут с датчика, вплоть до 1МГц, TCA9548A нормально держит.

Дальше меняется канал на следующий и все происходит по кругу.

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

На обычной программе без FreeRTOS все работает как и положено, задали канал, обратились по адресу датчика, читаем значения с датчика. 

image.thumb.png.c06ff9efb7a2166bfea6a0c3689755b0.png

Все бы хорошо, но и тут, тоже что и под FREERTOS - датчики данные отдают, но библиотека их не читает.

Проблема именно в библиотеке, она слишком медленная и тормозная для моих целей.

Как проблему добью, отпишусь о результате. 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема решилась. Библиотека Adafruit оказалась недоделанной. Она проводит инициализацию только одного датчика, остальные игнорирует.

Пришлось переписать библиотеку с принудительной инициализацией всех датчиков и все завелось 🙂 Тему можно закрывать, всем спасибо!

image.thumb.png.66eb3de53d7031817caf3a4832d23fba.png

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...