5

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

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

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


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


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

0
Автор поста оценил этот комментарий

Поставь аппаратный выключатель на 2х полевиках.


Вот такая простая схема.


Ps туплю, тут видимо на все одна кнопка... Ну можно как-то выключение не конденсатором организовать, а микроконтроллером.

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

Кстати, подумывал об этом, но у меня есть цель на этом примере хорошо разобраться с режимами работы контроллера

1
Автор поста оценил этот комментарий

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


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

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

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

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

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

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

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

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

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

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

Нет, но ты ж костыль делаешь, знать должен как делей работает. Вешаешь следующий таймер любой или тот же на код интом и у него задержку нужную

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

Ок, надо попробовать

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

Добавь delay да проверь. Суть - ты руками пишешь, да, пара строк, но должна быть. Я такое только на stm32 делал, конкретнее не скажу.

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

А delay в обработчиках прерываний разве корректно использовать?

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

Даташит курили?

Как вариант, посмотрите библиотеки. Совсем недавно делал подобное, но по таймеру, все прекрасно на тиньке работает.

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

А вы как думаете?


Библиотеки чего? Выхода из power down режима? Как мне кажется если искать для таких целей библиотеку то стоит не выходить за рамки "поморгать-светодиодом на ардуине". К тому же у тринашки только 1к флэша


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

показать ответы