Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Регистры ЦАП ADuC842

Пт июн 26, 2020 05:50:46

Доброго времени суток, кто то может подсказать как записать регистры для 12-битного режима ЦАП с внутренним источником опорного напряжения? пожалуйста

Re: Регистры ЦАП ADuC842

Пт июн 26, 2020 06:31:12

Вопрос неконкретный. 12 бит там всегда, иного режима нет, насколько мне известно. Внутренний или внешний ион выбирается EXT_REF (6 битом) ADCCON1, а значит, ответ на Ваш вопрос получается таким: ADCCON1 &= 0xBF; и у меня возникают сомнения, что подобный ответ Вам поможет.
Гораздо лучше помогут документация https://www.analog.com/en/products/aduc ... umentation и примеры: https://www.analog.com/en/products/aduc ... equirement

Re: Регистры ЦАП ADuC842

Пт июн 26, 2020 06:56:09

Вопрос неконкретный. 12 бит там всегда, иного режима нет, насколько мне известно. Внутренний или внешний ион выбирается EXT_REF (6 битом) ADCCON1, а значит, ответ на Ваш вопрос получается таким: ADCCON1 &= 0xBF; и у меня возникают сомнения, что подобный ответ Вам поможет.
Гораздо лучше помогут документация https://www.analog.com/en/products/aduc ... umentation и примеры: https://www.analog.com/en/products/aduc ... equirement

Спасибо за ответ)
Но регистр управления режимом работы ЦАП - DACСON
и бит DACCON.7 (MODE) отвечает за 8 бит или 12 бит - mode=1 8 бит, mode=0 12 бит
а регистр ADCCON1 регистр управления режимом АЦП
Разве нет?) а мне нужен ЦАП
Хотя я вижу что ADCCON1.6 (EXT_REF) отвечает за внутр ИОН и внеш ИОН
и как вот в таком случае записать регистры для 12 битного режима ЦАП с внутр ИОН
Или я совсем не так думаю?

Добавлено after 11 minutes 51 second:
BlackKilkennyCat, Спасибо за ответ)
Но регистр управления режимом работы ЦАП - DACСON
и бит DACCON.7 (MODE) отвечает за 8 бит или 12 бит - mode=1 8 бит, mode=0 12 бит
а регистр ADCCON1 регистр управления режимом АЦП
Разве нет?) а мне нужен ЦАП
Хотя я вижу что ADCCON1.6 (EXT_REF) отвечает за внутр ИОН и внеш ИОН
и как вот в таком случае записать регистры для 12 битного режима ЦАП с внутр ИОН
Или я совсем не так думаю?

Re: Регистры ЦАП ADuC842

Пт июн 26, 2020 07:06:26

А, это я перепутал, отвечал как для ЦАП, прошу прощения.
Но тогда Вы всё правильно указали, DACCON.7 за выбор режима 12 бит, и DACCON.6 (DACCON.5) за выбор внешнего или внутреннего ИОН

Вот пример от производителя генерации синусоиды через 12-битный DAC0 c Vref:

Код:
void main (void)
{
   
   unsigned code values[64][2]={{0x07, 0xFF},{0x08, 0xC8},{0x09, 0x8E},{0x0A, 0x51},{0x0B, 0x0F},
                          {0x0B, 0xC4},{0x0C, 0x71},{0x0D, 0x12},{0x0D, 0xA7},{0x0E, 0x2E},
                             {0x0E, 0xA5},{0x0F, 0x0D},{0x0F, 0x63},{0x0F, 0xA6},{0x0F, 0xD7},
                          {0x0F, 0xF5},{0x0F, 0xFF},{0x0F, 0xF5},{0x0F, 0xD7},{0x0F, 0xA6},
                          {0x0F, 0x63},{0x0F, 0x0D},{0x0E, 0xA5},{0x0E, 0x2E},{0x0D, 0xA7},
                          {0x0D, 0x12},{0x0C, 0x71},{0x0B, 0xC4},{0x0B, 0x0F},{0x0A, 0x51},
                          {0x09, 0x8E},{0x08, 0xC8},{0x07, 0xFF},{0x07, 0x36},{0x06, 0x70},
                          {0x05, 0xAD},{0x04, 0xEF},{0x04, 0x3A},{0x03, 0x8D},{0x02, 0xEC},
                          {0x02, 0x57},{0x01, 0xD0},{0x01, 0x59},{0x00, 0xF1},{0x00, 0x9B},
                        {0x00, 0x58},{0x00, 0x27},{0x00, 0x09},{0x00, 0x00},{0x00, 0x09},
                        {0x00, 0x27},{0x00, 0x58},{0x00, 0x9B},{0x00, 0xF1},{0x01, 0x59},
                        {0x01, 0xD0},{0x02, 0x57},{0x02, 0xEC},{0x03, 0x8D},{0x04, 0x3A},
                        {0x04, 0xEF},{0x05, 0xAD},{0x06, 0x70},{0x07, 0x36}};
   
    DACCON = 0x0D;      //DAC0 on 12-bit Asynchronous
                     
    DAC0H = 0x08;         //DAC0 mid scale
    DAC0L = 0x00;

   while (1)
   {
      int i;
      for ( i = 0 ; i < 64; i++)
      {
         DAC0H = values[i][0];
         DAC0L = values[i][1];
      }
   }
}

Re: Регистры ЦАП ADuC842

Пт июн 26, 2020 07:49:25

BlackKilkennyCat, а можно подсказку пожалуйста как рассчитываются DAC0L и DAC0H

Re: Регистры ЦАП ADuC842

Пт июн 26, 2020 08:38:07

Обычная математика: любой график - это функция. Например, синосоиды у=sin(x). здесь x может принимать значения от 0 до 2 * Pi. Следующим этапом мы выбираем частоту выборки (или разрешение, или кол-во шагов, или качество - боюсь, что не очень точно помню здесь терминологию), в данном примере взято 64, то есть, делим 2*Pi на 64 и получаем приращение x на каждом шаге. Дальше мы вычисляем значение у для каждого шага и получаем таблицу значений у, фактически то, что надо послать в цап. Ну а изменение амплитуды синусоиды достигается умножением у на какой-то коэффициент.
Фактически, можно было бы просто написать что-то типа такого:

dx = 2 * 3.14 / 64;
for ( i = 0 ; i < 64; i++)
{
DAC = (sin(i*dx) + 1) * 2047; //здесь я упростил разбивку на старший и младший байты
}
И разумеется, надо учесть то, что у может принимать отрицательные значения, что нам совершено не нужно, поэтому в формуле есть +1
и таким образом синусоида имеет изменение амплитуды от 0 до 2. В случае 12 битного ЦАП, максимальное значение амплитуды может быть 4095, поэтому умножаем на 2047;
Но вычисления синуса медленны, поэтому проще их сразу просчитать и загнать в таблицу. Выборка из таблицы - самый быстрый вариант. Только придется расплачиваться объёмом памяти.
Ответить