Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ: ответ на вопросы и код

Отправлено barmer 18 июня 2009, г. 06:33


Продолжение темы
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_++;
}
}



Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
вычтите два из трёх, получится:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru