Комментарии 56

Спасибо.


Хотя хак


В этой схеме убран резистор подтяжки, подключенный к истоку, с этим «хаком» схема продолжит работать. Т.к. напряжение на GPIO (и на истоке) станет меньше чем 3.3V (напряжение на затворе) на величину напряжения затвор-исток, при которой открывается транзистор. Напряжения на GPIO будет достаточно, чтобы GPIO его воспринимал как логическую «1».

выглядит сомнительным и "производитель_и_партия_транзисторов зависимым".

полуофф Вопрос практический: Есть герметичный датчик температуры. Трехпроводной кабель, на конце которого металлический стержень. Знаю, что внутри DS18B20. Как найти VCC DQ GND?
1. Мультиметром находите GND: между GND и DQ и между GND и VCC есть диоды
2. Подключением к 1-wire определяете, где VCC, а где DQ
В данной ситуации ни один из проводов неизвестен. По методу honechko три провода определены.
Отличная статья. Спасибо. Подскажите есть ли возможность подключить в качестве подчиненного устройства микроконтроллер STM32f0xxx (или аналогичный) в режиме паразитного питания по двум проводам. Не подводя питания отдельно.
Скорее всего получится, все зависит от тока потребления МК.
Считаете примерно так: [напряжение шины DQ просядет на] = [ток потребления МК] * [сопротивление резистора подтяжки] и смотрите, достаточно ли оставшегося напряжения (VCC — «просадка») для штатной работы МК (и других устройств на той же шине, если они есть).
Для снижения тока МК используйте, где это только возможно, режимы сна.
Для примера у меня ATtiny13A на 4.8MHz с использованием сна потребляет 400-500мкА.
Можно также снизить частоту МК, это также снижает почти линейно ток потребления.
Для примера у меня ATtiny13A с использованием сна потребляет 400-500мкА.

неприлично много, например stm8l или stm32l в сне потребляют около 1 мкА
Я имел в виду не самый глубокий сон (power-down), а idle, в котором МК будет успевать просыпаться и обрабатывать протокол. И ток указал для реального устройства, работающего по 1-wire в режиме обработки протокола.
Давайте не превращать тему в холивар avr vs stm32)
Давайте внесу ясность:
* есть ток потребления МК в активном режиме, когда выполняются инструкции,
* есть ток потребления МК в неглубоком сне, когда он может проснуться всего за пару микросекунд, чтобы обработать протокол,
* есть ток потребления МК в глубоком сне (power-down), из которого он просыпается неприлично долго.
Для обработки протокола (скажем для 1-wire нужно время реакции <8мкс), МК будет находиться x% времени в активном режиме и (100-x)% в неглубоком сне.
Вот посчитав токи в этих режимах в реальном процентном соотношении и получается 400-500мкА.
вы так и хотите avr vs stm32 )
вообще сам протокол 1w не энергоэффективный.
Вообще сами микроконтроллеры не эффективны, нужно использовать только узкоспециализированные микросхемы, аналоговые и обязательно ламповые
неприлично много, например stm8l или stm32l в сне потребляют около 1 мкА
1 мкА — это про глубокую спячку. При включенном тактовом генераторе и работающей периферии (то, что в AVR называется «режим Idle») ваш стм32л потребляет от 80 мкА до 2.5 мА, а никакие не 1 мкА.
В глубоком сне AVR-ки потребляют 200 нА. При этом, кстати, модуль TWI остаётся способен распознавать собственный адрес и будить МК при обращении.

А в чем смысл того, что вы сравниваете stm32 в рабочем режиме со включенным генератором и выключенную аврку без оперативки и генератора? Любой контроллер можно так отключить, это почти равноценно отключению по питанию.


А стмке так же есть асинхронная периферия, которая умеет генерировать прерывания из стопа (тот же LPUART, LPTIER и другое). А есть еще PSoC от сайпресса, где асинхронную периферию можно программировать самому на верилоге и она еще в тысячу раз эффективнее архаичных stm32 и avr.

Э-эм… где это я их сравниваю? Это dernuss зачем-то сравнил AVR в комбинированном активном режиме и выключенный стм без оперативки. Я только привёл немного циферок для разных «спячек».
и выключенную аврку без оперативки
Оперативка в авр никогда не отключается, но тем не менее 0.2 мкА.
тот же LPUART, LPTIER и другое
Но не I2C. Может быть кому-то и есть польза от асинхронного уарта, вот только I2C — вполне себе системная шина и возможность просыпаться по событию на системной шине я считаю уберполезной абилкой.
А есть еще PSoC от сайпресса, где асинхронную периферию можно программировать самому на верилоге
Насколько помню, весь верилог там ограничивается несколькими LUT-табличками, на которых можно слепить немного glue logic между выводами периферии и I/O ножками. До полноценного набортного плис, на котором можно было бы накатать модуль I2C с фичами не хуже чем в авр там как до луны на карачках.
Оперативка в авр никогда не отключается, но тем не менее 0.2 мкА.

Название МК в студию.
Сами лично пробовали? Чем микротоки измеряете?


Насколько помню, весь верилог там ограничивается несколькими LUT-табличками, на которых можно слепить немного glue logic между выводами периферии и I/O ножками. До полноценного набортного плис, на котором можно было бы накатать модуль I2C с фичами не хуже чем в авр там как до луны на карачках.

Проблемы тех, то не осилил. Я осилил и все работает прекрасно. Смеюсь теперь над любителями архаичных контроллеров с прибитой гвоздями периферией.

Название МК в студию.
В принципе, любые межки с picoPower (буква P на конце), тиньки из не самых древних, в т.ч. 13A.
Сами лично пробовали?
Пробовал конечно. Главное плату хорошо отмывать, утечки по остаткам всяких ЛТИ-120 могут на порядок превышать потребление схемы.
Чем микротоки измеряете?
А в чём вообще проблема? Обычный UT-61E в режиме мкА. Можно и пА померить микровольтметром, используя входные 10М в качестве шунта.
Проблемы тех, то не осилил. Я осилил и все работает прекрасно.
"Всё работает" — это крайне подозрительная формулировка, обычно намекающая на то что не работает ничего. Конкретно I2C может выводить МК из пауэр-даун? Мне эта фича на архаичных атмежках очень нравится.

Открываем даташит на attiny13a, видим что она вообще не умеет работать в режиме остановки, с сохранением оперативки и PC, то есть в ней нет режима, аналогичного STOP в STM32:


Заголовок спойлера


When the SM[1:0] bits are written to 10, the SLEEP instruction makes the MCU enter Powerdown mode. In this mode, the Oscillator is stopped, while the external interrupts, and the Watchdog continue operating (if enabled). Only an External Reset, a Watchdog Reset, a Brown-out Reset, an external level interrupt on INT0, or a pin change interrupt can wake up the MCU. This sleep mode halts all generated clocks, allowing operation of asynchronous modules only.

То есть, как я написал выше, это банальное отключение по питанию с возможностью генерировать RESET по паре событий. Ни о какой работе оперативки с потреблением 0,2 мкА тут речи не идет.


Обычный архаичный контроллер.


А в чём вообще проблема? Обычный UT-61E в режиме мкА. Можно и пА померить микровольтметром, используя входные 10М в качестве шунта.

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


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

То есть, как я написал выше, это банальное отключение по питанию с возможностью генерировать RESET по паре событий. Ни о какой работе оперативки с потреблением 0,2 мкА тут речи не идет.
Полнейшую чушь написали.
Этот батареечный мультиметр будет показывать погоду на марсе в таком режиме, потому что он делает измерения не непрерывно, а всего лишь пару раз в секунду, показывая вам случайную величину, которая попала в квант измерения времени.
Полнейшую чушь написали.
Оперативка в авр никогда не отключается, но тем не менее 0.2 мкА.

В принципе, любые межки с picoPower (буква P на конце), тиньки из не самых древних, в т.ч. 13A.

Так как называется режим у AtTiny13a, в котором сохраняется оперативка, но общее потребление составляет 0,2 мкА, уважаемый не порящий чушь?

Можете не верить, но "Power-down". Всё сохраняется, выход прерыванием по уровню или сбросом WDT при котором, внезапно, ОЗУ (в т.ч. регистры) остаются неизменны.

А вы точно понимаете разницу между регистрами периферии и SRAM? А то они в общем адресном пространстве, можно и перепутать...

Если мы просыпаемся из PowerDown по прерыванию, то всё состояние будет сохранено.


Прошу прощения, что не идентифицировал регистры, как R0:R31.
А те, другие, частенько портами называют.

… даташит на attiny13a, видим что она вообще не умеет работать в режиме остановки, с сохранением оперативки и PC .....

Не порите чушь, ей больно.

А, да, всегда забываю про бесполезный Idle Mode, в котором неработаюшая аврка потребляет столько же, сколько stm32 на полном ходу со всей включенной периферией и без использования функций энергосбережения вообще)))))))))))


Заголовок спойлера



На 4 МГц (архаичная архитектура даже не умеет отлючать тактовый генератор) 1 мА у AVR с неработающим ядром, против 0,63 мА у STM32, которая выполняет бенчмарк.


Удачи в разработке)))

Вы бы свою энергию лучше направили на написание статьи «Сравнение энергопотребления МК». Я серьезно, было бы очень интересно. В даташитах кроме всего прочего есть графики зависимости потребления от частоты и потребления от напряжения, было бы очень полезно сравнить на равных частотах и на равных напряжениях. А то маркетологи любят запудрить мозги.
Как правило сравнивать 8 и 32 битные микроконтроллеры бесполезно, задачи как правило разные. 8 битные обычно и озу и пзу обделяют, ни шифрования нормального не сделать, ни чего. У меня например не убиралось в stm8l AES128 + BME280 + RF трансмиттер. Пришлось заменить на stm32l и не мучаться. После этого везде ставлю 32битные с побольше памятью
Вы бы свою энергию лучше направили на написание статьи «Сравнение энергопотребления МК».

Я бы написал одну строчку: если нужна максималная энергоэффективность — делайте на PSoC, у них самый лучший техпроцесс (10-20 мкА на МГЦ) и программируемая периферия, которая позволяет не будить ядро на простых задачах.


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


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

Но самую большую подставу обычно составляет зависимость от температуры. Мало какой контроллер спроектирован так, что он при нагреве не начинает потреблять в 10-100 раз больше нормы:



Казалось бы редкая ситуация, а вы попробуйте сделать счетчик горячей воды на батарейках)))

Да, насчёт PC я немного погорячился (он может не сохраниться, если использовать WDT). А насчёт ОЗУ — я полностью прав.


Про квадратичную зависимость тока от напряжения — упомянем?

В даташите ясно написано что в power-down (в котором 0,2 мкА) оперативка отключается, вы выглядите очень глупо, затеяв спор с даташитом.


The Idle mode stops the CPU while allowing the SRAM, Timer/Counter, ADC, Analog Comparator, and Interrupt system to continue functioning. The Power-down mode saves the register contents, disabling all chip functions until the next Interrupt or Hardware Reset. The ADC Noise Reduction mode stops the CPU and all I/O modules except ADC, to minimize switching noise during ADC conversions.

Единственные контроллеры, которые умеют достигать такого потребления с сохранением оперативки — msp430 на fram.

Там написано, что основной тактовый генератор выключается и активны только асинхронно работающие блоки или WDT:
Power-down Mode
… the SLEEP instruction makes the MCU enter Powerdown mode. In this mode, the Oscillator is stopped, while the external interrupts, and the Watchdog continue operating (if enabled). Only an External Reset, a Watchdog Reset, a Brown-out Reset, an external level interrupt on INT0, or a pin change interrupt can wake up the MCU. This sleep mode halts all generated clocks, allowing operation of asynchronous modules only.


Из сравнения рисунка "Clock Distribution" и таблицы "Active Clock Domains and Wake-up Sources in the Different Sleep Modes" (clkCPU) нетрудно заключить, что содержимое ОЗУ (включая R0:R31) остаётся неизменным и это действительно так.

А, лол, точно, я совсем забыл что мы говорим о "контроллере" с 64 байтами оперативки, то есть меньше чем в RTC_BACKUP регистрах у типичного современного МК.


Опять аврщики опустили меня на свой уровень архаичного железа и подавили опытом!


Удачи там в разработке на 64 байтах оперативки. Они и правда сохраняются в power-down. Жаль, правда, что в этом нет никакого практического смысла.

Да, насчёт PC я немного погорячился (он может не сохраниться, если использовать WDT).
Будить ресетом — это немного странно. Можно же попросить собаку дёрнуть сперва прерывание.
Из сравнения рисунка «Clock Distribution» и таблицы «Active Clock Domains and Wake-up Sources in the Different Sleep Modes» нетрудно заключить, что содержимое ОЗУ остаётся неизменным и это действительно так.
В общем-то, в разделе про слип моды явно написано «The contents of the Register File and SRAM are unaltered when the device wakes up from sleep».
А не будут ли импульсы при передачи данных сильно опускать напряжение на входе МК? Нужна ли какая-то схема на конденсаторах? Или и так будет работать, если просто подтянуть шину данных к питанию резистором 4.7 кОм?
Естественно нужен конденсатор, и между ним и DQ обязательно нужен диод (Шоттки), чтобы конденсатор не мешал линии данных. Я применяю следующий «хак»: ставлю конденсатор между GND и VCC микроконтроллера, а DQ и VCC 1-wire подключаю к двум пинам МК, таким образом используя встроенные диоды в пинах (между выводом и VCC МК есть диоды):

В схеме использую еще и супрессоры, рекомендую для защиты.
гадаю конечно, но что то сомнительно, что заведется. Все таки стмики32 даже младших серий достаточно привередливы к питанию.
Лично я использовал готовый преобразователь, микросхему на i2c и не знал горя.
Есть две модификации этой микросхемы: DS2482-100 — с одним выходом 1-wire и DS2482-800 — с аж 8 выходами 1-wire.
Т.к. с этими микросхемами я не работал, то упомянул вскользь. Если у Вас есть чем дополнить, поделитесь, пожалуйста опытом.
Открытый сток или коллектор никак не подключены внутрь микросхемы, то есть его можно подключить к нагрузке, питаемой от другого источника питания, имеющий лишь общую землю с управляющей схемой.
Если это вопрос, то отвечу. К открытому коллектору/стоку в чистом виде — да можно. Но если это пин МК или RPi, который работает в режиме открытый коллектор/сток, то напряжение на нем не должно превышать напряжения питания МК/RPi. Причина в диоде, который есть во внутреннем устройстве пина, он включен между пином и Vcc МК/RPi. Если на пин подать напрежение больше, чем Vcc+0.6V, то ток от внешнего источника пойдет через этот диод и будет «питать» МК/RPi, т.е. МК/RPi будет запитан от повышеного напряжения. Выход — подключить к пину внешний транзистор.
Да нет, не вопрос. Не более чем уточнение, относящееся к термину «открытый коллектор/сток».
А можете привести пример как опросить шину на предмет наличия устройств?
То есть изначально неизвестно сколько чего на шине висит. Как узнать их адреса?
Используя высокоуровневый доступ — очень просто, для вараианта с owfs:
owdir /
а при использовании драйверов ядра:
ls /sys/bus/w1/devices/
А на сетевом уровне? Насколько я понимаю на команду поиска устройства должны ответить своим идентификатором. Если эту команду послать широковещательно, то отвечать будут все вместе, в результате в лучшем случае услышим только то устройство, которое имеет выше приоритет. А остальных как услышать?
Для этого используется уже не READROM, а команда SEARCHROM и алгоритм поиска, о нем подробнее почитать можно, например, здесь radiohlam.ru/1-wire_scan
Немного поправлю: UART — это любой Universal Asynchronous Receiver/Transmitter, общее понятие, у которого нет единого физического стандарта. Как Вы правильно заметили, в разных реализациях используются разные напряжения логических сигналов, но еще сигналы бывают и разной полярности (в паузе может быть как 0, так и 1). А вот RS232 — это уже стандарт.
очень хотелось понять, но уже абзаца «Пассивный адаптер» заблудился, следующий так же, далее поплыл совсем. написано знатоком для знатоков
Для перехода от «Канальный уровень» до «Пассивный адаптер» нужно всего-лишь разобраться с UART.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.