5

Attiny13 выход из power down режима сна

Делаю сейчас небольшую схемку для светильника на ws2812, использую прерывания по кнопке и прерывания по таймеру. По кнопке переключаю режимы (двойной клик), по таймеру переключаю фреймы анимации (если можно так это назвать). Захотелось мне аккум туда воткнуть, соответственно появилась необходимость в отключении питания, но добавлять хардварный тумблер не хочу, а хочу просто по удержанию кнопки засыпать-просыпаться (в power down режиме потребление достаточно низкое чтобы не париться на тему разряда аккума).

В сон вогнать получается, вектор прерывания для выхода из сна тоже отрабатывает, но ничего болше не работает. Тоесть по нажатию на кнопку когда контроллер в power down режиме отрабатывает вектор прерывания INT0, но больше ничего не заводится, вектор прерывания по таймеру молчит. Пишу на C, компиляю через avr-gcc и гружу через avrdude


Как правильно выйти из сна?


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

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Эх, давно это было...

Почитайте внимательно по фронтам сигнала с кнопки. Там какая-то заморока есть на тему восходящего или падающего.

Кнопка, короче, на + или -.

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

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

раскрыть ветку (3)
1
Автор поста оценил этот комментарий

А без sleep таймер запускается? Если этот кусок убрать?


А Вы конфигурацию таймера после пробуждения правильно возвращаете? Попробуйте его сконфигурировать повторно.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Без sleep все работает,  в обработчике INT0 конфиги таймера возвращаю, но думаю что нужно поиграться с delay как здесь советуют, так как есть подозрение что таймер не успевает запуститься.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Не надо delay. Там счёт идёт на несколько тактов всего. Просто ногой любой подрыгайте в цикле, а потом перезапустите таймер. Если проблема в этих тактах, этого должно быть достаточно.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку