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

 
 
> Конфигурация 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
 
Start new topic
Ответов
Иван Иванов
сообщение Dec 1 2013, 05:13
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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



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

 


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


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