Pull to refresh

Comments 25

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

Не поленился проверить живьем: включил Mini Pro в источник 5 В (напрямую) и в 12 В (через RAW). Как и следовало ожидать, совершенно одинаковое потребление: около 20 мА.
По идее, ток должен был еще и уменьшиться, если бы стоял импульсный стабилизатор, а не линейный который при стабилизации излишки энергии переводит в бесполезное тепло.
Профессиональная работа… Ну, наверное, если нужно не какое-то примитивное поделие, а сложное и стабильно работающее устройство, то стоит писать непосредственно в каком-нибудь AVR Studio с полным пониманием работы контроллера и периферии. Даже если не хочется делать свою плату для устройства, можно ведь стереть контроллер на плате Arduino, прошивать по ISP и отлаживать по JTAG или dW.
А есть мануал по отладке ардуины? Я как-то пытался к этому подступиться, понял, что без для отладки надо брать минимум stm32
Если по AVR, то есть отладчик AVR Dragon, работает в AVR Studio. А сама Arduino, вроде как, не имеет средств отладки. И да, STM32 гораздо стабильнее и удобнее по всем параметрам, чем AVR.
Давайте так: у меня есть скетч на Wire и плата Arduino. Мне AVR Dragon поможет?
Вряд ли. AVR Dragon поможет если писать на C или C++ в AVR Studio или другой подобной IDE.

Afaik для ардуины традиционный путь — отладка через вывод логов в uart. В принципе, для несложных задач достаточно (да и на будущее полезная привычка — не всегда можно подлезть отладчиком, и тогда грамотные логи спасают)
Для сравнения, на stm32 новичку без отладчика смерть: зальёшь через бутлоадер прогу и пытаешься понять, почему она вообще не запускается… 2-3 доллара на отладчик спасают закипающие мозги.

Могу посоветовать эмулятор Ардуино circuits.io, там реально можно отлаживать с точками останова и просмотром внутренних переменных, но все в эмуляторе, но при этом в схемном окружении — посмотрите, классная вещь.

Хорошая штука, но…
Вот моя ардуина читает температуру с DS1820 и рисует график с ней на ST7735. А в эмуляторе таких компонент нет. Делать для эмулятора отдельный скетч?

Да и это… Я там блок питания коротнул, и ничего не взорвалось…

Вы попали в самое больное место этого проекта — отсутствие возможности создавать свои компоненты, а вроде бы раньше она была ...


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


Да, не взорвалось, а Вы точно этого хотели? )) Но амперметр показал большой ток — уже неплохо, лучше коротнуть в эмуляторе, чем в реале.

> дать свою прошивку, то есть эмулировать недостающие компоненты на дополнительных камнях

А где её брать? Мне даже от мысли самому писать эмулятор DS1820 уже больно. Проще уж действительно отсадить низкоуровневую часть на отдельный контроллер, сделать веб-интерфейс, и отлаживать высокоуровневую часть в нормальной IDE, с unit-тестами и куртизанками.

Но там без гарантий отсутствия проблем на реальной железке…

> Да, не взорвалось, а Вы точно этого хотели? ))

Я бы хотел, что бы взрывался тот (транзистор), через который пошел большой ток. А то лишние 50мА я могу не заметить.
Снижение рабочей частоты» (стр. 108). Заблуждение, что снижение рабочей частоты будто бы уменьшает энергопотребление, широко распространено даже в профессиональной среде

А вот и нет. Это как раз идея о том, что частоту всегда надо вытягивать в максимум и падать в sleep при первой возможности — заблуждение. И причина этому — периферия. Оба механизма сбережения электропитания важны.
1) Частый уход в sleep и подъём может потреблять больше энергии, чем снижение частоты. Пока раскочегарится PLL, пока затактируется периферия также проходит время и тратится ток. У stm32 это 1-2мс, что равносильно 10 мс работы на пониженой частоте. Если ядро вашей rtos будит МК каждые 10 мс, то sleep может не давать выгоды. Увы.
2) Тактирование периферии. Большая частота тактирования ядра приводит к большим значениям предделителей. А работа предделителей это тоже потребление тока.

Поэтому профессионалы используют и снижение частоты, и режим сна для гибкого управления потреблением микроконтроллера. И у современных микроконтроллеров сложная и разветвлённая система управления тактированием.
Совершенно с вами солидарен, когда речь идет о пробуждении-засыпании каждые 10 мс. Даже если при этом собственно действия занимают 100 мкс, все равно за это время ни один датчик раскачаться не успеет. В этом случае одназначна надо гибко совмещать снижение частоты и засыпание, когда паузы большие. Есть такая периферия, которой и пары секунд для выхода на режим недостаточно. Но мы не об этом, а о более простых случаях: не слишком вникающий человек видит снижение потребления, и начинает уверять меня, что если запустить МК от часового кварца, то тут и настанет всем сплошное благолепие. Нет, не настанет, а будет только хуже.
Абсолютно верно.
В этой статье все так называемые замечания о «грубых ляпах» крайне сомнительны.
Скажем якобы ляп в разделе «Потребление электроэнергии платами Arduino».
Даже минимальный поиск в google за 10 сек показывает что Mini Pro с питанием от USB имеет контроллер на 3,3 В и 8 МГц, а с питанием от внешнего источника 5 В и 16 МГц. Соответствено это и вызывает 2-х кратную разницу в потреблении.
Пожелаю автору глубже вникать в тему прежде чем кого-то обвинять в ляпах.

Не въезжаю, о чем вы, при чем тут гугл и 8-16 МГц. В таблице сравниваются Мини Про 5 В и Мини Про 9В, посмотрите внимательно.
Еще раз и помедленнее. Не с USB, а с питанием от USB. Что равносильно питанию 5 вольт напрямую, на вывод Vcc. Причем тут гугл и 8 МГц?
У stm32 2-3 миллисекунды выход из standby режима (в этом режиме периферия не работает, в основном). Уйти и вернуться в stop режим — несколько микросекунд. Выйти из sleep режима — до 10 тактов (при высоких скоростях намного меньше микросекунды). В процессе работы нет никакого смысла использовать standby режим, хотя это и возможно. Так что вы преувеличиваете затраты на переход в низкопотребляющий режим и обратно. Снижать тактовую частоту имеет смысл там, где вы часто ждете тормозную периферию, но глубоко спать не можете, т.к. можете не успеть обработать пришедшие данные. Во всех остальных случаях эффективней работать на максимальной частоте и чаще спать.
Уйти и вернуться в stop режим — несколько микросекунд.

Это не так.
When exiting Stop mode by issuin
g an interrupt or a wakeup event, the HSI RC oscillator is
selected as system clock.

Это значит, что в stop mode вырубается осциллятор и для того, чтобы оттуда вернуться, нужно врубить HSE, дождаться выхода на режим, врубить PLL, дождаться выхода на режим. Это всё и будут те самые 2 мс.
Выйти из sleep режима — до 10 тактов

Там уже интереснее. Но советую как-либо померить энергопотребление в sleep mode при работающей периферии типа USART + DMA и разной частоте. Разница при снижении частоты всё равно есть, ~15% на каждые 2 раза снижения частоты тактирования.
Ну в общем, да, если вам нужен HSE. Генератор запускается за 2 миллисекунды. Плюс еще на остальные расходы менее 1 миллисекунды. В общем случае около 3х миллисекунд получается.
Рассчитать энергопотребление помогает профилирование питания в STM32CubeMX. Возможно, в разных задачах результат будет разный, но в моих случаях уменьшение частоты приводило только к увеличению энергопотребления (по крайней мере по расчетам).
А без HSE максимальной частоты не будет. Значит выход из stop режима на максимальную частоту — 2+ мс.

Про увеличение потребления при уменьшении частоты это интересно. Не могу скачать новый STM32CubeMX, просит регистрацию. Старый считал электропотребление без учёта затрат на раскачку осциллятора. Не уверен, что он считал потребление предделителей. А микроамперметра у меня сейчас нет, померить не могу.
В тему или нет, но есть одно скверное (и очень массовое) заблуждение насчет Ардуино — что код в Arduino IDE пишется на каком-то своем специальном языке, похожем на упрощенный С. На самом же деле это самый что ни на есть настоящий С++ с ООП шаблонами и всем остальным, что поддерживает компилятор avr-gcc, который собственно и используется в IDE.

Только стандартная библиотека STL там отсутствует почти полностью (видел vector и ещё несколько компонентов), и вместо некоторых компонентов сделаны свои упрощенные аналоги (типа класса String)

Странно, а сейчас и vector не могу найти. Видимо, память подводит. В общем, кажись из коробки нет STL совсем. Но есть порт uClibc++
Sign up to leave a comment.

Articles