Форум РадиоКот • Просмотр темы - Atmega 8. Выход из режима power-down.
Сообщения без ответов | Активные темы
Страница 1 из 2
[ Сообщений: 35 ]
,
Автор
Сообщение
kushman
Заголовок сообщения: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 11:34:15
Нашел транзистор. Понюхал.
Зарегистрирован: Сб ноя 07, 2009 15:27:59Сообщений: 194
Рейтинг сообщения: 0
Добрый день! Использую в своем девайсе контроллер Atmega8 совместно с часами реального времени DS1339. По задумке, будильник часов должен выводить контроллер из спящего режима, с помощью подтяжки линии прерывания к земле. Линия также подтянута к питанию через резистор. Использую режим power-down, как самый экономичный. Согласно даташиту, из этого режима контроллер выходит с помощью внешнего прерывания или ресета. Прерывание настроено на срабатывание по перепаду из 1 в 0, однако он категорически отказывается из него выходить. Без использования спящего режима все в порядке, прерывание срабатывает. В чем может быть дело? Заранее благодарен.
Вернуться наверх
Реклама
Gudd-Head
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 11:39:46
Друг Кота
Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21Сообщений: 20040Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
kushman писал(а):
Прерывание настроено на срабатывание по перепаду из 1 в 0, однако он категорически отказывается из него выходить.
Естессно отказывается. Читайте в ДШ раздел вывода из сна по прерываниям внимательней (сноки и пр.).
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Вернуться наверх
Реклама
ARV
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 11:40:12
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18456Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
данный МК не пробуждается из Power Down по внешнему прерыванию, настроенному на перепад (фронт) - настройте прерывание на УРОВЕНЬ и будет вам счастье.
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
kushman
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 12:22:38
Нашел транзистор. Понюхал.
Зарегистрирован: Сб ноя 07, 2009 15:27:59Сообщений: 194
Рейтинг сообщения: 0
Да, извиняюсь за свою невнимательность, пропустил это в даташите. Но возникла другая проблема, МК вообще не хочет генерировать прерывание по уровню. Хотя часы притягивают линию к земле, это точно, тестером проверял. Может маленькая длительность?
Вернуться наверх
Реклама
Gudd-Head
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 12:24:13
Друг Кота
Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21Сообщений: 20040Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
kushman писал(а):
Может маленькая длительность?
Может, прерывание не настроено?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Вернуться наверх
Реклама
akl
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 12:32:51
Карма: 66
Рейтинг сообщений: 1023
Зарегистрирован: Пт мар 07, 2008 06:54:43Сообщений: 4389Откуда: Ижевск
Рейтинг сообщения: 0
kushman писал(а):
Хотя часы притягивают линию к земле, это точно, тестером проверял. Может маленькая длительность?
Может
это поможет.
Вернуться наверх
Реклама
kushman
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 13:14:49
Нашел транзистор. Понюхал.
Зарегистрирован: Сб ноя 07, 2009 15:27:59Сообщений: 194
Рейтинг сообщения: 0
Да нет, все вроде настроено, я только поменял пару битов в регистре MCUCR, настроил их на работу по низкому уровню (ISC11=0, ISC10=0). По перепаду без использования спящего режима срабатывает на ура, а по уровню, что со спящим, что без спящего - никакой реакции.
Вернуться наверх
akl
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 15:43:00
Карма: 66
Рейтинг сообщений: 1023
Зарегистрирован: Пт мар 07, 2008 06:54:43Сообщений: 4389Откуда: Ижевск
Рейтинг сообщения: 0
С примером кода было бы проще.
Вернуться наверх
kushman
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Ср мар 26, 2014 17:56:20
Нашел транзистор. Понюхал.
Зарегистрирован: Сб ноя 07, 2009 15:27:59Сообщений: 194
Рейтинг сообщения: 0
Вот кусок кода (лишнее выкинул).
Код:
interrupt [EXT_INT1] void INT1_ISR(void) { normal_mode(); } void sleep_mode(void) { MCUCR = MCUCR|0xA0; //SE=1, power-down mode #asm sleep #endasm } void normal_mode(void) { #asm nop nop nop nop nop #endasm MCUCR = MCUCR&0x7F; //SE=0; } void INT_Init(void) { GICR=0xC0; MCUCR=0x00; } void main(void) { INT_Init(); SREG.7=1; sleep_mode(); }
Вернуться наверх
Реклама
akl
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 09:03:59
Карма: 66
Рейтинг сообщений: 1023
Зарегистрирован: Пт мар 07, 2008 06:54:43Сообщений: 4389Откуда: Ижевск
Рейтинг сообщения: 0
В принципе нормально. Если бы ещё сделали так void sleep_mode(void) { MCUCR = MCUCR|0xA0; //SE=1, power-down mode ; #asm ; sleep ; #endasm - при высоком уровне на входах INTx сбросить флаги GIFR=0xC0 - глобально разрешить прерывания SREG.7=1 - и только теперь #asm SLEEP #endasm то камень обязан уйти в POWER DOWN Но, вопрос корректного выхода из POWER DOWN остался.
Вернуться наверх
kushman
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 10:11:50
Нашел транзистор. Понюхал.
Зарегистрирован: Сб ноя 07, 2009 15:27:59Сообщений: 194
Рейтинг сообщения: 0
Пробовал сгенерировать прерывание по уровню без спящего режима - не срабатывает. По перепаду - пожалуйста, по уровню - ни в какую. Вот в чем проблема. С чем это может быть связано? Линия то притягивается к земле, это точно.
Вернуться наверх
Alexeyslav
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 15:34:28
Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34Сообщений: 4550Откуда: Украина, Славутич
Рейтинг сообщения: 0
А ДО этого, она удерживается в плюсе? Может попробовать не прерывание от порта, а специальный вход внешнего прерывания INT0/INT1?
Последний раз редактировалось Alexeyslav Чт мар 27, 2014 15:43:59, всего редактировалось 2 раз(а).
Вернуться наверх
Gudd-Head
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 15:41:34
Друг Кота
Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21Сообщений: 20040Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Alexeyslav писал(а):
Может попробовать не прерывание от порта, а специальный вход внешнего прерывания INT0/INT1?
В смысле? Из PD только INT0/INT1 и выводят.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Вернуться наверх
kushman
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 16:08:16
Нашел транзистор. Понюхал.
Зарегистрирован: Сб ноя 07, 2009 15:27:59Сообщений: 194
Рейтинг сообщения: 0
Alexeyslav писал(а):
А ДО этого, она удерживается в плюсе? Может попробовать не прерывание от порта, а специальный вход внешнего прерывания INT0/INT1?
Так и и использую вход INT1. А как от порта можно прерывание получить? Или может я что-то не понял.
Вернуться наверх
Gudd-Head
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 16:13:16
Друг Кота
Карма: 67
Рейтинг сообщений: 1071
Зарегистрирован: Чт сен 18, 2008 12:27:21Сообщений: 20040Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
kushman писал(а):
А как от порта можно прерывание получить?
В других МК есть прерывания от портов.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Вернуться наверх
codenamehawk
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 22:57:08
Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Вт фев 09, 2010 17:52:26Сообщений: 477
Рейтинг сообщения: 0
kushman писал(а):
0xC0 == 11000000 , значит разрешены прерывания INT0,INT1 , а обработчик прерывания только для INT1.
Если раньше возникнет INT0, то начнется цирк.
Цитата:
Чего этим хотите достичь?
Попробуйте оформлять в виде
Код:
MCUCR &= ~((1<<ISC11) | (1<<ISC10)); //INT1 low level GICR |= (1<<INT1); // разрешить прерывание INT1
Сразу видно что к чему.
Я бы советовал изменить логику программы, изменения режимов работы производите в маин, а в прерывании устанавливайте информационный флаг.
Вернуться наверх
codenamehawk
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Чт мар 27, 2014 23:43:39
Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Вт фев 09, 2010 17:52:26Сообщений: 477
Рейтинг сообщения: 0
Гляньте на пример.
Код:
/* * main.c * * Created on: 27.03.2014 * Author: Marian */ #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> volatile uint8_t flag1; uint8_t musor; ISR(INT1_vect ) { // user code here flag1=0; } int main(void) { DDRB = 0xFF;//na vyvod DDRD &=~((1<<PD3)|(1<<PD0)); //na vvod PORTD |= (1<<PD3)|(1<<PD0); //vkl podciazku MCUCR &= ~((1<<ISC11) | (1<<ISC10)); //INT1 low level GICR |= (1<<INT1); // разрешить прерывание INT1 flag1=1;//dla otslezivanija prerywanija musor=0; //dla primera; set_sleep_mode(SLEEP_MODE_PWR_DOWN); while (1) { musor++; PORTB = musor; if((PIND & 0x01)!= 0x01 ) { flag1=1; sei(); sleep_mode(); cli(); } } } //
В архиве проект для протеуса
Вложение:
temp.rar [42.9 KiB]
Скачиваний: 229
Вернуться наверх
codenamehawk
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Сб мар 29, 2014 21:59:13
Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Вт фев 09, 2010 17:52:26Сообщений: 477
Рейтинг сообщения: 0
Тут присутствует одна особенность, прерывания (если назначены по низкому уровню) происходят до тех пор, пока на ноге низкий уровень. Значит проц будет постоянно выходить из повер довн.
Вернуться наверх
kushman
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Пн мар 31, 2014 11:32:38
Нашел транзистор. Понюхал.
Зарегистрирован: Сб ноя 07, 2009 15:27:59Сообщений: 194
Рейтинг сообщения: 0
Попробовал выводить контроллер из спящего режима по любому логическому изменению на INT1 - и все в порядке, выходит и работает. Единственная загвоздка в том, что возникает два прерывания, несмотря на то, что они глобально запрещены на время обработки. Сегодня еще попробую вышеприведенный код, посмотрим что получится.
Вернуться наверх
codenamehawk
Заголовок сообщения: Re: Atmega 8. Выход из режима power-down.
Добавлено: Пн мар 31, 2014 16:16:16
Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Вт фев 09, 2010 17:52:26Сообщений: 477
Рейтинг сообщения: 0
Не ясно для чего вы выставляете "по любому логическому изменению на INT1", если есть возможность выставить по фронту или по спаду на INT1.
kushman писал(а):
Единственная загвоздка в том, что возникает два прерывания, несмотря на то, что они глобально запрещены на время обработки.
Флаг прерывания устанавливается, даже если они глобально запрещены, если есть необходимость выполните ручной сброс флага прерывания, перед разрешением прерываний.
Вернуться наверх
Страница 1 из 2
[ Сообщений: 35 ]
,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения