Доброе время суток господа форумчане.
Столкнулся с такой проблемкой - завести АЦП на контроллере MSP430AFE253.
В этом кристале на борту присутствует 24 битный сигма-дельта АЦП. Вот его то и хочу попользовать.
#include <msp430afe253.h>
unsigned int i,j;
unsigned int pressure;
unsigned long int results[10];
unsigned long int res_temp;
unsigned int temp;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
//--------------------ADC-------------------------//
//adc_init;
__MSP430_HAS_SD24_A3__;
SD24INCTL0 |= SD24INCH0 + SD24INTDLY0; //выбор первого (нулевого) канала и задержка
SD24CTL |= SD24REFON + SD24SSEL0; // внутренний опорник и такт
SD24CCTL0 |= SD24UNI + SD24IE + SD24LSBACC + SD24SNGL; // униполярность прерывания младший байт сингл конверт
for (i = 0; i < 0x3600; i++) // задержка перед стартом внутреннего опорника
{
_NOP();
_NOP();
_NOP();
}
while (1)
{
for (i = 0; i < 10; i++)
{
SD24CCTL0 |= SD24SC; //старт преобразований
// сдесь втыкал задержки
results[i] = (SD24MEM0)-10; //сохранение результата в массив -10 использовано чтобы точно не было переполнения
SD24CCTL0 &= ~SD24SC; //стоп преобразований
}
for (i = 0; i < 10; i++)
{
temp = temp + results[i];
}
pressure = temp/10; // здесь должны получить усредненные значения.
}
}
теперь собственно проблема: в ячейке SD24MEM0 данные есть, но они не всегда записываются в переменную, а как то 1 раз из 5. пробовал делать и программную задержку до установки флага SD16IFG, и просто пропуск пары операций проца, и по прерываниям.
вторая проблема в том что данные в ячейке SD24MEM0 каждый раз разные и варьируются от 0x0000 до 0xFFFF даже если оба провода посадить на GND. данные в SD24MEM0 смотрел в при отладке, пользую IAR
третья проблема, если идти пошагово отладчиком, то при выполнении цикла какие то значения записываются и какой то результат получается, и он всегда разный, если же отправить процессор выполнять программу самому по кругу, то конечное значения всегда будет одно и то же, с какого бы места не запустилась программа, он первый раз получает какое то значение и после его не изменяет.
скажите в каком месте я дурак) заранее спасибо