ADC in MSP430

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Как поживаете, All ?

Пытаюсь сделать первый проект на MSP430F149
Hе получается запустить АЦП в режиме sequence of chanels и выгребать данные по
прерыванию при завершении преобразования.
Кто-нибудь из олл этот режим использовал?
Буду сильно признателен за примеры работы с АЦП в этом режиме сюда или на
vadim snipped-for-privacy@yahoo.com, да и вообще за любые примеры для сабж, желательно на С.
Диск от TI есть ;)

                C уважением, Vadim Harlamov.

ADC in MSP430
Vadim Harlamov wrote to All on Sun, 28 Sep 2003 10:59:11 +0400:

VH> Пытаюсь сделать первый проект на MSP430F149
VH> Hе получается запустить АЦП в режиме sequence of chanels и выгребать данные
VH> по прерыванию при завершении преобразования.
VH> Кто-нибудь из олл этот режим использовал?
VH> Буду сильно признателен за примеры работы с АЦП в этом режиме сюда или на
VH> vadim snipped-for-privacy@yahoo.com, да и вообще за любые примеры для сабж, желательно на
VH> С. Диск от TI есть ;)

    На этом диске должны быть примеры работы с АЦП для разных режимов. Файлики
называются типа fet140_adc12_xx.c.

    Я использовал: запуск - много каналов однократно - стоп - прерывание -
забираем результат.

// -------------------------------------------------
//
//
//     Инициализация
//
//
    // Setup ADC12 & REF, ref = 2.5V, sampling time, multiCH
    ADC12CTL0 = ADC12ON+REFON+REF2_5V+SHT0_10+SHT1_10+MSC;

    // Use sampling timer, setup conversion mode, start in 0CH
    ADC12CTL1 = SHP+CONSEQ_1+CSTARTADD_0;


    ADC12MCTL0 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+
    ADC12MCTL1 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+
    ADC12MCTL2 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+
    ADC12MCTL3 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+
    ADC12MCTL4 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+
    ADC12MCTL5 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+
    ADC12MCTL6 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+
    ADC12MCTL7 = INCH_6+SREF_0;      // Select channel A6 (Alpha),Vref+

    ADC12MCTL8 = INCH_10+SREF_1;     // Select channel A10 (Temperature), Vref+
    ADC12MCTL9 = INCH_10+SREF_1;     // Select channel A10 (Temperature), Vref+
    ADC12MCTL10 = INCH_10+SREF_1;    // Select channel A10 (Temperature), Vref+

    ADC12MCTL11 = INCH_5+SREF_1;     // Select channel A5 (Pressure), Vref+
    ADC12MCTL12 = INCH_5+SREF_1;     // Select channel A5 (Pressure), Vref+
    ADC12MCTL13 = INCH_5+SREF_1;     // Select channel A5 (Pressure), Vref+

    ADC12MCTL14 = INCH_7+SREF_1;     // Select channel A7 (Battery), Vref+
    ADC12MCTL15 = INCH_7+SREF_1+EOS; // Select channel A7 (Battery), Vref+

    ADC12IE = (word)(1 << 15);       // Enable ADC12IFG.15


// -------------------------------------------------
//
//
//     Запуск
//

    static void Start()
    {
        __disable_interrupt();
        ADC12CTL0 |= ENC;                       // ADC enable conversion
        ADC12CTL0 |= ADC12SC;                   // ADC start conversion
        __bis_SR_register(LPM0_bits + GIE);
    }

// -------------------------------------------------
//
//
//     Обработчик прерывания
//

__interrupt void TADC::ConversionComplete()
{
    word x = ADC12MEM15;                        // clear interrupt flag

    __bic_SR_register_on_exit(LPM0_bits);
}

    Ну, и потом данные забираешь, обрабатываешь... Я это делаю не в обработчике
прерываний. Во время оцифровывания CPU вырублено, спит, чтобы не шуметь.
Просыпается в обработчике прерывания.


...so long!

### Тяжело в мyчении - легко в гpобy.




Site Timeline