Отправить AVR в сон на определенное время
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Отправить AVR в сон на определенное время
Почему после вызова sleep программа сразу же переходит в обработчик прерывания по WDT хто знает?
- Реклама
Re: Отправить AVR в сон на определенное время
Может программист так захотелBCluster писал(а):Почему после вызова sleep программа сразу же переходит в обработчик прерывания по WDT хто знает?
Код где?
— Не говорите мне что делать и я не скажу куда Вам идти...
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Отправить AVR в сон на определенное время
может перед сном его надо обнулить?BCluster писал(а):Почему после вызова sleep программа сразу же переходит в обработчик прерывания по WDT хто знает?
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Отправить AVR в сон на определенное время
Камень ATMega48
Вот так я вызывайу слип
Вот так инициализирую собаку и все остальное
Прерывание:
Вот так я вызывайу слип
Код: Выделить всё
...
void delay()
{
#asm("wdr");
#asm("sleep")
}
...
Код: Выделить всё
SMCR=0x05;
PRR=0xEE;
WDTCSR=0x39;
WDTCSR=0x61;
Код: Выделить всё
interrupt [WDT] void wdt_timeout_isr(void)
{
#asm("wdr")
WDTCSR|=(1<<6);
}
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Отправить AVR в сон на определенное время
если настроить на сброс собаку она сбрасывает контроллер по вызову sleep шо за блин)
- Реклама
Re: Отправить AVR в сон на определенное время
А надо:BCluster писал(а):Вот так инициализирую собаку и все остальноеКод: Выделить всё
SMCR=0x05; PRR=0xEE; WDTCSR=0x39; WDTCSR=0x61;
Код: Выделить всё
WDTCSR=(1<<WDCE)|(1<<WDE);
WDTCSR=(1<<WDIF)|(1<<WDIE)|(1<<WDP3)|(0<<WDCE)|(1<<WDE)|(1<<WDP0);
(1<<WDIF) - сброс флага прерывания.
Сброс флага желательно делать всегда при инициализации любого прерывания - будь то собака, таймер или что-то еще...
— Не говорите мне что делать и я не скажу куда Вам идти...
Re: Отправить AVR в сон на определенное время
Еще замечание: SMCR=0x05 нужно делать непосредственно перед командой sleep и сразу после пробуждения очищать бит SE
To avoid the MCU entering the sleep mode unless it is the programmer’s
purpose, it is recommended to write the Sleep Enable (SE) bit to one just before the execution of
the SLEEP instruction and to clear it immediately after waking up.
Код: Выделить всё
void delay()
{
#asm("wdr");
SMCR=0x05;
#asm("sleep");
SMCR=0;
}— Не говорите мне что делать и я не скажу куда Вам идти...
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Отправить AVR в сон на определенное время
Сделал, теперь на первом слип также вызывает прерывание, а второй усыпляет навсегда))
Re: Отправить AVR в сон на определенное время
откуда первый и второй слипыBCluster писал(а):Сделал, теперь на первом слип также вызывает прерывание, а второй усыпляет навсегда))
Код можно полностью? (токо архивом)
— Не говорите мне что делать и я не скажу куда Вам идти...
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Отправить AVR в сон на определенное время
Первый слип выполняем, после него программа идет по новой - следовательно слип еще раз вызывается 
Re: Отправить AVR в сон на определенное время
Ну положим программа не идет по новой, а продолжает выполнение со следующего шага после слипа (точнее вернется туда после прерывания). Значит перед вторым слипом не полностью выполнены рекомендации по подготовке ко сну (зубы не почистили, не умылись и т.д.)BCluster писал(а):Первый слип выполняем, после него программа идет по новой - следовательно слип еще раз вызывается
Зы: надеюсь слип не в прерывании выполняется....
— Не говорите мне что делать и я не скажу куда Вам идти...
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Отправить AVR в сон на определенное время
Ну да, просто программа циклическая, на следующей итерации опять вызывается слип )



