0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 2
|
|
1 | |
Attiny85 и прерывания04.05.2018, 22:04. Показов 11762. Ответов 18
Метки нет Все метки)
(
Доброго времени суток!
Решил воплотить один из проектов (давних задумок ![]() Вкратце, имеется attiny85 и к нему подключается oled дисплей (к PB0(SDA) и PB2(SCL)) и при этом мне необходимо чтобы устройство экономило батарею (очень важно). И я начал искать информацию о режимах сна. По datasheet'у (таблица 7-1) я так понял, что все 6 рабочих портов могут быть источником прерываний, но для более глубокого сна (Power-down который я хотел выбрать) можно использовать только INT0 (PB0, к которому у меня подключен дисплей). И у меня возник вопрос: можно ли решить как-то эту проблему? Проверить сейчас я не могу, тинька еще не пришла по почте. Я не давно начал увлекаться микроконтроллерами, так что извините за такой вопрос ![]()
0
|
04.05.2018, 22:04 | |
Ответы с готовыми решениями:
18
[Вопрос] Перехват прерывания прямым доступом к вектору прерывания Вычислить адрес вектора прерывания по номеру прерывания. ATtiny85 |
![]() 4038 / 2583 / 431
Регистрация: 09.09.2017
Сообщений: 11,534
|
|
05.05.2018, 09:49 | 2 |
Там же написано что PCINT работают
0
|
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 2
|
|
05.05.2018, 11:29 [ТС] | 3 |
но там есть пометка в разделе Wake-up Source для режима Power-down X(1) и внизу пометка Note: 1 For INT0, only level interrupt. Вот этот момент я не очень разобрал и поэтому спрашиваю
Добавлено через 1 минуту но там есть пометка в разделе Wake-up Source для режима Power-down X(1) и внизу пометка Note: 1 For INT0, only level interrupt. Вот этот момент я не очень разобрал и поэтому спрашиваю
0
|
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
|
|
05.05.2018, 15:18 | 4 |
Да у всех АВР есть такие особенности. Это называется синхронные и асинхронные прерывания.
Одни из них могут будить из глубокого power down , другие - нет. Вникайте. Там еще есть такая фишка, что сигнал на порту прерывания должно действовать достаточно долго, чтобы контроллер успел запустить кварц, стартовать и все такое. а это не мало времени в рамках скорости работы контроллера.Иначе может быть такой вариант, что контроллер запуститься, а сам сигнал прерывания не успеет повлиять на (выставить) свой флаг. И само прерывание не сработает! Добавлено через 3 минуты вот это как раз оно и есть кажись. Имеется ввиду что прерывание должно быть настроено на уровень (низкий или высокий), а не на положительный/отрицательный фронт сигнала. Чтобы пробуждение сработало в этом случае. Добавлено через 3 минуты так что здесь без вариантов можно использовать только INT0 под вашу задачу, да еще и правильно настроить, иначе и оно работать не будет.
1
|
![]() 4038 / 2583 / 431
Регистрация: 09.09.2017
Сообщений: 11,534
|
|
05.05.2018, 18:04 | 6 |
"для INT0 - только прерывание по уровню". Дело в том что INTx настраиваются на прерывание по низкому уровню, по изменению, по фронту и по спаду (4 варианта), из них работает только первый. Про PCINT в примечании ничего не сказано, да он и не настраивается - всегда по изменению.
0
|
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
|
|
05.05.2018, 18:15 | 7 |
вот именно, по изменению прерывание срабатывает если в течение одного такта контроллера было "H"
потом в течение следующего "L", контроллер интерпретирует это как спад, и, запускает прерывание (если оно было настроено по спаду). Таким же образом с "L" на "H" работает. Контроллер в POWER DOWN не тактируется, и такие прерывания в принципе работать не могут. Поэтому INT0 и только он, настроенный по уровню. например настраиваешь его на срабатывание по низкому уровню. подтягиваешь его снаружи резистором к плюсу. И, теперь если что то, кнопка на минус, например этот уровень роняет, контроллер выйдет из POWER DOWN и, если успеет до отпускания кнопки, обработает это прерывание.
0
|
![]() 4038 / 2583 / 431
Регистрация: 09.09.2017
Сообщений: 11,534
|
|
06.05.2018, 10:09 | 8 |
Хотите сказать что в даташите ошибка?
Добавлено через 4 минуты Как и следовало ожидать... пункт 9.2
1
|
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
|
|
06.05.2018, 10:30 | 9 |
эээ ну насколько я помню, вот об этом и идет речь. нужно чтобы тактирование работало. значит
- в этих режимах тактирование НЕ выключается. и побудка по PCINT[5:0] возможна. А вот из POWER DOWN уже нет. только
INT0 разбудит. PS. это только наводка, принцип так сказать. Читайте datasheet вашего девайса. Короче асинхронные прерывания не срабатывают когда нет тактирования.
1
|
![]() 1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
06.05.2018, 19:41 | 10 |
Через микросхему ИЛИ замкнуть все пины на INT0, перед засыпанием включить это прерывание, а после пробуждения - выключить и определить конкретный источник по номеру пина, на который пришла единица.
0
|
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
|
|
06.05.2018, 21:41 | 11 |
а ну да, так можно. Внешней обвязкой.
А можно и не выключать прерывание на INT0, просто в обработчик одну команду вписать - RETI и все. будить все равно будет. А то что проц в рабочем состоянии на пару тактов влетает в прерывание INT0 (оно же скорее всего имеет больший приоритет) а потом только в PCINTx, тормозить особо не будет. Ну если критично тогда перед powerdown включайте, а после побудки выключайте.
0
|
![]() 1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
06.05.2018, 22:14 | 12 |
0
|
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
|
|
06.05.2018, 22:34 | 13 |
Сейчас еще раз прочитал, что ТС спрашивал:
Да ему PCINT были нужны только чтобы дисплею не мешать. тогда вообще нет проблем. Сделайте схему так, чтобы какая нибудь кнопка клавиатуры или чего там у вас при нажатии дергала INT0, настройте прерывание INT0 как надо (по уровню) А после побудки первым делом как раз выключайте его, чтобы во время работы не срабатывал. А в прерывании таймера (по переполнению например) который будет отсчитывать таймаут до POWER DOWN - напишите в первую очередь сбрасывать флаг INT0 - сбрасывается записью лог. 1 !!! не перепутайте. А затем разрешение INT0 прерывание, и после уход в даун. Сброс флага важен, если он все же случайно выставился во время работы, а то не даст уйти в POWER DOWN. У меня такая ситуация с контроллером тачскрина была, поэтому советую так поступить. И будет все работать параллельно с дисплеем и его работе мешать не будет.
0
|
![]() 4038 / 2583 / 431
Регистрация: 09.09.2017
Сообщений: 11,534
|
|
07.05.2018, 12:11 | 14 |
Слово "asynchronously" самостоятельно переведете?
А фразу "other than <> mode"? И чем же они тогда отличаются от синхронных (которые тактируются от основного генератора)? . Это ж надо с таким уверенным видом нести чушь. Асинхронные блоки потому так и называются что не тактируются от основного генератора, а значит могут работать когда он остановлен. К примеру, таймер в асинхронном режиме тактируется от внешнего часового кварца, при этом сам контроллер может спать в любом режиме. Но когда у таймера возникнет прерывание, оно разбудит ядро. То же самое с другими модулями. . Короче, используйте PCINT и не мучайтесь. В даташите черным по белому сказано что из PowerDown он вывести в состоянии.
0
|
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
|
|
07.05.2018, 19:32 | 15 |
Говорил же читайте даташит,.. я его значит сам не правильно понял ![]() Только сейчас разглядел в заголовке столбца таблицы в первом сообщении "int0 and pin change" То есть и то и то сработает, только int0 если используешь надо настраивать "по уровню" Ступил че то. ![]()
0
|
17 / 16 / 1
Регистрация: 23.01.2019
Сообщений: 99
|
|
13.12.2019, 18:32 | 16 |
Сейчас гуглю про INT0 на Attiny85, вынесло сюда.
Внимательно прочитал всю ветку, в первом посте ошибка: INT0 -> PB2
0
|
0 / 0 / 0
Регистрация: 05.06.2020
Сообщений: 3
|
|||||||||||||||||||||
08.02.2021, 09:57 | 17 | ||||||||||||||||||||
Можно попробовать в setup поменять маску:
Все работало, но с небольшим подтормаживанием ![]()
0
|
![]() 1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
08.02.2021, 10:14 | 18 |
0
|
0 / 0 / 0
Регистрация: 05.06.2020
Сообщений: 3
|
|
08.02.2021, 11:15 | 19 |
этот код я писал в ардуино иде для attiny85 с подключенным ядром attiny25/45/85
0
|
08.02.2021, 11:15 | |
Помогаю со студенческими работами здесь
19
Проблема с ATtiny85 Самопрограммирование Attiny85 Вызов прерывания в обработке прерывания ATTiny85 через Sinaprog Тайна 5-го пина Attiny85 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
|
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
|
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
|
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
|
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
|
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
|
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
|
Разработка кроссплатформенного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
|
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
|
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
|