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

 
 
 
Reply to this topicStart new topic
> Конфигурация DAC12
Иван Иванов
сообщение Nov 30 2013, 18:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-09-13
Пользователь №: 78 173



Для устройства требуется сконфигурировать ЦАП как группу. Для теста подаю на ЦАП 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;
}

Что не так конфигурирую - почему неправильный сигнал на выходе ?
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 30 2013, 18:56
Сообщение #2


Гуру
******

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



Цитата(Иван Иванов @ 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
Go to the top of the page
 
+Quote Post
Иван Иванов
сообщение Dec 1 2013, 05:13
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-09-13
Пользователь №: 78 173



Я использую 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 схеме - сигнал с ножки термодатчика. Напряжения на выходе датчика и выходах ЦАП не совпадают. (там на ЦАП будет подаваться сигнал температуры+-какое-то значение потом)ю
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 1 2013, 21:31
Сообщение #4


Гуру
******

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



Цитата(Иван Иванов @ Dec 1 2013, 10:13) *
Реализую эту схему. На вход ЦАПов поступает сигнал с P6.0(выход АЦП)

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

Вход ЦАП и выход АЦП??? wacko.gif То ли глубокая ночь виновата, то ли я чего-то не совсем понимаю в вашей терминологии. cranky.gif
Go to the top of the page
 
+Quote Post
Иван Иванов
сообщение Dec 4 2013, 16:46
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-09-13
Пользователь №: 78 173



На ацп поступает напряжение с измерителя температуры. Значение АЦП +/- некоторое значение подаются на ЦАПы и задают порог реагирования прерываний на изменение температуры.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 03:21
Рейтинг@Mail.ru


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