РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

Форум на ЭЛВО


РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ



Архив - только для чтения
Бортовой компьютер на мотоцикл
Сообщение # 31        
msmmmm
аватар
  Постов: 891   Друзья 
Тёмыч, не вижу команды глобального разрешения прерываний.
Сообщение # 32        
Тёмыч
аватар
  Постов: 759   Друзья 
msmmmm, это разумеется в коде есть:

// Global enable interrupts
#asm("sei")


и прерывания то работают, там в программе по ним ещё и импульсы считываются с датчика скорости. Но до того момента пока контроллер не заснёт.

Вот код:

Сообщение # 33        
msmmmm
аватар
  Постов: 891   Друзья 
Пробуй в реале. Вроде бы косяков нет. Может Протеус балуется. Внешний инт должен асинхронно будить с любым тактовым генератором. Не пойдет - тогда будем ум морщить.
Сообщение # 34        
Тёмыч
аватар
  Постов: 759   Друзья 
msmmmm, хорошо, попробую потом отпишусь, спасибо smile

Добавлено (03.03.2017, 10:45)
---------------------------------------------
msmmmm, попробовал, в реале тоже работать не хочет, значит в чём то накосячил sad

Добавлено (03.03.2017, 13:41)
---------------------------------------------
msmmmm, попробовал отработать эту проблему, сделал минимально возможную программу и вот что получилось: работает только если внешнее прерывание настроено на срабатывание по низкому уровню, остальные три режима не функционируют (изначально у меня стоял режим "по переднему фронту").

Добавлено (03.03.2017, 13:47)
---------------------------------------------
проблема в том, что при включении зажигания будет подаваться плюс на вход МК, и если использовать INT0 Mode: Low level, то придётся сигнал инвертировать, а плата уже готова и на это не рассчитана sad

Сообщение # 35        
msmmmm
аватар
  Постов: 891   Друзья 
Тёмыч, собирался еще утром написать, но только сейчас до компа добрался - работа. В режиме Power-down МК отключен почти полностью, в т.ч. и его тактовый генератор, а прерывания по изменению уровня синхронизируются именно с ним. В даташите указано, что выход из режима Power-down возможен только прерывания по низкому уровню, но это не совсем так, по крайней мере из моего опыта. Просыпается МК и по остальным типам прерываний int, но само прерывание не обрабатывается. Происходит это потому, что выход из глубокого сна длителен и подобен сбросу, только программный счетчик не изменяется. Изменился уровень, пошла команда на включение МК, завелся генератор, выдержалось время стабилизации генератора и лишь затем такты пошли на АЛУ. Все это время даже флаг не может измениться - отсутствует тактовая частота. После просыпания МК не видит, что было прерывание (прерывание реагирует на изменения уровня, а оно уже произошло) и не обрабатывает его, а выполняет дальше программу. А вот при прерывании по низкому уровню все происходит точно так же, но проснувшийся МК реагирует просто на низкий уровень на входе и все работает по даташиту.
Выход из ситуации:
1. Использовать Idle. Кушать будет больше.
2. Попробовать использовать прерывание без прерывания smile . Написать программу так, чтобы проснувшийся МК продолжал работу без перехода в прерывание. Учесть длительность просыпания из режима Power-down.
Сообщение # 36        
Тёмыч
аватар
  Постов: 759   Друзья 
Цитата msmmmm ()
Просыпается МК и по остальным типам прерываний int, но само прерывание не обрабатывается. Происходит это потому, что выход из глубокого сна длителен и подобен сбросу, только программный счетчик не изменяется. Изменился уровень, пошла команда на включение МК, завелся генератор, выдержалось время стабилизации генератора и лишь затем такты пошли на АЛУ. Все это время даже флаг не может измениться - отсутствует тактовая частота. После просыпания МК не видит, что было прерывание (прерывание реагирует на изменения уровня, а оно уже произошло) и не обрабатывает его, а выполняет дальше программу. А вот при прерывании по низкому уровню все происходит точно так же, но проснувшийся МК реагирует просто на низкий уровень на входе и все работает по даташиту.


это понял.

Цитата msmmmm ()
2. Попробовать использовать прерывание без прерывания . Написать программу так, чтобы проснувшийся МК продолжал работу без перехода в прерывание. Учесть длительность просыпания из режима Power-down.


msmmmm, каким образом это осуществить? если можно по подробней про это, и желательно с примером, а то мозгов пока на это не хватает... smile
Сообщение # 37        
msmmmm
аватар
  Постов: 891   Друзья 
Для начала определи стоит ли на твоем контроллере этим заниматься (я уже не помню над которым издевался), а именно: все оставь как было, а после команды слип установи какой-нибудь маркер (зажигание светодиода и вход в бесконечный цикл, выдача в СОМ какой-то информации и т.д.) и посмотри: просыпается контроллер от синхронного прерывания или нет. По даташиту - нет. Но вот нашел еще любителя нестандартных применений:
Re: Atmega 8. Выход из режима power-down.
Пн мар 31, 2014 12:32:38
Попробовал выводить контроллер из спящего режима по любому логическому изменению на INT1 - и все в порядке, выходит и работает.

Шанс есть - это на меге8.

А чем Idle не угодил? Потребление смешное, а питание ключом зажигания снимается полностью.
Сообщение # 38        
Тёмыч
аватар
  Постов: 759   Друзья 
msmmmm, если я тебя правильно понял, сделал вот так (правильно сделал или нет?):



тут по идее, если контроллер не спит, всегда будет гореть светодиод.
Попробовал на всех режимах, работает только при INT Mode: Low level.

Цитата msmmmm ()
А чем Idle не угодил? Потребление смешное, а питание ключом зажигания снимается полностью.


Проблема в том, что ключом зажигания питание не снимается.

Добавлено (04.03.2017, 15:48)
---------------------------------------------
контроллер мега8.
Сообщение # 39        
msmmmm
аватар
  Постов: 891   Друзья 
Int теребил во время сна? Впрочем, попробую у себя, что получится отпишусь.
Сообщение # 40        
Тёмыч
аватар
  Постов: 759   Друзья 
Цитата msmmmm ()
Int теребил во время сна?

да, конечно.
Поиск:

Внимание! Форум переехал на Tehnodium.ru



© 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA