реклама на сайте
подробности

 
 
> ADC msp430afe253, танцы с бубнами
Lordkorvin
сообщение May 24 2012, 06:50
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 24-05-12
Пользователь №: 71 981



Доброе время суток господа форумчане.

Столкнулся с такой проблемкой - завести АЦП на контроллере 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

третья проблема, если идти пошагово отладчиком, то при выполнении цикла какие то значения записываются и какой то результат получается, и он всегда разный, если же отправить процессор выполнять программу самому по кругу, то конечное значения всегда будет одно и то же, с какого бы места не запустилась программа, он первый раз получает какое то значение и после его не изменяет.

скажите в каком месте я дурак) заранее спасибо
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.05739 секунд с 7
ELECTRONIX ©2004-2016