Выход из спящего режима

Обсуждаем контроллеры компании Atmel.
Ответить
leksmaster
Родился
Сообщения: 14
Зарегистрирован: Сб янв 03, 2015 15:27:00

Выход из спящего режима

Сообщение leksmaster »

Есть Tiny24. Удачно перевожу в спящий режим в теле main().

Код: Выделить всё

		// переход в спячку
			if ( cntr1 >= 20) {
				cntr1 = 1;
				TMR1_Stop();  // останов таймкра 1
				set_sleep_mode(SLEEP_MODE_PWR_DOWN);
				sleep_enable();
				// сигнализируем о переходе в спячку
				PORTA = 0b00001111;
				_delay_ms(1000);
				PORTA = 0x00;
				_delay_ms(100);
				TCNT1 = 0;				
				ClearBit(PORTA,6);
				// разрешаем прерывание по низкому уровню INT0
				GoToSleep();		
				// Засыпаем
				sleep_enable();
				sleep_cpu();	
				// запрещаем прерывание по низкому уровню INT0
				GIMSK = 0x00;
				MCUCR = 0x00;	
				GIFR = 0x00;		
			} // mode READY	
По нажатию на кнопку на INT0 программа начинает работать заново. Причем все последующие нажатия на кнопку опять перезапускают программу. До ввода в спящий режим кнопка правильно выполняет заданные действия.

Код: Выделить всё

ISR (INT0_vect) {
	GIMSK = 0;
	GIFR = 0x00;
	TMR1_Start();	// запуск таймера 1
} // INT0
Подскажите как поправить.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Выход из спящего режима

Сообщение ARV »

правильное засыпание делается так:

Код: Выделить всё

set_sleep_mode(SLEEP_MODE_PWR_DOWN);
		sleep_mode(); // спим
использовать макросы sleep_enable() и т.п. - не нужно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
leksmaster
Родился
Сообщения: 14
Зарегистрирован: Сб янв 03, 2015 15:27:00

Re: Выход из спящего режима

Сообщение leksmaster »

Проблему решил. Все работает.
Код засыпания и просыпания переписал заново глядя в ДШ.
Marat16180
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт июн 09, 2015 22:18:40

Re: Выход из спящего режима

Сообщение Marat16180 »

Господа!

Не объясните начинающему, почему если перед входом в спящий режим оставить включенным диод, он так и остается гореть?

В моем понимании МК переходит в экономный режим и отключает все что возможно.
режим
SLEEP_MODE_PWR_DOWN
Я не волшебник, я ещё только учусь
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Выход из спящего режима

Сообщение Ser60 »

МК при входе в определенные режимы сна сохраняет содержимое всех регистров, памяти, и состояние портов. Какой режим сна используете Вы? В ДШ на МК четко написано что именно сохраняется в каком режиме сна.
Реклама
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Выход из спящего режима

Сообщение просто КОТ »

В твоём режиме он отключает "думалку". Но ведь регистры то были установлены уже. И ежели там записана единичка, то хоть ты тресни, а надо гореть диоду. В принципе, можешь в DDRX переписать все пины на входы, не трогая содержимого их перед сном. А потом обратно на выходы, проснувшись.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Реклама
Marat16180
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт июн 09, 2015 22:18:40

Re: Выход из спящего режима

Сообщение Marat16180 »

Просто КОТ

спасибо за ответ :)) . Значит в правильном направлении двигаюсь, пошел копать дальше!

Ser60

Power-down Mode.
Стараюсь всегда перед вопросом читать ДШ, дабы людей просто так не дергать.
По таблице в данном режиме идет прерывание по INTам и по I2C.
Перечитаю еще раз, значит что то упустил.

Спасибо, Господа!
Я не волшебник, я ещё только учусь
Андрей СШ
Опытный кот
Сообщения: 806
Зарегистрирован: Ср май 06, 2015 06:41:27
Откуда: Благовещенск

Re: Выход из спящего режима

Сообщение Андрей СШ »

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

Кроме того способность микроконтроллера сохранять включенные пины во сне бывает полезна.

В даташите есть такое утверждение:
When entering a sleep mode, all port pins should be configured to use minimum power. The
most important thing is then to ensure that no pins drive resistive loads.
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: Выход из спящего режима

Сообщение просто КОТ »

Но ведь чтоб отключить подтяжку, придётся "уничтожить" информацию в нём. Хотя. с целью экономии -- всегда можно.. Можно и сохранить его содержимое себе куда-то, если очень надо.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Аватара пользователя
Foton-4n
Электрический кот
Сообщения: 1073
Зарегистрирован: Вт май 22, 2012 19:29:06

Re: Выход из спящего режима

Сообщение Foton-4n »

Дам совет. У меня есть процедура спящего, там всё прописано и перед сном всё ненужное снимается включаться внешние прерывания, после выхода происходит инициализация состояний, у меня все состояния хранятся и могут в любой момент быть восстановлены, это занимает может и занимает больше памяти но зато 100% гарантия что не когда не зависнет дольше чем до след такта (как правило 1 сек) или события, порту назначается состояние только при изменении состояния переменной но можно и принудительно. Сделай так же и проблемы минуют. А так же если состояния портов не хранить то как запросить их скажем по сети.
Зы если МК не сохранял состояние портов во сне то почти все девайсы были бы лишены это режима и МК работал бы всегда :))) .
Ответить

Вернуться в «AVR»