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

 
 
> MSPx2xx модуль АЦП10, Советы
KARLSON
сообщение Apr 19 2011, 08:51
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Здравствуйте. Предлагаю сюда вносить все вопросы связанные с АЦП10 2-го семейства.
У меня вопрос такой.
Надо оцифровывать 2 канала P3.0 (A5) и P3.7(A7).
Хочу за одно вздёргивание бита ADC10SC получить 2 измерения. И что бы эти измерения скопировались в структуру АВ с помощью DTC.
Код
#include "msp430x21x2.h"

struct _AB
{
  unsigned int A2;
  unsigned int A1;
  unsigned int A0;
}AB;

void Pause (unsigned int time) { while (time-- > 0);}

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  P2SEL = BIT6 + BIT7;
  
// сброс флага "сбой генератора" и запрет прер-ия OFIE при не исправ-ти DC-генератора
  IE1 &= ~OFIE;
  IFG1 &= ~OFIFG;

  // предустановка желаемой частоты DCOCLK = 8MГц
  _BIC_SR(OSCOFF);              // включить генератор LFXT1
  DCOCTL = CALDCO_8MHZ;
  BCSCTL1 = CALBC1_8MHZ;
  BCSCTL1 |= XT2OFF + XTS + DIVA_0; // источник такт-ия MCLK и SMCLK - DCOCLK, MCLK = DCOCTL/1, SMCLK = DCOCTL/1
  BCSCTL3 = LFXT1S_2;
// инициализация LFXT1
  do  
  {
    IFG1 &= ~OFIFG;
    Pause(5000);
  }while (IFG1 & OFIFG);

  BCSCTL2 = SELM_3  //SELM_0  (0x00)   /* MCLK Source Select 0: DCOCLK */
                 +DIVM_0  
                 +DIVS_3;
  
  ADC10CTL1 =// INCH_5
            + INCH_7
          ///  + ADC10DIV_7
           + ADC10SSEL_2   // MCLK = 8МГц
            + CONSEQ_1
           ;
   ADC10CTL0 |= ADC10SHT_3
                     //  + MSC              
                      + ADC10ON;
  
  ADC10AE0 = BIT7
           + BIT5
            ;
  ADC10DTC0 |= ADC10CT;
  ADC10DTC1 = 2;
  ADC10SA = (unsigned int ) &AB.A2;
  
  ADC10CTL0 |= ENC;
  
  while (1)
  {
    ADC10CTL0 &= ~ENC;
    
    while (BUSY & ADC10CTL1);
    ADC10CTL0 |= ENC + ADC10SC;             // Start sampling

    _NOP();
    
  }

}


Но ничего не выходит. Измерения смотрю в Watch.
Измерять один канал у меня получается. Но не переконфигурировать же мне постоянно модуль.
Посоветуйте как его настроить?


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jun 15 2011, 17:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Alexander Petrov, раз уж вы пишете программу на языке высокого уровня (Си), то почему бы вам не воспользоваться стандартными символьными обозначениями битов MSP430? Вы думаете у кого-то возникает страстное желание разбираться с вашими 16-иричными константами, сопоставляя их битам регистров? sad.gif
По поводу вашей программы могу предположить, что у вас таймер попросту не запускается. Потому что вы неправильно его инициализируете. Обратите внимание в User's Manual на описание бита TACLR
Цитата
TACLR Bit 2 Timer_A clear. Setting this bit resets TAR, the clock divider, and the count direction. The TACLR bit is
automatically reset and is always read as zero.

При установке этого бита таймер сбрасывается и останавливается потому, что. обнуляются биты MCx. Добавьте в конце после инициализации всех регистров таймера команду для его запуска, включив режим Up mode.
Код
TACTL |= MC0;

Кстати, сообщите потом удалось ли вам "победить" Data Tranfer от модуля ADC10? Я когда-то давно попробовал его использовать, но забросил, т.к. не смог сходу получить однозначности при переносе данных преобразования от разных каналов. Данные как-то странным образом сдвигались, не попадая в соответствующие им ячейки памяти SRAM. Я уже выше писал, что разбираться не стал и потом больше повода не возникало. Но некая неудовлетворенность от непоняток осталась rolleyes.gif
Go to the top of the page
 
+Quote Post
Alexander Petrov
сообщение Jun 17 2011, 04:36
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 7-12-07
Пользователь №: 33 066



Цитата(rezident @ Jun 15 2011, 23:15) *
Alexander Petrov, раз уж вы пишете программу на языке высокого уровня (Си), то почему бы вам не воспользоваться стандартными символьными обозначениями битов MSP430? Вы думаете у кого-то возникает страстное желание разбираться с вашими 16-иричными константами, сопоставляя их битам регистров? sad.gif
По поводу вашей программы могу предположить, что у вас таймер попросту не запускается. Потому что вы неправильно его инициализируете. Обратите внимание в User's Manual на описание бита TACLR

При установке этого бита таймер сбрасывается и останавливается потому, что. обнуляются биты MCx. Добавьте в конце после инициализации всех регистров таймера команду для его запуска, включив режим Up mode.
Код
TACTL |= MC0;

Кстати, сообщите потом удалось ли вам "победить" Data Tranfer от модуля ADC10? Я когда-то давно попробовал его использовать, но забросил, т.к. не смог сходу получить однозначности при переносе данных преобразования от разных каналов. Данные как-то странным образом сдвигались, не попадая в соответствующие им ячейки памяти SRAM. Я уже выше писал, что разбираться не стал и потом больше повода не возникало. Но некая неудовлетворенность от непоняток осталась rolleyes.gif


rezident, по поводу остановки таймера при установке бита TACLR вы не правы - таймер сбрасывается и продолжает работать с нуля.

а по поводу DTC эффект сдвига действительно наблюдался. Однако до момента останова данные поападают на свои места (т.е. при первом останове они нормально расположены, а далее могут сдвигаться). Мне удавалось наблюдать нормальную работу, когда останов производился в обработчике прерывания АЦП.
Go to the top of the page
 
+Quote Post
KARLSON
сообщение Jun 17 2011, 05:36
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Цитата(Alexander Petrov @ Jun 17 2011, 08:36) *
при установке бита TACLR вы не правы - таймер сбрасывается и продолжает работать с нуля.

Он не просто сбрасывается, а:
1) обнуляет регистр TAR
2) обнуляет делитель
3) сбрасывает признак направления счёта

И перепишите код, в место чисел названия бит. Помощь поступит быстрее)))

Сообщение отредактировал KARLSON - Jun 17 2011, 07:22


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post



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

 


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


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