Исходные данные. К микроконтроллеру подключен часовой кварц на 32768 Гц, светодиод и кнопка.
Инициализация портов:
Спойлер
Код: Выделить всё
TRISA = 0x3F; // input
ANSELA = 0x0; // digital I/O
LATA = 0x0;
WPUA = 0x04; // Pullup WPUA2
OPTION_REGbits.nWPUEN = 0; //Weak pull-ups are enabled by individual WPUx latch values
//IOCx registers
IOCAP = 0x0;
IOCAN = 0x0;
IOCAF = 0x0;
Инициализация осциллятора:
Спойлер
Код: Выделить всё
// OSCCONbits.SCS = 0b00; // SCS FOSC
// OSCCONbits.SCS = 0b01; // SCS Timer1
OSCCONbits.SCS = 0b10; // SCS Internal
OSCCONbits.IRCF = 0b0000; // IRCF 31KHz_LF
OSCCONbits.SPLLEN = 0; // 4x PLL is disabled
// Oscillator module is running at the factory-calibrated frequency
OSCTUNE = 0x0;
// SBOREN disabled;
BORCON = 0x0;
Тут видно, что пытался играться с тактированием от часового кварца в режиме LP, от Timer1 и от внутреннело LF генератора на 31 кГц. Но все эти режимы в конечном итоге не влияют на ток потребления в спящем режиме.
Подтягивающий резистор включен один для кнопки. Её задача вывести микроконтроллер из сна по внешнему прерыванию, переключить светодиод и опять уйти в спячку. Ток спячки измеряю при ВЫКЛЮЧЕННОМ светодиоде! Вся остальная периферия выключена. WDT и BORCON не работают и выключены!
При этом ток потребления примерно 50 мкА, хотя по ДШ он должен быть не более 15-20 мкА.
PS. на измерение тока в спящем режиме сильно влияет программатор. Приходится отключать микроконтроллер от него. При чем зачастую после отключения программатора ток подрастает на 10-15 мкА, а не снижается. С чем связано я не понимаю.
PS2. на плате утечки тока нет. При отключении от платы микроконтроллера и программатора ток потребления нулевой на моём тестере в режиме мкА.
Добавлено after 1 hour 24 minutes 7 seconds:
В общем виновником светодиод оказался. Хоть при выключении светодиода я перевожу пин в Z состояние, но через него все равно течет ток. Без светодиода 19 мкА. Получается нельзя напрямую на вывод порта включать светодиод??? Неправильно! Нельзя было этот вывод переводить в Z состояние. Надо было отставлять как выход и записать в него 0.
