Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Режим Power-down
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
KIG
Использую режим power-down на МК ATmega16. Пробуждение МК осуществляю с помощью внешнего прерывания на ножке INT0 (по смене логического уровня). На эту ножку подаю напряжению с помощью потенциометра от 0 В до 4,5 В (сначала 0В, затем 4,5В). Перед командой "sleep" отправляю цифру 15 в программу Terminal. В функции обработки прерывания INT0 отправляю цифру 11 в Terminal. Однако ничего не получаю (ни 15, ни 11). Думаю что пробуждение МК не происходит. Подскажите, пожалуста, в чем дело?
prottoss
Раз Вы до СЛИПа посылаете 15 и не получаете, вероятно что то с USART не так...
KIG
Цитата(prottoss @ Aug 19 2007, 19:26) *
Раз Вы до СЛИПа посылаете 15 и не получаете, вероятно что то с USART не так...


Пробовал без СЛИПа. Сначала пришла цифра 15, а затем постоянно приходила цифра 11 (постоянно срабатывало прерывание). Напряжение на INT0 было 1,17В. Ниже этого значения прерывание не срабатывало.
SasaVitebsk
Цитата(KIG @ Aug 19 2007, 20:39) *
Пробовал без СЛИПа. Сначала пришла цифра 15, а затем постоянно приходила цифра 11 (постоянно срабатывало прерывание). Напряжение на INT0 было 1,17В. Ниже этого значения прерывание не срабатывало.

Давайте поподробнее опишите. А то не понятно ничего.
defunct
Цитата(prottoss @ Aug 19 2007, 19:26) *
Раз Вы до СЛИПа посылаете 15 и не получаете, вероятно что то с USART не так...

В Power-Down вся периферия отключается.
если после записи в UDR сразу уйти в Power-Down - ничего естессно не отправится.

Цитата(KIG @ Aug 19 2007, 18:45) *
Подскажите, пожалуста, в чем дело?

Поэксперементируйте вначале с режимом IDLE.
Когда с уходом в idle программа будет работать как задумано - переходите к отладке Power-Down.
KIG
Подробнее...
Пытаюсь работать с режимом Power-down (Atmega16). Пробуждение осуществляю с помощью внешнего прерывания, которое должно возникнуть от смены логического уровня на ножке INT0. Для определения проснулся МК или нет отправляю цифру 11 на комп в функции обработки прерывания. Однако ничего не получаю.
Elegorod
Все правильно. Из режима Power Down можно выйти прерыванием только по низкому уровню, а не по смене логического уровня. В режиме Idle все должно работать нормально
KIG
Цитата(defunct @ Aug 20 2007, 02:39) *
В Power-Down вся периферия отключается.
если после записи в UDR сразу уйти в Power-Down - ничего естессно не отправится.


Перед командой Sleep поставил задержку и цифра 15 стала приходить. Спасибо. Но разбудить МК (т.е. получить 11) не удается. Возможно причина в неправильных уровнях напряжения (1В и 4,5В)?

Попробовал пробуждение МК по низкому уровню. На ножку INT0 подал 4,5В. Цифра 11 приходит постоянно. А разве низкий уровень это не напряжение менее 1/3 питания (Напряжение питания МК 5В).
Andreas1
Цитата
А разве низкий уровень это не напряжение менее 1/3 питания (Напряжение питания МК 5В).

А в даташиту заглянуть? Порог переключения при +5В около 1,5В с гистерезисом в 0,5В, т.е для переключения в ноль надо менее 1,2В, желательно еще меньше.
KIG
Перед командой Sleep поставил задержку и цифра 15 стала приходить. Спасибо. Но разбудить МК (т.е. получить 11) не удается. Возможно причина в неправильных уровнях напряжения (1В и 4,5В)?

Попробовал пробуждение МК по низкому уровню. На ножку INT0 подал 4,5В. Цифра 11 приходит постоянно. А разве низкий уровень это не напряжение менее 1/3 питания (Напряжение питания МК 5В).

Цитата(Andreas1 @ Aug 20 2007, 10:55) *
А в даташиту заглянуть? Порог переключения при +5В около 1,5В с гистерезисом в 0,5В, т.е для переключения в ноль надо менее 1,2В, желательно еще меньше.


Следовательно, прерывание возникать не должно, но почему-то происходит!
muravei
Цитата(KIG @ Aug 19 2007, 19:45) *
На эту ножку подаю напряжению с помощью потенциометра от 0 В до 4,5 В (сначала 0В, затем 4,5В).

Как -то у Вас все заморочисто! Сделайте нормальный формитователь импульса на кнопке с одновибратором - нажали импульс . А так что у Вас там на входе , может наводки какие.
Откуда Вы берете эти 4.5 в ?
KIG
Цитата(muravei @ Aug 20 2007, 15:53) *
Как -то у Вас все заморочисто! Сделайте нормальный формитователь импульса на кнопке с одновибратором - нажали импульс . А так что у Вас там на входе , может наводки какие.
Откуда Вы берете эти 4.5 в ?


4.5 В получаю с выпрямительного мостика, который через потенциометр подключается к обмотке трансформатора на напряжение в 6,5 В. На входе измерил напряжение с помощью мультиметра, оно равно 4,5В.
SasaVitebsk
Цитата(KIG @ Aug 20 2007, 17:02) *
4.5 В получаю с выпрямительного мостика, который через потенциометр подключается к обмотке трансформатора на напряжение в 6,5 В. На входе измерил напряжение с помощью мультиметра, оно равно 4,5В.


А зачем потенциометр? Обычно просто подаётся питание внешнее. При пропадании питания возникает прерывание. При появлении также. Иногда подают на компаратор. Если стоит задача оперативно среагировать на пропадание питания и успеть что-то ещё сделать.

Следует иметь ввиду, что если у вас в схеме кроме процессора ничего нет, то при переключении питания разряд кондёров основного питания может затянуться на длительное время, что приведёт к нехорошим последствиям. То есть питание переключилось, а однокристалка в PD не ушла, или ушла ч/з минуту к примеру. Таким образом эту минуту однокристалка будет работать в активном режиме от батарейного питания. Чтобы этого избежать надо либо компаратор использовать, либо поставить резистор разряда прямо на основное питание. Для быстрого разряда ёмкостей.
muravei
Цитата(KIG @ Aug 20 2007, 18:02) *
4.5 В получаю с выпрямительного мостика, который через потенциометр подключается к обмотке трансформатора на напряжение в 6,5 В. На входе измерил напряжение с помощью мультиметра, оно равно 4,5В.

И что после мостика нет электролитов? Тогда у Вас должны возникать прерывания с частотой 100 гц!

Цитата(SasaVitebsk @ Aug 20 2007, 18:31) *
Обычно просто подаётся питание внешнее. При пропадании питания возникает прерывание.

Вы совсем запутаете человека!
Цитата(KIG @ Aug 20 2007, 18:02) *
4.5 В получаю с выпрямительного мостика, который через потенциометр подключается к обмотке трансформатора на напряжение в 6,5 В. На входе измерил напряжение с помощью мультиметра, оно равно 4,5В.

Так Вы можете спалить процессор: напряжение из переменных 6.5в будет примерно 1.5 раза больше.
KIG
И всё же почему МК не просыпается после подачи на ножку INT0 напряжения низкого уровня (менее 1.2В)?
muravei
Цитата(KIG @ Aug 20 2007, 21:17) *
И всё же почему МК не просыпается после подачи на ножку INT0 напряжения низкого уровня (менее 1.2В)?

Так я таки непонял - то он у Вас не просыпается от низкого , то не засыпает от высокого! smile.gif
Судя по Вашему описанию , он может "заснуть" навсегда! Нарисуйте схему , как Вы его мучаете.
На Вашем месте я бы отключил всякие мостики с потенциометрами , от греха подальше, и включил бы
внутренний подтягивающий резистор на ИНТ0 . Коротил бы его потихоньку кнопкой на землю. Оно конечно дребезг, но понятнее бы было.
prottoss
Цитата(KIG @ Aug 21 2007, 01:17) *
И всё же почему МК не просыпается после подачи на ножку INT0 напряжения низкого уровня (менее 1.2В)?
Возможно по тому, что INT0 у Вас не правильно проинициализировано? Приведите код инициализации.
KIG
Цитата(prottoss @ Aug 20 2007, 21:06) *
Возможно по тому, что INT0 у Вас не правильно проинициализировано? Приведите код инициализации.


void init_devices(void)
{
CLI(); //disable all interrupts
uart0_init();
MCUCR = 0x20;
GICR = 0x40;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialised
}

//
void main(void)
{
init_devices();
putchar(15);
putchar(15);
for (i=1; i<50; i++);//Delay
MCUCR|=(1<<SE);
asm("sleep");
while (1);
}
prottoss
Цитата(KIG @ Aug 21 2007, 14:59) *
Код
void init_devices(void)
{
...
MCUCR = 0x20;
...
}

В приведенном куске Вы инициализируете режим Power-Down mode и внешние прерывания INT0 и INT1 генерируются низким уровнем

Только я не понял, где Вы проверяете, что МК проснулся? smile.gif После sleep ничего нет...
SasaVitebsk
Цитата(muravei @ Aug 20 2007, 17:56) *
Вы совсем запутаете человека!

Наверное не совсем корректно выразился. Я имел ввиду, что если PD используется при переходе на батарейное питание при пропадании основного, то именно основное питание непосредственно и подаётся на ножку INT. Использование же режима PD прямо в схеме без батарейного чрезвычайно редко. Обычно используется IDLE.

Прошу прощения, если кого ввёл в заблуждение. smile.gif Конечно лучше обсуждать конкретную схему. Тогда будут более конкретные подсказки. Во всяком случае я надеюсь. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.