Nikitoc 0 30 июня, 2011 Опубликовано 30 июня, 2011 (изменено) · Жалоба С чем связано такое поведение микроконтроллера - не понимаю. Частота сброса гораздо выше, чем при переполнении WDT, т.е. сразу после подачи команды SLEEP микроконтроллер сбрасывается. Конфигурация - WDT512 (период переполнения - 2 сек.), HS oscillator 10MHz with PLL x 4 (итого 40МГц). Для проверки использую такой код: #fuses H4_SW, NOIESO, WDT512, NOFCMEN void main() { OSCTUNE = 0x40; // Разрешаем PLL - умножаем входную частоту на 4. В итоге получаем 40МГц. delay_ms(100); // Задержка для стабилизации генератора setup_wdt(WDT_ON); // Разрешаем тактирование WDT printf(" Start of program "); printf (" RCON: %u", RCON); // Узнаем причину сброса (RCON равен b'00011100' при обычной подаче питания, // b'00011110' при сбросе от sleep, и b'00010111' при переполнении WDT) RCON = 0xFF; // Сбрасываем флаги sleep(); } Естественно, строки "Start of program" и значение регистра RCON выводятся почти непрерывно. Кто-нибудь раньше сталкивался с подобными глюками? Добавлено: Кстати, а это может быть как-то связано с отключением какой-то периферии при переходе в sleep? И еще одно, если перед подачей команды SLEEP бит IDLEN = 1 (т.е. при переходе в idle mode) все работает корректно. Но потребление не устраивает ~3mA... Изменено 30 июня, 2011 пользователем Nikitoc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 30 июня, 2011 Опубликовано 30 июня, 2011 · Жалоба Так. Вроде бы все заработало. На VDDcore/Vcap ножке был установлен конденсатор меньшей емкости (0,47uF вместо 4,7uF по даташиту). Замена все исправила. Борьба с невнимательностью продолжается :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться