Обмен данными ведется по интерфейсу 1-Wire, а это полностью синхронный интерфейс. Сейчас объясню, что это значит. Все датчики температуры DS18B20 – это ведомые устройства, а наш микроконтроллер — ведущее устройство. Чтобы записать или прочитать бит, ведущее устройство подает импульс каждый раз, на каждый бит. Допустим, например, читаем мы 8 бит из датчика, микроконтроллер даёт импульсы на чтение 4 битов, отвлекаемся на время, потом дочитываем оставшиеся 4 бита. Без внешнего тактирования не происходит ничего, датчики молчат до тех пор пока их никто не спросит. Таким образом, ведущее устройство — дирижер в этом оркестре. 
Далее я буду называть ведущее устройство (микроконтроллер) мастером, а ведомое устройство (датчик(-и)) слэйвом.

Датчики температуры DS18B20 снискали славу среди разработчиков электроники благодаря их точности (погрешность до полуградуса) и невысокой цене (0.2$ на алике). Кроме того, несколько датчиков можно запараллелить в одну шину и измерять последовательно разные температуры, используя только один порт 1-Wire, ведь у каждого датчика есть уникальный ID записанный изготовителем.

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

Алгоритм написан на языке программирования Си.

В микроконтроллерах серии STM32F10x (например, STM32F103C8T6 из популярной BluePill) есть часы реального времени, они "тикают" от батарейки после того, как пропадает основное питание. Но в этих RTC нет аппаратного календаря. Это значит, что дата "не идёт". Даже если вы в своем HAL проекте установили галочку "activate calendar", это значит, что дата будет "идти" при наличии основного питания, но после прекращения питания ДАТА СОБЬЕТСЯ до 01.01.00. Это плохая новость... Хорошая новость в том, что на HAL'е мир не сошелся клином. И мы сделаем полноценные часы реально времени с датой на CMSIS.

(обновление статьи 03.05.2024)

Tags: ,

В такой нагруженной системе важна аккуратность. У меня на столе STM32F407VET6 со 128 кБ SRAM и 512 кБ FLASH. И на ней реализован Modbus TCP/IP, Modbus RTU RS485, Modbus RTU RS232, +CAN шлюз. Под FreeRTOS работают LwIP, FATFS. Для начальной "завязки" необходимо выделить память

  • Под кучу FreeRTOS 32-48 kB
  • Под стек LwIP 2048 B

Со временем постепенно можно увеличивать или оптимизировать эти значения, менять количество PBUF'ов, NETCONN'ов, размер стека задач и т.д. Но я привел значения, при которых минимальный объем задач FreeRTOS с остальными стеками, работающими одновременно, будет выполняться без глюков.