Перейти к содержанию
    

lordkorvin

Новичок
  • Постов

    1
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. ADC msp430afe253

    Доброе время суток господа форумчане. Столкнулся с такой проблемкой - завести АЦП на контроллере 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 третья проблема, если идти пошагово отладчиком, то при выполнении цикла какие то значения записываются и какой то результат получается, и он всегда разный, если же отправить процессор выполнять программу самому по кругу, то конечное значения всегда будет одно и то же, с какого бы места не запустилась программа, он первый раз получает какое то значение и после его не изменяет. скажите в каком месте я дурак) заранее спасибо
×
×
  • Создать...