Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADC MSP430
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
jjjjjjein
АЦП работает в режиме "повторяющаяся последовательность каналов"(ниже написан код). Хочу перейти на режим "повторяющийся одноканальный". Какие регистры изменить и что добавить для работы АЦП в "повторяющемся одноканальном" режиме, чтобы брать из ячейки памяти №15 данные о температуре с внутреннего температурного датчика?
Код
void InitializationADC (void)                          // Функция инициализации модуля АЦП микроконтроллера
     {
      
       // Управляющий регистр 0 АЦП12 - ADC12CTL0
       ADC12CTL0 = ADC12ON |                                  // Включаем модуль АЦП
                   MSC |                                      // Разрешаем режим множественных выборок и преобразований (только для последовательных и повторных режимов преобразования)  
                   SHT1_4;                                   // Устанавливаем время выборки и хранения для ячеек памяти результатов преобразования с 8 по 15 равным 32 циклам
//                   ENC |                                      // Разрешаем преобразование
//                 ADC12SC;                                  // Запускаем преобразование  

       // Управляющий регистр 1 АЦП12 - ADC12CTL1
       ADC12CTL1 = SHP |                                        // Источник сигнала SAMPCON -> таймер выборки и хранения
                   ADC12SSEL0 | ADC12SSEL1 |                    // Источник тактирования АЦП -> тактовая частота SMCLK
                   CONSEQ_3 |                                   // Режим работы АЦП -> повторяющаяся последовательность каналов
                  // CONSEQ_2 |                                   // Режим работы АЦП -> повторяющийся одноканальный
                   CSTARTADD_15 |                                // Стартовый адрес начала преобразования АЦП -> ADC12MEM15
                  ADC12DIV_3;                                 // Тактовый делитель частоты тактирования = 4  
            
       // Управляющий регистр памяти преобразований АЦП12

      ADC12MCTL15 =  INCH_10;             // Для ячейки памяти №15 включаем внутренний датчик температуры

      
       // Управляющий регистр разрешения прерываний АЦП - ADC12IE
       ADC12IE = ADC12IV_ADC12IFG15;                          // Разрешаем прерывание от АЦП при заполнении 15 ячейки памяти

     }
usercod
Цитата
Хочу перейти на режим "повторяющийся одноканальный". Какие регистры изменить


В регистре ADC12CTL1 биты ADC12CONSEQx.

Вообще, посмотрите на пример для MSP:
CODE

//******************************************************************************
// MSP430F552x Demo - ADC12, Sample A10 Temp and Convert to oC and oF
//
// Description: A single sample is made on A10 with reference to internal
// 1.5V Vref. Software sets ADC12SC to start sample and conversion - ADC12SC
// automatically cleared at EOC. ADC12 internal oscillator times sample
// and conversion. In Mainloop MSP430 waits in LPM4 to save power until
// ADC10 conversion complete, ADC12_ISR will force exit from any LPMx in
// Mainloop on reti.
// ACLK = n/a, MCLK = SMCLK = default DCO ~ 1.045MHz, ADC12CLK = ADC12OSC
//
// Uncalibrated temperature measured from device to devive will vary do to
// slope and offset variance from device to device - please see datasheet.
//
// NOTE:REFMSTR bit in REFCTL0 regsiter is reset to allow the ADC12_A reference
// control regsiters handle the reference setting. Upon resetting the REFMSTR
// bit, all the settings in REFCTL are 'dont care' and the legacy ADC12
// control bits (ADC12REFON, ADC12REF2_5, ADC12TCOFF and ADC12REFOUT) control
// the reference system.
//
// MSP430F552x
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// |A10 |
//
// Bhargavi Nisarga / W. Goh
// Texas Instruments Inc.
// November 2010
// Built with CCSv4 and IAR Embedded Workbench Version: 4.21
//******************************************************************************

#include <msp430f5529.h>

long temp;
volatile long IntDegF;
volatile long IntDegC;

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
REFCTL0 &= ~REFMSTR; // Reset REFMSTR to hand over control to
// ADC12_A ref control registers
ADC12CTL0 = ADC12SHT0_8 + ADC12REFON + ADC12ON;
// Internal ref = 1.5V
ADC12CTL1 = ADC12SHP; // enable sample timer
ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_10; // ADC i/p ch A10 = temp sense i/p
ADC12IE = 0x001; // ADC_IFG upon conv result-ADCMEMO
__delay_cycles(75); // 75us delay to allow Ref to settle
ADC12CTL0 |= ADC12ENC;

while(1)
{
ADC12CTL0 |= ADC12SC; // Sampling and conversion start

__bis_SR_register(LPM4_bits + GIE); // LPM0 with interrupts enabled
__no_operation();

// Temperature in Celsius
// ((A10/4096*1500mV) - 680mV)*(1/2.25mV) = (A10/4096*667) - 302
// = (A10 - 1855) * (667 / 4096)
IntDegC = ((temp - 1855) * 667) / 4096;

// Temperature in Fahrenheit
// ((A10/4096*1500mV) - 640mV)*(1/1.25mV) = (A10/4096*1200) - 512
// = (A10 - 1748) * (1200 / 4096)
IntDegF = ((temp - 1748) * 1200) / 4096;
__no_operation(); // SET BREAKPOINT HERE
}
}

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC overflow
case 4: break; // Vector 4: ADC timing overflow
case 6: // Vector 6: ADC12IFG0
temp = ADC12MEM0; // Move results, IFG is cleared
__bic_SR_register_on_exit(LPM4_bits); // Exit active CPU
break;
case 8: break; // Vector 8: ADC12IFG1
case 10: break; // Vector 10: ADC12IFG2
case 12: break; // Vector 12: ADC12IFG3
case 14: break; // Vector 14: ADC12IFG4
case 16: break; // Vector 16: ADC12IFG5
case 18: break; // Vector 18: ADC12IFG6
case 20: break; // Vector 20: ADC12IFG7
case 22: break; // Vector 22: ADC12IFG8
case 24: break; // Vector 24: ADC12IFG9
case 26: break; // Vector 26: ADC12IFG10
case 28: break; // Vector 28: ADC12IFG11
case 30: break; // Vector 30: ADC12IFG12
case 32: break; // Vector 32: ADC12IFG13
case 34: break; // Vector 34: ADC12IFG14
default: break;
}
}


Если хотите могу дать примеры от TI где рассматриваются различные конфигурации АЦП.
jjjjjjein
Эти то биты, это понятно. Они сам режим изменяют. А кроме них, что изменить. Я переделала код, но АЦП не работает.
Код
ADC12CTL1 = SHP |                                        // Источник сигнала SAMPCON -> таймер выборки и хранения
                   ADC12SSEL0 | ADC12SSEL1 |                    // Источник тактирования АЦП -> тактовая частота SMCLK
                   CONSEQ_2 |                                   // Режим работы АЦП -> повторяющийся одноканальный
                   CSTARTADD_15 |                                // Стартовый адрес начала преобразования АЦП -> ADC12MEM15
                  ADC12DIV_3;

Спасибо за пример. Если ещё примеры скинете, то буду рада)
usercod
Цитата
Спасибо за пример. Если ещё примеры скинете, то буду рада)

Пожалуйста. Вот примеры:Нажмите для просмотра прикрепленного файла
rezident
Цитата(usercod @ Feb 14 2012, 10:58) *

Зачем здесь выкладывать чужие (не свои) исходники, если все они есть на сайте производителя фирмы TI? Не проще ли дать ссылку?
http://www.ti.com/lsds/ti/microcontroller/...re_landing.page
usercod
Цитата
Зачем здесь выкладывать чужие (не свои) исходники, если все они есть на сайте производителя фирмы TI?

Потому что ссылку на эти же исходники уже выкладывали ранее в другой теме (UART) этого автора, но почему то такой способ автора не удовлетворил.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.