Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Конфигурация DAC12
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Иван Иванов
Для устройства требуется сконфигурировать ЦАП как группу. Для теста подаю на ЦАП 0, но на выходе всех портов P6.x получаю некоторый ненулевой уровень напряжения (около 1В). Пробовал устанавливать порты на вывод с помощью P6SEL, P6DIR - то же самое. Вот мои процедуры инициализации:
void init_DAC0(void)
{
//устанавливаем 12-разрядное разрешение
DAC12_0CTL&=~BIT12;
//устанавливаем диапазон входного опорного
//напряжения ЦАП12 равным 1-но кратному опорному напряжению Vref+
DAC12_0CTL|=BIT8;
//устанавливаем натуральный двоичный формат данных
DAC12_0CTL&=~BIT4;
//для входного и выходного буферов устанавливаем высокую скорость/ток
DAC12_0CTL|=BIT7;
DAC12_0CTL|=BIT6;
DAC12_0CTL|=BIT5;
//устанавливаем опорное напряжение равным Vref+
DAC12_0CTL&=~BIT14;
DAC12_0CTL&=~BIT13;
//загрузку в защелку ЦАП12 осуществляем при записи во все регистры DAC12_xDAT группы
DAC12_0CTL&=~BIT11;
DAC12_0CTL|=BIT10;
//группировка на этом ЦАП выставляется
DAC12_0CTL|=BIT0;
//отключаем прерывания от ЦАП12
DAC12_0CTL&=~BIT3;//разрешение прерывания
DAC12_0CTL&=~BIT2;//флаг прерывания
//включаем преобразование
DAC12_0CTL|=BIT1;
//запускаем калибровку и ждём её завершения
/*DAC12_0CTL|=BIT9;
while((DAC12_0CTL&BIT9)==1);*/
}
void init_DAC1(void)
{
//устанавливаем 12-разрядное разрешение
DAC12_1CTL&=~BIT12;
//устанавливаем диапазон входного опорного
//напряжения ЦАП12 равным 1-но кратному опорному напряжению Vref+
DAC12_1CTL|=BIT8;
//устанавливаем натуральный двоичный формат данных
DAC12_1CTL&=~BIT4;
//для входного и выходного буферов устанавливаем высокую скорость/ток
/*DAC12_1CTL|=BIT7;
DAC12_1CTL|=BIT6;
DAC12_1CTL|=BIT5;*/ // здесь при записи хотя бы 1 бита в 1 напряжение на выходе всегда 0
//устанавливаем опорное напряжение равным Vref+
DAC12_1CTL&=~BIT14;
DAC12_1CTL&=~BIT13;
//загрузку в защелку ЦАП12 осуществляем при записи во все регистры DAC12_xDAT группы
DAC12_1CTL&=~BIT11;
DAC12_1CTL|=BIT10;
//группировка на этом ЦАП не выставляется
DAC12_1CTL&=~BIT0;
//отключаем прерывания от ЦАП12
DAC12_1CTL&=~BIT3;//разрешение прерывания
DAC12_1CTL&=~BIT2;//флаг прерывания
//включаем преобразование
DAC12_1CTL|=BIT1;
//запускаем калибровку и ждём её завершения
DAC12_1CTL|=BIT9;
while((DAC12_1CTL&BIT9)==1);
}
Далее записываю в ЦАП так:
void write_DAC0(unsigned int val)
{

DAC12_0DAT = val;
}

void write_DAC1(unsigned int val)
{
DAC12_1DAT = val;
}

Что не так конфигурирую - почему неправильный сигнал на выходе ?
rezident
Цитата(Иван Иванов @ Nov 30 2013, 23:21) *
Что не так конфигурирую - почему неправильный сигнал на выходе ?

Уточните тип используемого кристалла. Речь про DAC12 в серии MSP430x2xx или про DAC12_A в серии MSP430x5xx? В любом случае см. в конце datasheet приложение, где есть блок-схема и таблица описания функций конкретных пинов - там указано какие пины ответственны за конфигурацию функций пинов. Для включения функции выхода DAC нужно соблюдение уловия DAC12AMP > 0. Для DAC0 есть еще нюанс с выбором одного из двух пинов.
Цитата
On most devices, the DAC outputs are multiplexed with the port Px pins and other potentially other
secondary functions. When DAC12AMPx > 0, the DAC function is automatically selected for the pin,
regardless of the state of the associated PxSELx and PxDIRx bits. See the port pin schematic in the
device-specific data sheet for more details.

А вообще, почему бы вам не посмотреть примеры, имеющиеся на сайте производителя? Там есть примеры использования разных периферийных моделей и на ASM и на Си. http://www.ti.com/lsds/ti/microcontroller/...tware.page#code
Иван Иванов
Я использую MSP430FG4618 с его экспериментальной платой. Перепробовал все примеры из интернета - результат одинаковый - на порте 6 странное напряжение. В ервом же примере такие команды приводятся, я их уже пробовал:
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC12CTL0 = REF2_5V + REFON;
DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Int ref gain 1
DAC12_0DAT = 0x0666;
Перед ЦАП я конфигурирую АЦП, где выставляются нужные биты REFON+REF2_5V для ЦАП(специально для него я их использовал):

void init_ADC(void)
{
ADC12CTL0&=~ENC;//разрешаем модифицирование битов управления
//отключаем прерывания
ADC12IE=0x0;
if((ADC12CTL0&(~ENC))==0)
{
ADC12CTL0&=~ADC12ON;//выключаем АЦП перед настройкой
ADC12CTL0|=REF2_5V;//устанавливаем опороное напряжение 2,5 В - требуются конденсаторы
ADC12CTL0|=REFON;//включаем генератор опорного напряжения
//отключены множественые выборки и преобразования
ADC12CTL0&=~BIT7;

ADC12CTL1&=~ADC12BUSY;//выключаем преобразование
if((ADC12CTL1&(~ADC12BUSY))==0)
{
//устанавливаем тактовый делитель /1
ADC12CTL1&=~BIT7;
ADC12CTL1&=~BIT6;
ADC12CTL1&=~BIT5;
//устанавливаем источник выборки хранения - ADC12SC
ADC12CTL1&=~BIT11;
ADC12CTL1&=~BIT10;
//входной сигнал выборки ADC12SC не инвертирован
ADC12CTL1&=~BIT8;
//устанавливаем источник сигнала выборки - входной сигнал выборки
ADC12CTL1&=~BIT9;
//устанавливаем регистр MEM0 для результата преобразования
ADC12CTL1&=~BIT15;
ADC12CTL1&=~BIT14;
ADC12CTL1&=~BIT13;
ADC12CTL1&=~BIT12;
//одноканальный режим преобразования с одним преобразованием
ADC12CTL1&=~BIT2;
ADC12CTL1&=~BIT1;
}
//конфигурируем регистр результата преобразований
//устанавливаем опорный источник Vref+ AVss
ADC12MCTL0&=~BIT6;
ADC12MCTL0&=~BIT5;
ADC12MCTL0&=~BIT4;
//выбираем входной канал А0
ADC12MCTL0&=~BIT3;
ADC12MCTL0&=~BIT2;
ADC12MCTL0&=~BIT1;
ADC12MCTL0&=~BIT0;
//конец последовательности
ADC12MCTL0|=BIT7;
//только А0 P6.0
P6SEL|=0x01;
//включаем АЦП12
ADC12CTL0 = ADC12ON;
}
}

АЦП у меня нормально работает.



Реализую эту схему. На вход ЦАПов поступает сигнал с P6.0(выход АЦП), другой сигнал на 1 схеме - сигнал с ножки термодатчика. Напряжения на выходе датчика и выходах ЦАП не совпадают. (там на ЦАП будет подаваться сигнал температуры+-какое-то значение потом)ю
rezident
Цитата(Иван Иванов @ Dec 1 2013, 10:13) *
Реализую эту схему. На вход ЦАПов поступает сигнал с P6.0(выход АЦП)

Цитата(Иван Иванов @ Dec 1 2013, 10:13) *
(там на ЦАП будет подаваться сигнал температуры+-какое-то значение потом)

Вход ЦАП и выход АЦП??? wacko.gif То ли глубокая ночь виновата, то ли я чего-то не совсем понимаю в вашей терминологии. cranky.gif
Иван Иванов
На ацп поступает напряжение с измерителя температуры. Значение АЦП +/- некоторое значение подаются на ЦАПы и задают порог реагирования прерываний на изменение температуры.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.