Jump to content
    

Датчик c интерфейсом 1-Wire ломает I2C в другом потоке

Здравствуйте.

Столкнулся с проблемой. На STM32 под FreeRTOS в потоке с низким приоритетом программирую датчик DS1820, интерфейс 1-WIRE программный.

В программе порядка 10 потоков, программируемых не мной.

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

Если я такую операцию окаймляю командами taskENTER_CRITICAL и taskEXIT_CRITICAL, то в более высокоприоритетном потоке перестает работать

интерфейс I2C (программирую не я, в причинах не разбирался). Если же я не использую task..., то датчик показывает чушь.

Есть какие-либо советы, чтобы работало и одно, и другое?

 

Share this post


Link to post
Share on other sites

1 hour ago, Сергей Немировский said:

...интерфейс 1-WIRE программный....10 потоков...чтения или записи одного бита датчика требуют выдержки нескольких пауз между действиями....Есть какие-либо советы, чтобы работало и одно, и другое?

 

Совет один = Правильно писать софт. Или пригласить спеца для написания.
Если коротко: 
- в зависимости от тактовой - определяете минимальный квант действий в прерываниии. например для 51 серии - это будет что то типо выдача сигнала, ноп, выдача инвертного сигнала. Для avr это уже будет немного по другому звучать: если выдаём короткий строб - то перед выходом из прерывания, если длинный - то взводим прерывание (с учётом возможного дрейфа). Для аля stm32 серий это уже всё на прерываниях - любой вывод.
Сначала прорабатываете чтение одного бита, потом заводите комбинацию (статическую) для байта, потом статический набор команд. Всё это во флеше, и тупо гоняете цикл (обработчик прерывания бегает по нему).
Результат выгружаете в нужные ячейки. Причём если сканируете несколько датчиков в параллель сразу - то в данной точке раскидываете по своим ячейкам. Уровень оси(типо фри-ртоса) уже получая нужные ячейки в памяти правильно расчитывает показометры, высчитывает дельты измерений, знак, обрывы, детекции включения и т.д. и т.п..
Причём между разными МК, при одном схемотозе(условно) вы переписываете только нижний уровень.

 

удачи вам
(круглый)
ЗЫ
По памяти реализации для разных камней. Проекты на x51, avr, stm32 = где то более 10 потоков, 8 1-Wire датчиков сканируемых постоянно, куча GPIO входов и выходов, исполнительные механизмы, несколько rs485 и т.д... Проблем нет - работает на ответственных объектах (ценности в несколько миллионов баксов) 😀

ЗЫ ЗЫ
И.... Вашего непосредственного руководителя - гнать, т.к. набрал слабых разрабов и не занимается ими. Видать эффективный менагер 

 

Edited by kolobok0

Share this post


Link to post
Share on other sites

1 hour ago, Сергей Немировский said:

Есть какие-либо советы, чтобы работало и одно, и другое?

Использовать аппаратную реализацию 1-wire.

 

1 hour ago, kolobok0 said:

Или пригласить спеца для написания.

Это правильный путь решения.

Share this post


Link to post
Share on other sites

On 11/29/2025 at 2:00 PM, x893 said:

Использовать аппаратную реализацию 1-wire.

тут гдето было - 1-wire на таймере

Share this post


Link to post
Share on other sites

On 11/29/2025 at 12:10 PM, Сергей Немировский said:

Есть какие-либо советы, чтобы работало и одно, и другое?

 

Мой совет конторе: поскрести по сусекам бюджета и нанять уже архитекта.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...