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

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

Помогите, коллеги - не выходит каменный цветок. Не могу запустить ADC12 для периодического измерения бортовой температуры.

Отправлено 1111 04 апреля 2008 г. 09:52


Каюсь - слаб в матчасти. Идеология такова - каждые 50млс хочу сэмплами набивать буфер и вычислять скользящее среднее ну и сравнивать с нужным значением. Сконфигурировал на тактирование от мцлк, 10 канал - где сидит встроенный датчик, данные забираю с ADC12MEM0. Готовность контролирую по флагу прерывания 0. Почему-то хер когда этот флаг выставляется.
<code>

#define ADC_Start_Conversion() {ADC12CTL0 |= ADC12SC;}
#define ADC_Enable_Conversion() {ADC12CTL0 |= ENC;}
#define ADC_Disable_Conversion() {ADC12CTL0 &= ~ENC;}
#define ADC_Check_End_Conversion() ((ADC12IFG & (1<<0)) != 0)
#define ADC_Check_Ready() ((ADC12CTL1 & ADC12BUSY) == 0)

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Инициализация
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void ADC_Init(void)
{
ADC12CTL0 = ADC12ON | SHT0_8 | REFON | REF2_5V;
ADC12CTL1 = CSTARTADD_0 | ADC12SSEL_2 | ADC12DIV_1 | CONSEQ_0;
ADC12MCTL0 = INCH_10 + SREF_1;

ADC_Enable_Conversion();
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Проверка питания
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void ADC_Calc_Power(void)
{
u8_t tmptail, i;

tmptail = (adc.tail + 1) & ADC_BUF_MASK;
adc.buf[tmptail] = (u8_t)ADC12MEM0;
adc.tail = tmptail;

adc.main_pow = 0;
i = 0;
do
{
adc.main_pow += adc.buf[i];
i++;
}while(i<ADC_BUF_SIZE);

adc.main_pow /= 8;
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Процессор
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void ADC_Processor(void)
{
switch(adc.state)
{
case ADC_STATE_READY:
if(adc.timer == 0)
{
if(ADC_Check_Ready() != 0)
{
ADC_Start_Conversion();
adc.timer = ADC_SAPMLING_PERIOD;
adc.state = ADC_STATE_CONVERSION;
}
}
break;

case ADC_STATE_CONVERSION:
if(ADC_Check_End_Conversion() != 0)
{
ADC_Calc_Power();
adc.state = ADC_STATE_READY;
}
break;
}
}


</code>


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

Ответы


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

Сообщение:

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

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

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

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