Например TDA7294

Форум РадиоКот • Просмотр темы - ATtiny45 - странность с внешним прерыванием
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 00:43:52

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 25 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 15:43:17 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Есть МК ATtiny45, тактирование от watchdog осциллятора (128 кГц). Чип стоит в спящем режиме (глубокий сон, осциллятор выключен) и просыпается по нажатию кнопки на PB2 (внешнее прерывание по смене уровня). Кнопка подаёт на вход логическую единицу, сам вход подвязан резистором на ноль. Проверял код в Протеусе - всё идеально.
В реальном железе иногда (порядка 1 из 10 нажатий кнопки) наблюдаю такую ситуацию. Нажимаю кнопку (и держу её достаточно долго, не меньше 0.5 с) - чип просыпается, но ведёт себя так, как будто не выполнил обработчик прерывания и вывалился сразу в основной цикл. При этом в основном цикле он также проверяет состояние порта PB2 и видит на нём единицу. Если чип увидел на входе единицу, проснулся и продолжает видеть единицу, почему он не выполнил обработчик прерывания?

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Последний раз редактировалось watchmaker Сб июл 19, 2025 19:21:16, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 17:13:33 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 76
Зарегистрирован: Пт ноя 22, 2024 14:08:43
Сообщений: 550
Рейтинг сообщения: 0
_______ATtiny45 - странность
Есть МК ATtiny25
--------
твоя программа, себе и задавай вопросы....)))))
watchmaker писал(а):
чип просыпается

так, может, он и спать в тот раз не ложился...)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 19:25:54 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
так, может, он и спать в тот раз не ложился...)))

Ложится спать как раз исправно, это видно по нулевому потреблению (в рабочем режиме потребление 50..100 мкА). Просыпается при нажатии кнопки тоже чётко. Но дальше действует так, как будто в переменных занесены их предыдущие значения, тогда как в обработчике прерывания вызывается функция, которая инициализирует их.
Смущает то, что если на этот же вход сигнал приходит не с кнопки, а из другого источника (с платы электронных часов), таких проблем не бывает.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 19:29:41 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 76
Зарегистрирован: Пт ноя 22, 2024 14:08:43
Сообщений: 550
Рейтинг сообщения: 0
дребезг не отработал...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 19:46:04 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Кнопка не механическая, а на токопроводящей резинке - вряд ли она дребезжит. К тому же с кнопки идёт постоянное напряжение, а с часов - импульсы 4 кГц. При этом сигнал с часов всегда отрабатывается чётко.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 19:58:34 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 906
Откуда: ВО
Рейтинг сообщения: 0
Цитата:
Кнопка не механическая, а на токопроводящей резинке - вряд ли она дребезжит.
Это врядли


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 21:03:26 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1636
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
watchmaker, ответь на вопрос о МК без програмного опубликованного кода ... это как размышления гадалки, смотрящей в хрустальный шар ... Предоставьте код или хотя бы фрагмент кода, отвечающий за это. (частично пользуюсь переводчиком)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Сб июл 19, 2025 22:41:15 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
В начале мейна так:
Код:
asm("cli");
   TIMSK=BIT(OCIE0A);
   GIMSK=BIT(PCIE);
   PCMSK=BIT(PCINT2);
   asm("sei");
   MCUCR=BIT(SE)|BIT(SM1);
   melody_stop();


Внутри функции melody_stop() проверка нескольких условий, затем playing = 0 (важно!) и asm("sleep").

В обработчике прерывания:
Код:
ISR(PCINT0_vect)
{
      full=0;
      pos=0;
           melody_start();
}

Здесь важно melody_start(), где выставляется playing = 1, и то, что перед этим выставляется pos = 0. При нажатии кнопки иногда чип ведёт себя так, как будто он проснулся, НО в переменной playing остался ноль, т. е. ни одна из строчек в обработчике прерывания не выполнилась, а вместо этого сразу произошёл переход в основной цикл. Дальше в основном цикле опять выполняется
Код:
if(playing==0)
   melody_stop();

а там
Код:
if (PINB&BIT(2))
      {
         pos=determine_pos(m_index);
         melody_start();
         return;
      }

Этот кусок кода нужен для того, чтобы играть мелодию повторно при постоянно нажатой кнопке (при штатной работе по окончании проигрывания ставится playing = 0).
Важна первая строчка - функция determine_pos(m_index) выполняет поиск определённых значений в массиве и в итоге пишет в pos отличное от нуля значение. Если обработчик прерывания выполнился, playing должно равняться 1, соответственно функция melody_stop() выполняться не должна, и в переменной pos останется ноль.
Если в pos ноль, пищалка на выходе подаст короткий сигнал, если найденное в determine_pos(m_index) значение - мелодию.
Иногда при нажатии на кнопку немедленно начинает проигрываться мелодия (она должна проигрываться только при удержании кнопки больше примерно 0.6 секунды). То есть три строчки в последнем фрагменте однозначно выполняются. Получается, МК видит, что на PB2 единица, но почему тогда он не видит переход с 0 в 1 на этом пине и не выполняет обработчик прерывания?

Возможно ли такое, если напряжение на пине при нажатии на кнопку возрастает слишком медленно? С кнопками на токопроводящей резине такое бывает.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Вс июл 20, 2025 13:14:20 
Это не хвост, это антенна
Аватар пользователя

Карма: 15
Рейтинг сообщений: 218
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1470
Откуда: Тюмень
Рейтинг сообщения: 0
Есть МК ATtiny45, тактирование от watchdog осциллятора (128 кГц).

Поясните, в каком разделе даташита можно прочитать как настроить тактирование МК от сторожевого таймера?
Цитата:
Чип стоит в спящем режиме (глубокий сон, осциллятор выключен) и просыпается по нажатию кнопки на PB2 (внешнее прерывание по смене уровня). Кнопка подаёт на вход логическую единицу, сам вход подвязан резистором на ноль. Проверял код в Протеусе - всё идеально.

Всё дело в том, что из глубокого сна (Power-down) разбудить внешним прерывание от INT0 можно лишь когда он настроен на контроль низкого уровня. Потому при использовании прерывания по INT0, когда вы переводите МК в выключенное состояние (Power-down), то биты ISC01; ISC00, регистра MCUCR переводятся автоматически в нулевое состояние, которое соответствует прерыванию по низкому уровню. А так как вы подтянули вывод РВ2 через резистор к общей шине (GND), то могу предположить, что ваш МК засыпая вновь просыпается от внешнего прерывания по низкому уровню INT0... таким образом выйдя из прерывания МК отработав одно действие из основного цикла уходит в новь на прерывание и так далее...
Цитата:
чип просыпается,

Предполагаю что ваш чип из вышеописанного практически не спит, а значит он не просыпается а постоянно находится в работе периодически отрабатывая прерывание по INT0. :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Вс июл 20, 2025 14:21:39 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
Поясните, в каком разделе даташита можно прочитать как настроить тактирование МК от сторожевого таймера?

6.2 Clock Sources, CKSEL[3:0] = 0100. Это тот же малопотребляющий внутренний генератор, который используется для watchdog.
Цитата:
Всё дело в том, что из глубокого сна (Power-down) разбудить внешним прерывание от INT0 можно лишь когда он настроен на контроль низкого уровня.

У меня вообще-то Pin Change Interrupt (PCINT2), который работает асинхронно независимо от уровня (раздел 9.2).
Цитата:
Pin change interrupts PCI will trigger if any enabled PCINT[5:0] pin toggles. The
PCMSK Register control which pins contribute to the pin change interrupts. 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.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Вс июл 20, 2025 15:58:52 
Это не хвост, это антенна
Аватар пользователя

Карма: 15
Рейтинг сообщений: 218
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1470
Откуда: Тюмень
Рейтинг сообщения: 0
6.2 Clock Sources, CKSEL[3:0] = 0100. Это тот же малопотребляющий внутренний генератор, который используется для watchdog.

Это понятно... у вас было написано:
Цитата:
тактирование от watchdog осциллятора

И я понял, что тактируется ваш МК именно от watchdog (сторожевого таймера)... :facepalm: Вот и задал уточняющий вопрос.
Цитата:
У меня вообще-то Pin Change Interrupt (PCINT2)

Теперь понятно... значит и тут я не правильно понял... :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Пн июл 21, 2025 11:02:05 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
Кнопка не механическая, а на токопроводящей резинке

Вы токопроводящею резинку называете не механической?
watchmaker писал(а):
в обработчике прерывания вызывается функция, которая инициализирует их.

Может более логично в прерывании установить флаг, а все остальное делать в майн.
Там сразу запретить прерывание и отработать нужный код. Перед сном сбросить флаг прерывания и уйти в сон.
Это отбросит повторные прерывания от дребезга кнопки.

Добавлено after 24 minutes 30 seconds:
Попробуйте подавить дребезг при помощи RC цепочки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Пн июл 21, 2025 12:31:06 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
Там сразу запретить прерывание и отработать нужный код. Перед сном сбросить флаг прерывания и уйти в сон.

Я почти так и делаю - прерывание запрещается, потом разрешается при уходе в сон.
Цитата:
Это отбросит повторные прерывания от дребезга кнопки.

Повторные прерывания (даже если их два-три подряд) не мешают, мешает ОТСУТСТВИЕ прерывания при пробуждении чипа.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Пн июл 21, 2025 15:15:20 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
watchmaker писал(а):
мешает ОТСУТСТВИЕ прерывания при пробуждении чипа.

Сморели от чего он проснулся?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Пн июл 21, 2025 16:42:20 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
watchmaker писал(а):
мешает ОТСУТСТВИЕ прерывания при пробуждении чипа.
без возникновения прерывания не будут и пробуждения.
если же чип проснулся, то прерывание ПРОИЗОШЛО.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Пн июл 21, 2025 20:51:42 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
Сморели от чего он проснулся?

А от чего он может проснуться, если не от сигнала на PB2?

Цитата:
если же чип проснулся, то прерывание ПРОИЗОШЛО.

А почему тогда в обработчике прерывания не отработала ни одна строка? Глючный экземпляр чипа? Смущает, что на других часах с такой же схемой и с теми же исходниками, но с ATtiny85 этой ситуации никогда не было.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Пн июл 21, 2025 21:42:40 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
watchmaker писал(а):
мешает ОТСУТСТВИЕ прерывания при пробуждении чипа.
watchmaker писал(а):
А от чего он может проснуться, если не от сигнала на PB2?

Чудеса однако.
То что вы не видите то, что ожидаете, не означает, что оно произошло или не произошло.
Не знаю есть ли в аттини, но в других показывает источник ресета.
Меняйте стиль программы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Вт июл 22, 2025 01:32:44 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
Не знаю есть ли в аттини, но в других показывает источник ресета.

Ресета у меня никакого нет, все данные остаются на месте.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Вт июл 22, 2025 10:01:34 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
Вы только препологаете, на самом деле надо проверять все возможные варианты, особенно когда не можете обьяснить поведение программы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny45 - странность с внешним прерыванием
СообщениеДобавлено: Вт июл 22, 2025 12:10:52 
Поставщик валерьянки для Кота

Карма: 34
Рейтинг сообщений: 313
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 2084
Откуда: Харьков
Рейтинг сообщения: 0
Если сделать ресет, чип инициализирует ещё несколько переменных, это сразу будет видно по поведению.

_________________
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 62


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y