Продолжение темы
http://www.telesys.ru/wwwboards/mcontrol/2398/messages/800959.shtml
1. Запускал АЦП и он работал до слипа.
2. Power Down.
3. Делаю полную инициализацию и опрашиваю готовность.
4. Прерывание по int0? Да срабатывает. При тесте ничего не делаю. Возвращается. В прерывание не проваливаюсь. После слипа работает только прерываение по переполнению таймера. Если убрать проверку готовности АЦП то все остальное тоже рабротает.
#include <io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
// Declare your global variables here
unsigned int timer,adc_;
unsigned char int_mem,ttt;
void init (void)
{
DDRB=0x02;
PORTB=0x09;
TCCR0A=0x23;
TCCR0B=0x01;
TCNT0=0xF0;
GIMSK=0x20;
MCUCR=0x30;
PCMSK=0x01;
TIMSK0=0x02;
SREG |=(1<<7);
}
ISR (TIM0_OVF_vect)
{
if (timer--==0)
{
timer = 375;
}
}
ISR (PCINT0_vect)
{
//int_mem++;
}
unsigned int read_adc(void)
{
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
//while ((ADCSRA & 0x40)==0);
ADCSRA|=0x10;
return (ADCL|(ADCH<<8));
}
void init_adc (void)
{
ADMUX=0x42;//0b01000010;
ADCSRA=0xc6;//0b11000110;//0xC6;
ADCSRB=0x00;
DIDR0=0x14;//0b00010100;
ACSR=0x80;
}
int main(void)
{
init();
init_adc();
timer=375;
int_mem=0;
while(1)
{
if (int_mem<10)
{
ADCSRA=ADCSRA&0x7f;
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
cli();
sleep_enable();
sei();
sleep_cpu();
ADCSRA=ADCSRA|0x80;
sleep_disable();
ttt++;
}
adc_=read_adc();
adc_++;
}
}