Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 06.01.2013, 14:47  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Выход из спящего режима по INT0

Здравствуйте, не могу проснуться из спящего режима по INT0, по низкому уровню сигнала.
МК мега-8.
Засыпаю вот так:

Код:
LDI 	TEMP, 	0b10100001
OUT		MCUCR,	TEMP
LDI 	TEMP, 	0b01000000
OUT		GICR,	TEMP
sleep
Я так понимаю, что по низкому уровня сигнала на ноге контроллера меня должно кидать на вектор прерывания INT0, в обработчике прерывания у меня стоит переход на RESET.
Но при нажати на кнопку (на INT0оявляется лог. 0) ничего не происходит.
Подскажите в чём ошибка.

Может быть нужно перед входом прерывания что то делать ? например сохранять программный счётчик или SREG, или нужно при выходе из сна возвращать что то в системные регистры ?
Реклама:

Последний раз редактировалось putmannn; 06.01.2013 в 15:05.
putmannn вне форума  
Непрочитано 06.01.2013, 15:09  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

Для начала попробуй вот так
PHP код:
LDI     TEMP,     0b10100000
OUT        MCUCR
,    TEMP 
Сейчас стоит по любому перепаду, а при отключенном генераторе синхронные операции не работают.
RFTM, ёлы-палы.
omercury вне форума  
Непрочитано 06.01.2013, 15:58  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

omercury, сделал, всё равно спит собака.
Попробовал эмулировать в АВРстудии, запускаю c кодом :
Код:
LDI  TEMP, 	0b10100000
OUT  MCUCR,	TEMP
LDI  TEMP, 	0b01000000
OUT  GICR,	TEMP
sleep
В режиме трассировки мышкой тыкаю в PIND2, ВКЛЮЧАЮ-включаю/выключаю его, как будто я жму кнопку чтобы получить низкий уровень сигнала и вызвать прерывание, но ничего не происходит, программный счётчик стоит на команде после sleep.
Я точно забыл чего то указать, всё что нашел прочитал, но прерывание не вызывается.
putmannn вне форума  
Непрочитано 06.01.2013, 16:07  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

Конечно не вызывается - оно же включается после "отбоя".
Сначала запись в GICR, а уж потом в MCUCR.
Кстати, SEI есть?
omercury вне форума  
Сказали "Спасибо" omercury
putmannn (06.01.2013)
Непрочитано 06.01.2013, 16:24  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

omercury, Сначала запись в GICR, а уж потом в MCUCR ничего не дало, ведь они записываются до команды sleep.
А вот поставил перед командами SEI и всё заработало, но я ведь в самом начале RESETа этот код вставлял и трассировал в АВРстудии, никаких запретов прерываний не стояло, очень странно.
Спасибо, теперь всё работает, засыпает и просыпается по INT0.

Последний раз редактировалось putmannn; 06.01.2013 в 16:41.
putmannn вне форума  
Непрочитано 06.01.2013, 16:43  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

Сообщение от putmannn Посмотреть сообщение
Сначала запись в GICR, а уж потом в MCUCR ничего не дало
Действительно, фигню спорол. Здесь последовательность не важна.
Поставил sei в другом месте - всё нормально работает.
Проблема, думаю, в другом - стек.
Вложения:
Тип файла: zip tst_sleep.zip (906 байт, 59 просмотров)
omercury вне форума  
Непрочитано 06.01.2013, 17:07  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

А что нужно отключать для полного засыпания ?
У меня в начале, когда сразу после ресет процедура засыпания стоит, то потребление 150 мкА, а когда из программы засыпает, то 250 мкА ест.
Значит что то у меня в процессе работы включается и потом не отключается (100 мкА).
Посмотрите всё ли я отключаю ? может быть что то забыл ?

Код:
clr temp 					;stop timer
out tccr1b,temp
out tccr1a,temp
out tccr0,temp

ldi 	temp, 	0b00000000
out 	ADCSR, 	temp
ldi 	temp, 	0b00000000 	
out 	ADMUX,  temp	
			
ldi 	temp, 	0b11111111 
out 	DDRB, 	temp
ldi 	temp, 	0b00000000 
out 	PORTB, 	temp

ldi 	temp, 	0b11111011 
out 	DDRD, 	temp
ldi 	temp, 	0b00000000 
out 	PORTD, 	temp

ldi 	temp, 	0b11111110 
out 	DDRC, 	temp
ldi 	temp, 	0b00000000 
out 	PORTC, 	temp

ldi	temp, 	0b00000000	
out	TIMSK,	temp

LDI 	TEMP, 	0b10100000
OUT	MCUCR,	TEMP

LDI 	TEMP, 	0b01000000
OUT	GICR,	TEMP

sei
sleep
putmannn вне форума  
Непрочитано 06.01.2013, 17:08  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

Сообщение от putmannn Посмотреть сообщение
никаких запретов прерываний не стояло, очень странно
Прерывания автоматически запрещаются в обработке прерывания (любого). Или этот твой код со Слипом вызывается в прерывании, или где-то забыл поставить РЕТИ или хотя бы РЕТ
Убирай СЕИ и ковыряй код, если не хочешь внезапных переполнений стека

250 мка - или какая-то ножка как вход болтается в воздухе без подтяжки, или 2 ножки с включенной подтяжкой закорочены на землю
niXto вне форума  
Непрочитано 06.01.2013, 17:28  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

Дык INT0 такой и есть.
omercury вне форума  
Непрочитано 06.01.2013, 17:32  
putmannn
Гражданин KAZUS.RU
 
Аватар для putmannn
 
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 94 раз(а) в 91 сообщении(ях)
putmannn на пути к лучшему
По умолчанию Re: Выход из спящего режима по INT0.

Сообщение от omercury Посмотреть сообщение
Дык INT0 такой и есть.
Какой он есть ?
putmannn вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как устранить дребезг на вход INT0 begun Микроконтроллеры, АЦП, память и т.д 53 30.01.2018 17:21
Считывание байта по INT0 neox-neox Микроконтроллеры, АЦП, память и т.д 28 11.03.2011 21:10
Не работают входы INT0/ INT1 для 90S2313 в Протеусе welder_2002 Микроконтроллеры, АЦП, память и т.д 9 06.05.2009 19:09
mega16 - int0 - наводка? mel2 Микроконтроллеры, АЦП, память и т.д 10 26.07.2006 08:08
HDD 2 режима? IgorN Ремонт оргтехники 9 21.10.2003 11:30


Часовой пояс GMT +4, время: 08:13.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot