Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/63: Рейтинг темы: голосов - 63, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 04.05.2018
Сообщений: 2
1

Attiny85 и прерывания

04.05.2018, 22:04. Показов 11762. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Решил воплотить один из проектов (давних задумок), но столкнулся с одной проблемой.
Вкратце, имеется attiny85 и к нему подключается oled дисплей (к PB0(SDA) и PB2(SCL)) и при этом мне необходимо чтобы устройство экономило батарею (очень важно).
И я начал искать информацию о режимах сна.
По datasheet'у (таблица 7-1) я так понял, что все 6 рабочих портов могут быть источником прерываний, но для более глубокого сна (Power-down который я хотел выбрать) можно использовать только INT0 (PB0, к которому у меня подключен дисплей).
И у меня возник вопрос: можно ли решить как-то эту проблему?
Проверить сейчас я не могу, тинька еще не пришла по почте.
Я не давно начал увлекаться микроконтроллерами, так что извините за такой вопрос.
Миниатюры
Attiny85 и прерывания   Attiny85 и прерывания  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2018, 22:04
Ответы с готовыми решениями:

[Вопрос] Перехват прерывания прямым доступом к вектору прерывания
Всех приветствую! В данный момент разбираюсь с обработкой аппаратного прерывания (прерывание таймера 08h и 1Ch, -//- клавиатуры 09h). ...

Вычислить адрес вектора прерывания по номеру прерывания.
17. По заданному номеру прерывания (13 h) вычислите логические адреса хранения исходных адресов обработчиков прерывания в таблице векторов....

ATtiny85
Привет всем. Делаю для себя одно устройство. Использую плату от Digispark с ATtiny85 на борту. Доступно шесть выводов. Мне нужно два...

18
 Аватар для COKPOWEHEU
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 минуту
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Там же написано что PCINT работают
но там есть пометка в разделе 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 минуты
Цитата Сообщение от SeaFox666 Посмотреть сообщение
For INT0, only level interrupt
вот это как раз оно и есть кажись. Имеется ввиду что прерывание должно быть настроено на уровень (низкий или высокий),
а не на положительный/отрицательный фронт сигнала. Чтобы пробуждение сработало в этом случае.

Добавлено через 3 минуты
Цитата Сообщение от SeaFox666 Посмотреть сообщение
можно ли решить как-то эту проблему?
так что здесь без вариантов можно использовать только INT0 под вашу задачу, да еще и правильно настроить,
иначе и оно работать не будет.
1
Модератор
Эксперт по электронике
8956 / 6722 / 921
Регистрация: 14.02.2011
Сообщений: 23,731
05.05.2018, 16:40 5
Цитата Сообщение от SeaFox666 Посмотреть сообщение
Проверить сейчас я не могу, тинька еще не пришла по почте.
попробуй протеус
виртуальная электронная схема
0
 Аватар для COKPOWEHEU
4038 / 2583 / 431
Регистрация: 09.09.2017
Сообщений: 11,534
05.05.2018, 18:04 6
Цитата Сообщение от SeaFox666 Посмотреть сообщение
пометка Note: 1 For INT0, only level interrupt
"для INT0 - только прерывание по уровню". Дело в том что INTx настраиваются на прерывание по низкому уровню, по изменению, по фронту и по спаду (4 варианта), из них работает только первый. Про PCINT в примечании ничего не сказано, да он и не настраивается - всегда по изменению.
0
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
05.05.2018, 18:15 7
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
да он и не настраивается - всегда по изменению.
вот именно, по изменению прерывание срабатывает если в течение одного такта контроллера было "H"
потом в течение следующего "L", контроллер интерпретирует это как спад, и, запускает прерывание
(если оно было настроено по спаду). Таким же образом с "L" на "H" работает.
Контроллер в POWER DOWN не тактируется, и такие прерывания в принципе работать не могут.
Поэтому INT0 и только он, настроенный по уровню.
например настраиваешь его на срабатывание по низкому уровню. подтягиваешь его снаружи резистором к плюсу.
И, теперь если что то, кнопка на минус, например этот уровень роняет, контроллер выйдет из POWER DOWN
и, если успеет до отпускания кнопки, обработает это прерывание.
0
 Аватар для COKPOWEHEU
4038 / 2583 / 431
Регистрация: 09.09.2017
Сообщений: 11,534
06.05.2018, 10:09 8
Цитата Сообщение от HerrSchneider Посмотреть сообщение
Контроллер в POWER DOWN не тактируется, и такие прерывания в принципе работать не могут.
Хотите сказать что в даташите ошибка?

Добавлено через 4 минуты
Как и следовало ожидать...
пункт 9.2
Pin change interrupts on PCINT[5:0] are detected asynchronously. This implies that these interrupts can be used for waking the part also from sleep modes other than Idle mode.
1
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
06.05.2018, 10:30 9
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
are detected asynchronously. T
эээ ну насколько я помню, вот об этом и идет речь. нужно чтобы тактирование работало. значит
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
sleep modes other than Idle mode
- в этих режимах тактирование НЕ выключается. и побудка по PCINT[5:0] возможна. А вот из POWER DOWN уже нет. только
INT0 разбудит.
PS. это только наводка, принцип так сказать. Читайте datasheet вашего девайса.
Короче асинхронные прерывания не срабатывают когда нет тактирования.
1
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
06.05.2018, 19:41 10
Цитата Сообщение от SeaFox666 Посмотреть сообщение
И у меня возник вопрос: можно ли решить как-то эту проблему?
Через микросхему ИЛИ замкнуть все пины на INT0, перед засыпанием включить это прерывание, а после пробуждения - выключить и определить конкретный источник по номеру пина, на который пришла единица.
0
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
06.05.2018, 21:41 11
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
а после пробуждения - выключить и определить конкретный источник по номеру пина
а ну да, так можно. Внешней обвязкой.
А можно и не выключать прерывание на INT0, просто в обработчик одну команду вписать - RETI и все. будить все равно будет.
А то что проц в рабочем состоянии на пару тактов влетает в прерывание INT0 (оно же скорее всего имеет больший приоритет) а потом только в PCINTx, тормозить особо не будет. Ну если критично тогда перед powerdown включайте, а после побудки выключайте.
0
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
06.05.2018, 22:14 12
Цитата Сообщение от HerrSchneider Посмотреть сообщение
а потом только в PCINTx
Их вообще включать не надо.
0
13 / 11 / 4
Регистрация: 08.07.2017
Сообщений: 103
06.05.2018, 22:34 13
Сейчас еще раз прочитал, что ТС спрашивал:
Цитата Сообщение от SeaFox666 Посмотреть сообщение
но для более глубокого сна (Power-down который я хотел выбрать) можно использовать только INT0 (PB0, к которому у меня подключен дисплей).
Да ему PCINT были нужны только чтобы дисплею не мешать. тогда вообще нет проблем. Сделайте схему так, чтобы какая нибудь кнопка клавиатуры или чего там у вас при нажатии дергала INT0, настройте прерывание INT0 как надо (по уровню)
А после побудки первым делом как раз выключайте его, чтобы во время работы не срабатывал. А в прерывании таймера (по переполнению например) который будет отсчитывать таймаут до POWER DOWN - напишите в первую очередь сбрасывать флаг INT0 - сбрасывается записью лог. 1 !!! не перепутайте. А затем разрешение INT0 прерывание, и после уход в даун.
Сброс флага важен, если он все же случайно выставился во время работы, а то не даст уйти в POWER DOWN.
У меня такая ситуация с контроллером тачскрина была, поэтому советую так поступить.

И будет все работать параллельно с дисплеем и его работе мешать не будет.
0
 Аватар для COKPOWEHEU
4038 / 2583 / 431
Регистрация: 09.09.2017
Сообщений: 11,534
07.05.2018, 12:11 14
Цитата Сообщение от HerrSchneider Посмотреть сообщение
нужно чтобы тактирование работало. значит
Слово "asynchronously" самостоятельно переведете?
Цитата Сообщение от HerrSchneider Посмотреть сообщение
sleep modes other than Idle mode
- в этих режимах тактирование НЕ выключается
А фразу "other than <> mode"?
Цитата Сообщение от HerrSchneider Посмотреть сообщение
Короче асинхронные прерывания не срабатывают когда нет тактирования
И чем же они тогда отличаются от синхронных (которые тактируются от основного генератора)?
.
Это ж надо с таким уверенным видом нести чушь. Асинхронные блоки потому так и называются что не тактируются от основного генератора, а значит могут работать когда он остановлен. К примеру, таймер в асинхронном режиме тактируется от внешнего часового кварца, при этом сам контроллер может спать в любом режиме. Но когда у таймера возникнет прерывание, оно разбудит ядро. То же самое с другими модулями.
.
Короче, используйте 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, вынесло сюда.
Внимательно прочитал всю ветку, в первом посте ошибка:
Цитата Сообщение от SeaFox666 Посмотреть сообщение
INT0 (PB0, к которому у меня подключен дисплей).
INT0 -> PB2
0
0 / 0 / 0
Регистрация: 05.06.2020
Сообщений: 3
08.02.2021, 09:57 17
Можно попробовать в setup поменять маску:

C
1
2
3
4
5
  PCMSK = 0b00000100; //turn on interrupts on pins PB2
  //PCMSK = 0b00101010; //turn on interrupts on pins PB1,PB3,PB5
  GIMSK |= 0b00100000;  // enable PCINT interrupt
  sei();                // enable all interrupts
  ssd1306_init();       // initialise the screen
а в loop добавить:
C
1
attachInterrupt(0, yourControl, CHANGE);
C
1
2
3
4
5
6
7
// PB0 pin button interrupt
ISR(PCINT0_vect) { // for power down deep sleep
  //if (PINB & (1 << PINB2)) {return;}
  if (keyLock == 0) { 
    keyLock = 6; // Nothing complicated to do here - this is picked up in the handleInput() function
  }
}
в глубокий сон хорошо загоняет вот эта функция (было взято у Sleep code from http://www.re-innovation.co.uk... attiny85):
C
1
2
3
4
5
6
7
8
9
10
11
void system_sleep() {
  ssd1306_fillscreen(0x00);
  ssd1306_send_command(0xAE);          // display off
  cbi(ADCSRA, ADEN);                   // switch Analog to DigitalconVERTDRAWer OFF
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
  sleep_enable();
  sleep_mode();                        // System actually sleeps here
  sleep_disable();                     // System continues execution here when watchdog timed out
  sbi(ADCSRA, ADEN);                   // switch Analog to DigitalconVERTDRAWer ON
  ssd1306_send_command(0xAF);          // --turn on oled panel
}
была аналогичная ситуация, когда пришлось кнопку сажать на PINB1, тогда как на PINB0 сидела шина данных sda.
Все работало, но с небольшим подтормаживанием
0
 Аватар для Voland_
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
08.02.2021, 10:14 18
Цитата Сообщение от DmitryPetrov Посмотреть сообщение
attachInterrupt(0, yourControl, CHANGE);
тема вроде бы не относилась к Ардуино? Или я что-то путаю?
0
0 / 0 / 0
Регистрация: 05.06.2020
Сообщений: 3
08.02.2021, 11:15 19
этот код я писал в ардуино иде для attiny85 с подключенным ядром attiny25/45/85
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2021, 11:15
Помогаю со студенческими работами здесь

Проблема с ATtiny85
В общем пытались запрогать эту злую кремнивую хмакодявку а она не захотела определяться PinBordовским суперпрогом. Вот вопрос один...

Самопрограммирование Attiny85
Всем привет, люди, подскажите плиз, есть ли возможность реализовать частичное стирание памяти программ данного МК, то есть чтобы он...

Вызов прерывания в обработке прерывания
В программе,нажатие кнопки вызывает прерывание,в котором оно обрабатывается.Попутно в обработке этого прерывания запускается таймер по...

ATTiny85 через Sinaprog
Здравствуйте пытаюсь прошить нию через пинборд. Выводит avrdude -C avrdude.conf -c pinb -P ft0 -B 14400 -p t85 -q avrdude:...

Тайна 5-го пина Attiny85
Коллеги, приветствую всех, есть необходимость воспользоваться PB5 как входом АЦП (PCINT5/RESIT/ADC0/dW), все остальные входы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Неблокируемый стек в 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. Эта версия включает ряд значительных улучшений в работе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru