Доброго! Пытаюсь усыпить t13a в режиме power down. По прерыванию PCINT мк должен просыпаться. к PB4 подключена кнопка, к PB0 - светодиод. Вот код.
#include <tiny13a.h>
#include <sleep.h>
#include <delay.h>
#define LED PORTB.0
volatile int cnt_ovf = 0; //счетчик переполнений
void init_cnt_tmr(void) //запускает таймер
{
cnt_ovf = 0;
TCCR0A= (0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B =(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x00;
}
void stop_tmr(void) //останавливает таймер
{
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B &= ~((1 << CS02) | (1 << CS01) | (1 << CS00));
TCNT0=0x00;
}
interrupt [PC_INT0] void pin_change_isr(void)//любое изменение на PB0
{
if (PINB.4 == 1) // если кнопка нажата, то стоп таймер/выкл. led/спать
{ //stop timer
stop_tmr();
LED = 0;
sleep_enable();
powerdown();
}
else //если ожата, то запускаем таймер.
{
//start timer
init_cnt_tmr();
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void) //таймер/счетчик
{
cnt_ovf++;
if (cnt_ovf > 200)//если таймер натикал
{
cnt_ovf = 0;
if (PINB.4 == 0)//если кнопка все еще отжата, то зажигаем светодиод и выкл. таймер
{
LED = 1;
stop_tmr();
}
}
}
void main(void)
{
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
OCR0B=0x00;
init_cnt_tmr();
stop_tmr();
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);
GIMSK=(0<<INT0) | (1<<PCIE);
MCUCR=(0<<ISC01) | (0<<ISC00);
PCMSK =(0<<PCINT5) | (1<<PCINT4) | (0<<PCINT3) | (0<<PCINT2) | (0<<PCINT1) | (0<<PCINT0);
GIFR=(0<<INTF0) | (1<<PCIF);
#asm("sei")
sleep_enable();
powerdown();
while (1)
{
}
}
Так вот режим сна какой-то неадекватный.
При первичном запуске мк уходит в сон 0.5мА. Когда дергаю кнопку - то работает нормально, то вдруг выходя из сна по прерыванию амперметр показывает 0 мА(!) видимо МК виснет. Подскажите, что у меня не так в коде и, 0.5 мА чо-то сильно много имхо.