Очень полезная тема, спасибо! Это как раз то, что мне нужно для разработки устройства с миниатюрным источником питания. А если ставить устройство на ☀️, то знание этой темы позволяет сильно сэкономить на размерах солнечной панели и заряжаемого ею аккумулятора.
@@neoalternator Микроконтроллеры AVR - потрясная вещь! Оказывается, их придумали, разработали всю линейку (каких только нет! вот и с радиопередатчиком, я смотрю, есть) в США в конце 90-х - начале 2000-х. Всё продумано, всё прекрасно, возможности широки и безграничны. Нет ничего умнее на свете! Думаю, за Attiny американцам можно всё простить и дружить с ними.
@@user-wq4sd6tr6x Согласен! Считаю, что их большой плюс - очень понятная и доступная для освоения документация. Возможно благодаря этому много пользовательских библиотек к этим мк и проектов на их основе.
@@neoalternator Получается что на 1 секунду на каждую 1 минуту может просыпаться , чтобы сделать замер показателей и отправить данные на базу (центр управления) так чтобы таблетку хватило на 1 год !??? Правильно ли я подсчитал ?
Как всегда отличное познавательное видео!. Ещё, может я прослушал, но не услышал, что использовать ватчдог не по прямому назначению (а именно - reset зависшей программы) можно только в Attiny13. (хотя может и в других малютках можно, поправьте если что...)
Спасибо за отзыв! У большинства работает и на прерывание. У Т10, Т13, Т25/45/85 точно работает и на прерывание и на ресет. Всегда можно уточнить в даташите в таблице Watchdog Timer Configuration
Подскажите, а сам "переход" в режим энергосбережения накладный? Если у меня, скажем задача каждые 100мс изменять параметры свечения RGB светодиода. Будет ли смысл погружаться в режим энергосбережения между этими действиями? При какой частоте необходимости просыпаться смысл в "засыпании" отпадёт?
Спасибо, очень интересно. Возник такой вопрос, при каком времени простоя есть смысл усыплять мк? В плане расхода энергии. Если простой 10? А если секунда? Пол секунды? Есть ли дополнительные расходы энергии на усыпление/пробуждение? Спасибо
Привет. Видать у тебя мультиметр не могЁт измерять малые токи ну или просто врёт. В режиме ПоверДаун тинька должна кушать меньше 1 микроампера а с включённым ВачДогом примерно 5 микроампер. А для наших мигалочек это очень важно знать )))
Спасибо! Ждал этого видео. Но увидел не все, что хотел. В комментариях к видео о WDT, я спрашивал о пробуждении от внешних прерываний PCINT. Именно о них, так как пинов с такой возможностью у МК больше, чем с INT (например когда нужно пробуждаться от нескольких источников команд). Значит спрошу здесь ))). При работе с пинами внешних прерываний PCINT команда "attachInterrupt" тоже работает? Ею можно назначить любой из пинов PCINT для выполнения функции по внешнему прерыванию? Читал, что вроде эта команда работает только с пинами прерываний INT. Буду благодарен за ответ. Если неправ - поправьте.
Это тема тянет на отдельное видео. Постараюсь его опубликовать на ближайших выходных. Ардуиновская attachInterrupt может работать только с INT0, INT1 и т.д. Активировать и работать с PCINT нужно через регистры и отслеживание вектора прерывания. В общем тема хорошая, интересная, так что скоро будет по ней видео!
@@neoalternator Спасибо, значит я не ошибся с "attachInterrupt". Опять придется ждать с нетерпением))). Насколько я смог разобраться с регистрами по даташиту (в моем случае Attiny 44), то для моих задач нужно: MCUCR |= (1
@@neoalternator Сегодня пробовал поиграться. Загнать в сон получилось. Выйти из сна тоже, но обратно в сон не уходит. По сути, образно, нужно чтобы после нажатия на кнопку МК проснулся, светодиод светился некоторое время, потом погас и МК уснул. Аналогично и с другими парами кнопка- светодиод. Код с задержкой на millis пробовал в обычном режиме - всё работает. После нажатия на кнопку светодиод светится заданное время. После того как задержка по millis проходит - светодиод гаснет. А вот с прерываниями он засвечивается и не гаснет. Видимо где-то нарушен порядок команд. Придется видимо ждать вашего видео ))).
Конкретно в Attiny13 есть два вида прерывания от пин. Сложное только на 6-й ноге INT0addrs (есть выбор какой "полярности" импульс запустит). Простое PCI0addrs на любой ноге (включая и 6ногу) - по любому изменению на ноге (с "0" на "1" и обратно). Пишу на ASM, проверяю в Proteus. К примеру, для проверки работы прерывания от любой ноги, вставляю в обработчик команду "inc R31" и вижу число "2" в регистре. Это потому что тактовая кнопка в одну сторону +1 и в обратную +1. Т.е. два раза срабатывает прерывание за одно нажатие (дребезг "протез" не учитывает). Ардуино плохо подходит для изучения таких маленьких (но удаленьких!) микроконтроллеров. Лучше найти хорошую старую книжку...
Millis криво работает, если используется прерывания. По сути, на время работы прерывания основной таймер останавливается. И видимо (мое предположение) функция millis зависает. Лучше использовать прерывание по переполнению таймера TIM0_OVF. Оно как раз позволяет установить периодичность включения/измерения чего-либо, пока микроконтроллер бодрствует.
У меня очень странно ведёт себя tiny13, Ваши примеры программ работают только при использовании языка С так сказать, а вот примеры с применением ардуиновских функций не работают от слова вообще, версия среды 1.8.13
Получается что на 1 секунду на каждую 1 минуту может просыпаться , чтобы сделать замер показателей и отправить данные на базу (центр управления) так чтобы таблетку хватило на 1 год !??? Правильно ли я подсчитал ?
Просыпаться он будет максимум каждые 8 секунд. Если нужно действие выполнять раз в минуту, то 7 раз будет просыпаться вхолостую, а на 8 раз, выполнять какое-то действие. На год таблетки должно хватить. В теории, даже дольше.
Либо будить по внешнему таймеру. Т.е. что-то снаружи считает время и когда нужно создает внешнее прерывание. Либо просыпаться по watchdog раз в 8 секунд, добавлять некой переменной единицу и снова засыпать. Это мизер с т.з. энергозатрат. И когда эта переменная станет например 5, выполнять какое-то действие и сбрасывать ее. Таким образом, выполняться задача будет раз в 40 секунд (8*5).