| Немного о Power.h Arduino Nano (11.11.2026). |
|
| 2026 - Ноябрь | |
| 11.11.2026 20:11 | |
Power.h. Часть функций не работает в Arduino Nano, т.к. в ней тупо нет нужного железа. Например, power_usb_disable(): за USB отвечает не контроллер USB, а чип FT232 или CH340. В библиотеке - тонна функций: универсальная библиотека для сотен микроконтроллеров архитектуры AVR от компании Atmel. А Arduino Nano - самая кастрированная из платформ (и самая маленькая, дешёвая и достаточная для всех любительских задач). Проще сказать, какие функции в ней работают, а не какие нет. Из 270 функций в составе библиотеки из Arduino IDE v.1.8.19 (последняя версия, работающая без подключения к зарубежному интернету, - версия 2.3.10 в РФ не работает из-за вполне конкретного ведомства: второго оперативного управления сами знаете чего) - работает всего 16. И они парные (enable/disable) - то есть, 8: - power_all_disable(). Использовалась в конце работы задержки выключения приборов. Опасная функция, всегда перед ней должно стоять delay(10000) или больше. Если она сработает в начале кода, до определения платформы на ПК и возможности начать перезаливание скетча, - получится недокирпич, в дело пойдёт программатор - а он не очень простой в использовании; - power_usart0_disable(). Она и убивает интерфейс перепрошивки платформы через Arduino IDE по USB. Гугл заявляет о величине уменьшения тока на 250мА - бешеное значение, но какой ценой. Эту функцию лучше на вход повесить проверкой в цикле: чтобы именно аналоговым импульсом включить её обратно. Гугл заявляет, что эта функция не убивает возможность залить скетч, но как я окирпичился давно, когда проверял её? А вот почему: переформулируешь запрос гуглу - и получишь: "Функция power_usart0_disable() физически не может сломать плату Arduino Nano, так как она только временно отключает тактирование модуля UART на программном уровне до следующей перезагрузки. Плата выглядит «испорченной» потому, что выключенный аппаратный последовательный порт мешает загрузчику принимать новые прошивки по USB". Недокирпич; - power_timer0_disable(), power_timer1_disable(), power_timer2_disable(). Использовались в системе защиты от протечек, наносекундном таймере и в управлении электромагнитным клапаном унитаза. Тут тоже нужно чётко понимать, какой таймер за какие параметры отвечает. Потеря таймера2 - невозможность точных измерений времени, отключение ШИМ на D3+D11 (ШИМ можно и программно сделать), потеря генерации звуков - некритично. Таймера1 - потеря сервоприводов, ШИМ на D9+D10, другой точности измерения времени - ну, терпимо. Таймера0, системного, - millis(), micros() и delay() останавливаются (никогда не выполнятся), теряется ШИМ D5+D6 - полная ж; - power_spi_disable(). Отключит интерфейс SPI (разъём ICSP). Прощай, microSD; - power_twi_disable(). Отключит интерфейс I2C. Прощай, датчик пульса или ЖК-дисплей; - power_adc_disable(). Отключение analogRead() с сохранением analogWrite(). Для корректной работы надо перед ней написать строку, выключающую поведение блока АЦП перед его выключением: ADCSRA &= ~(1 << ADEN);. Но неясно, в каком вообще проекте может потребоваться отключать все АЦП - разве что, временно. Со слов гугла, экономит 200-300мА. К вопросу потребления RAM платформы: в Nano её всего 2КиБ. Была история с SD.h - воспроизвёл ещё раз прямо сейчас: сожрала одним только инклудом 38%. А вызов функций из неё - ещё сожрут: например, инклуда у Serial нет, но напиши его методы begin() и end() - 8% RAM сожрано. А Power.h жрёт всего 9Б инклудом. Не связано с типом платформы - оптимизировали очень хорошо. |
|
| Обновлено ( 11.11.2026 23:30 ) |