Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

stm32 ds18b20

Чт июн 09, 2022 08:28:37

У меня вопрос.По ds18b20.Есть примеры с AVR .И у меня возникло желание переделать на stm32.И по иней примеры есть.Но тут неувязочка.На AVR
Если шину отпускает контроллер то настраивается регистр DDR на вход лог.0.А в stm32 там пример по другому ?. Почему так?.По USARt мне не интересно.Вот по порту GPIO .

Добавлено after 1 hour 46 minutes 33 seconds:
Ау где же вы коты?

Re: stm32 ds18b20

Чт июн 09, 2022 08:30:31

Извращенец. Современный МК- это в первую очередь периферия. Вместо того, чтобы осваивать её, ты по-стариковски дёргаешь ногами GPIO. Купи за 100 рублей DS2480B и работай с 1-Wire по-человечески.

Re: stm32 ds18b20

Чт июн 09, 2022 08:52:21

DS2480B-это переходник на 1-wire?.Вот сколько у вас рейтинг сообщений такой мой возраст.Это 3 входа RX TX POL/.Это похоже на USART?

Re: stm32 ds18b20

Чт июн 09, 2022 09:39:40

DS2480B-это переходник на 1-wire?.Вот сколько у вас рейтинг сообщений такой мой возраст.Это 3 входа RX TX POL/.Это похоже на USART?

А чё, даташит на DS2480B прочитать слабО? Оттуда узнал бы, что это преобразователь протокола UART в 1W, да ещё и с аналоговой обвязкой для формирования правильной формы импульсов. Заметь, протокола, а не уровня сигналов.

Для особо ленивых предлагаю схему. Надеюсь, сформировать 5В сумеешь.
Вложения
Screenshot_404.jpg
(45.2 KiB) Скачиваний: 85

Re: stm32 ds18b20

Чт июн 09, 2022 11:50:35

Вот тебе готовое для работы с DS18/DHT11. Используется таймер с DMA.

Re: stm32 ds18b20

Чт июн 09, 2022 13:48:08

И у меня возникло желание переделать на stm32.

Есть готовые варианты как на UART + DMA, так и на GPIO. Сам даже баловался с написанием подобного драйвера, но в итоге портировал другой с расширенной логикой работы.

На AVR Если шину отпускает контроллер то настраивается регистр DDR на вход лог.0.А в stm32 там пример по другому ?

На STM32 точно так же, когда контроллер отпускает шину, он так же переводит порт на вход. Естественно, это будет по другому, т.к. STM32 это НЕ AVR.
Но перевод порта в другой режим осуществляется в общем-то так же.

STM32F10x:
Код:
// Порт на вход
GPIOB->CRL &= 0x0FFFFFFF; // GPIOB7 -> Analog Input [CNF = 00, MODE = 00]
GPIOB->CRL |= 0x40000000; // GPIO7 -> Input Floating [CNF = 01, MODE = 00]

// Порт на выход
GPIOB->CRL &= 0x0FFFFFFF; // GPIOB7 -> Analog Input [CNF = 00, MODE = 00]
GPIOB->CRL |= 0x30000000; // GPIO7 -> GPIO output [CNF = 00, MODE = 11], SPEED: 50MHz

STM32F4xx / F2 / F0 / L0 / L1...
Код:
// На вход
GPIOC->MODER &= 0xFFFFCFFF; // GPIOC6 -> INPUT [MODER = 00]

// На выход
GPIOC->MODER |= 0x00001000; // GPIOC6 -> GPIO [MODER = 01]


В первой версии чипов GPIO периферия была не очень удачной. Регистр настроек режима работы был совмещён с дополнительными функциями. А потом их разделили и настройка порта стала значительно удобнее.

И если уж хочется подёргать ножками - озаботьтесь наличием точного таймера, чтобы можно было отмерять микросекундные интервалы для определения ответа датчика.
Это на UART'е просто. Настроить скорость передачи таким образом, чтобы 1 байт перекрывал всю возможную длительность ответа датчика (~60мкс), но при этом стартовый бит не был слишкомд линным (< 15мкс). Соответственно, пишем в датчик 0xFF (в итоге в ноль дёргается только стартовый бит), и читаем результат (TX + RX соединены). Если читается 0xFF - на шине "1", если 0xFE / 0xFC / 0xF8 - на шине "0". Повторить до получения всех битов ответа. Отправка команды - точно так же. Хотя посылать можно и более длинные значения.

Изображение
Напомнило

Re: stm32 ds18b20

Чт июн 09, 2022 14:59:45

А в stm32 там пример по другому ?. Почему так?.

А про какой пример речь? Мы не видим этот пример.
В целом, надо просто понять суть работы 1-wire: кто когда и куда тянет линию связи.
Изображение
И микроконтроллер, и устройство для передачи бита могут только прижимать линию к 0 и освобождать её. В 1 линия подтягивается резистором на 4,7 кОм к VDD.
Помеченное на рисунках красным цветом ("мастер удерживает низкое напряжение" - это когда ножка настроена на ВЫХОД в режиме OpenDrain (OD) и на выходе лог.0.
Помеченное зеленым цветом ("резистор подтягивает напряжение") - это когда ножка настроена на ВХОД, и считывается состояние входа, равное лог.1.
Помеченное синим цветом ("устройство удерживает низкое напряяжеие") - ножка настроена тоже на ВХОД, считывается состояние входа, равное лог.0.
Сине-красный цвет - ножка настроена на ВЫХОД в режиме OD. Удерживается низкий уровень.

Вот теперь исходя из этих комбинаций и напишите.
Если делать через UART, то ножка конфигурируется на выход альтернативной функции в режиме OD.

Re: stm32 ds18b20

Чт июн 09, 2022 19:14:18

Я понял но примеров на STM32 есть но они неправильно показаны.Нужно переделывать.А по USART нужно переходную микросхему.ЗА информацию спасибо.А NAROD STREAM я на этом сайте смотрел.С AVR вопросов меньше.А вот с STM32 вот такой вопрос возник.Я почему спрашиваю вы спецы.У вас опыт больше.А там придётся программу пересматривать и сопоставлять тайминги и функции ну и эксперементировать.И через USART немного программа другая.Но это ньюансы.

Re: stm32 ds18b20

Пт июн 10, 2022 06:38:57

Я понял но примеров на STM32 есть но они неправильно показаны.Нужно переделывать.

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

А по USART нужно переходную микросхему.

Нет. Прекрасно работает от питания контроллера и на UART'е контроллера.

А там придётся программу пересматривать и сопоставлять тайминги и функции ну и эксперементировать.

Тайминги-то зачем менять? Их обычно не нужно трогать.
Разве что если хардкодить под конкретно один чип, который будет всегда молотить на одной частоте. А это уже написание костылей вместо функций.

И через USART немного программа другая.Но это ньюансы.

Спорное утверждение. "Программа", конечно, другая будет. Но эту фразу можно притянуть даже к двум сборкам одной и той же программы (с изменениями всего в одной строке кода). А логика работы одна и та же: Отправить команду датчику, дождаться её завершения (либо какое-то время заниматься своими делами), запросить ответ. Усё.
Опять же, в плоскости UART'а: Используем DMA + USART, предварительно разбиваем команду на байты, которые будут отправлены в виде тайм-слотов (картинка выше), ждём пока DMA завершит передачу, разбираем ответ. Всё.
Помнится, в одном проекте я использовал вот такую схему включения датчика:
Screenshot_20220610_093523.png
(18.26 KiB) Скачиваний: 58

STM32F030F4P6 (TSSOP-20), PA3+PA4 - USART_TX + USART_RX соединены по схеме "Проволочное И", используют внутреннюю подтяжку к питанию (3.3В) и Mosfet транзистор по схеме смещения уровней 3.3В <-> 5В. И это работает.

Re: stm32 ds18b20

Пт июн 10, 2022 08:01:31

А как же тот переходник с USART -1-Wire?DS2480B

Re: stm32 ds18b20

Пт июн 10, 2022 09:40:40

USART_TX + USART_RX соединены по схеме "Проволочное И"

Не нужно их соединять! Можно USART в однопроводной схеме использовать, в режиме полудуплекса.
Ну, кому как проще. Мне лично проще на таймере. Но все зависит от конкретной схемы: есть незанятый USART — пожалуйста, есть незанятый таймер с режимом захвата — можно на нем. В принципе, можно вообще на макросах универсальный код нарисовать, который будет либо на каком-нибудь USART'е, либо на таймере работать. Но я сомневаюсь, что кому-то это нужно. Я и сам-то с 1-wire чисто интереса ради занимался, потому что нет вообще никаких вменяемых датчиков для этой шины: у температурных погрешности огромные, а у датчиков влажности так вообще "плюс-минус лапоть"!
Нафиг-нафиг! Есть вменяемые датчики для I2C или SPI, лучше с ними работать. А измерить температуру в теплице или контуре охлаждения (где даже ±1℃ выше крыши) можно и обычной копеечной NTC/PTC. У меня вот на таких система охлаждения домашней файлопомойки работает (там четыре точки измерения и три вентилятора, МК принимает решение, какие вентиляторы включать и с какой скоростью; правда, хоть там круглосуточно торренты крутятся, процессор "кубитрака" греется совсем слабо, один вентилятор я вообще выкинул, когда добавил туда "бесперебойник" на 18650, остальные два уж и не помню, когда включались).

Re: stm32 ds18b20

Пт июн 10, 2022 10:13:40

А какие датчики температуры и влажности лучше?Назховите хоть пару?

Re: stm32 ds18b20

Пт июн 10, 2022 10:33:23

Я и сам-то с 1-wire чисто интереса ради занимался, потому что нет вообще никаких вменяемых датчиков для этой шины: у температурных погрешности огромные, а у датчиков влажности так вообще "плюс-минус лапоть"!
Нафиг-нафиг! Есть вменяемые датчики для I2C или SPI, лучше с ними работать.

Поддерживаю =)

А какие датчики температуры и влажности лучше?Назховите хоть пару?

AHT10 (AHT15)? BME280/BMP280?
И это из того, что я могу достать, не заказывая компонентов из другого города. Прямо готовые модули для Arduino.
AHT10 уже раскурил. Он работает. Экономный датчик. Во сне потребляет менее 1мкА (контроллер удаётся отправить в сон с током в ~18мкА, зато выходит без перезапуска). Разрешающая способность 0.01 градуса и 0.01% влажности. Насчёт реальности показаний - спорно, но сравнивая с данными DHT22, значения были близкими. Температуру оба датчика показывали одинаковую (+/- 0.1 градуса), влажность - DHT22 показывал на 4% выше. Стабильно.

DHT22, кстати, не рекомендую. Упоротый протокол передачи. "Вы дёргаете пин, переводите пин в режим приёма, и измеряете интервалы, которые генерирует датчик". А если не успели - повторите через 2 секунды. :\

Re: stm32 ds18b20

Пт июн 10, 2022 10:56:22

Назовите хоть пару?

Термомониторинг главного зеркала БТА я делал на TSYS01 - после калибровки во всем диапазоне возможных температур зеркала (-10÷+15℃) они давали точность не хуже 0.05℃. Но сейчас и более дешевые существуют, надо погуглить. Правда, цены повысились значительно: боюсь, дешевле полутора-двух тысяч рублей за штучку уже и не найти. Но можно и на платиновых терморезисторах с внешним АЦП измерять: те после калибровки вообще сотые способны давать, а цена на них вряд ли сильно подскочила: как были 500-1000р за штучку, так и остались.

Если же температуру надо измерять с точностью хуже 0.1℃, действительно, есть всякие дешевые BMP/BME. BMP180 не советую: дерьмо. Можно попробовать откалибровать BME280.

В любом случае, без калибровки точность лучше ±0.1℃ "из коробки" можно достичь лишь за очень большие деньги (которые по сути отдашь за то, что за тебя кто-то на заводе датчик откалибровал).

Re: stm32 ds18b20

Пт июн 10, 2022 14:21:15

Вот есть задача .Датчик стоит за 20 метров.BME280 у меня есть но он по месту.

Re: stm32 ds18b20

Пт июн 10, 2022 14:41:31

Какая точность нужна?
И какой бюджет?

Re: stm32 ds18b20

Пт июн 10, 2022 15:02:40

У меня что есть .BME280 DS18b20(в изолированном виде) DTH22 .Два приёмапередатчика NRF24 .Может есть что то лучше для выполнению данной задачи.Аналоговые датчики?

Re: stm32 ds18b20

Пт июн 10, 2022 15:32:12

Еще раз задаю вопрос: какая нужна точность и каков бюджет?
Или нужно расшибиться, но реализовать на подножном корму? :)

Re: stm32 ds18b20

Пт июн 10, 2022 15:49:44

Градусы точность 0.5 градуса .А бюджет подороже можно.

Re: stm32 ds18b20

Пт июн 10, 2022 15:57:45

Термометр на термопаре и дифференциальном 24-битном АЦП - и тогда можно снять и построить тарировочную характеристику и получить супер-пупер точность. Только оное реально вот нужно?
Ответить