Программирование DSP AD5667 - ЦАП с интерфейсом I2C Thu, October 10 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

AD5667 - ЦАП с интерфейсом I2C Печать
Добавил(а) microsin   

Микросхемы AD5627R/AD5647R/AD5667R компании Analog Devices это 12-/14-/16-bit DAC (ЦАП) со встроенным опорным напряжением 1.25V/2.5V, обладающим стабильностью 5 ppm/°C. Микросхемы AD5627/AD5667 (без буквы R) отличаются тем, что имеют разрядность 12-/16-bit, и работают только от внешнего источника опорного напряжения.

AD56x7R block diagram fig01

Рис. 1. AD5627R/AD5647R/AD5667R.

AD56x7 block diagram fig02

Рис. 2. AD5627/AD5667.

Микросхемы выпускаются в миниатюрных корпусах: 3x3 мм LFCSP и 10-выводном MSOP. Есть встроенный сброс при включении питания, возвращающий DAC к нулевой шкале, каждый канал имеет функцию выключения. Аппаратные сигналы ~LDAC и ~CLR служат для синхронизации процесса установки выхода. I2C-совместимый последовательный интерфейс поддерживает режимы стандартной скорости (standard speed 100 кГц), повышенной скорости (fast speed 400 кГц) и high speed (3.4 МГц).

[Общее описание]

Модели AD5627R/AD5647R/AD5667R, AD5627/AD5667 представляют семейство nanoDAC - ЦАП с низким потреблением, двухканальный, разрядностью 12, 14, 16 бит с буферизацией, со встроенным источником опорного напряжения (AD5627/AD5667 работают от внешнего источника опорного напряжения). Все устройства могут работать от одного источника напряжения питания в диапазоне 2.7V .. 5.5V.

У моделей AD5627R/AD5647R/AD5667R встроенный источник опорного напряжения. Модель AD56x7RBCPZ имеет встроенный источник опорного напряжения 1.25V, поддерживающий температурный уход 5ppm/°C, что обеспечивать диапазон изменения выходного напряжения 2.5V; модель AD56x7RBRMZ снабжена опорным напряжением 2.5 V, точность 5ppm/°C, и дает диапазон изменения на выходе 5V. При включении питания встроенный источник опорного напряжения выключен, что позволяет использовать внешний источник опорного напряжения. Внутренний источник опорного напряжения разрешается программной записью. Модели AD5667 и AD5627 требуют внешний источник опорного напряжения для установки выходного диапазона DAC.

В AD56x7R/AD56x7 встроена схема сброса при подаче питания (power-on reset circuit), что гарантирует появление 0V на выходе DAC при включении питания, и это состояние сохраняется, пока не будет выполнена правильная операция записи. Функция выключения каналов позволяет снижать потребление энергии до 480 nA от 5V, и предоставляет программно выбираемую выходную нагрузку в режиме выключения (power-down mode). Низкое энергопотребление делает микросхему идеально подходящей для устройств с питанием от батареи. Встроенный точный выходной усилитель обеспечивает изменение выходного напряжения во всем рабочем диапазоне (rail-to-rail output swing).

Таблица 1. Варианты моделей DAC от Analog Devices.

Модель DAC Описание
AD5663 Напряжение питания 2.7V .. 5.5V, два 16-битных DAC, внешнее опорное напряжение, интерфейс SPI
AD5623R/AD5643R/AD5663R Напряжение питания 2.7V .. 5.5V, два DAC на 12/14/16 бит, внутреннее опорное напряжение, интерфейс SPI
AD5625R/AD5645R/AD5665R, AD5625/AD5665 Напряжение питания 2.7V .. 5.5V, четыре DAC на 12/14/16 бит, внутреннее либо внешнее опорное напряжение, интерфейс I2C
AD5627R/AD5647R/AD5667R, AD5627/AD5667 Напряжение питания 2.7V .. 5.5V, два DAC на 12/14/16 бит, внутреннее либо внешнее опорное напряжение, интерфейс I2C

Примечание: электрические и другие параметры, параметрические графики см. в оригинале даташита [1], в этом переводе приведена только основная информация по применению и программированию микросхем DAC.

[Используемая терминология]

Relative Accuracy or Integral Nonlinearity (INL). Относительная точность или интегральная нелинейность - для DAC этот параметр оценивает максимальную девиацию выходного уровня в единицах младших разрядов LSB от прямой линии передаточной функции DAC (зависимости входные данные - выходное напряжение).

Differential Nonlinearity (DNL). Дифференциальная нелинейность - разница между измеренным изменением и идеальным изменением при смене входного кода на 1 LSB, когда изменение происходит между двумя соседними входными кодами. Указанная DNL, равная ±1 LSB максимум, гарантирует монотонность передаточной функции DAC. Дизайн этой серии DAC обеспечивает монотонность передаточной функции преобразование код - напряжение.

Zero-Code Error. Ошибка нуля - показывает отклонение выходного уровня от 0V, когда в регистр данных DAC записано 0x0000. В идеальной ситуации на выходе при этом должно быть 0V. Ошибка нуля AD5667R всегда положительная, потому что уровень на выходе не может опуститься ниже 0V из-за комбинации ошибок смещения DAC и схемы построения выходного усилителя. Ошибка нуля выражается в mV.

Full-Scale Range, FSR. Полный диапазон входных кодов и выходных напряжений, с которыми работает ЦАП.

Full-Scale Error. Ошибка полной шкалы - отклонение уровня от максимального ожидаемого выходного, когда во входной регистр DAC загружен код полной шкалы (0xFFFF). Для идеального случая на выходе должен быть при этом уровень VDD минус вес 1 LSB. Ошибка полной шкалы выражается в % от полного диапазона изменения выходного напряжения (full-scale range, FSR).

Gain Error. Ошибка усиления DAC. Параметр оценивает уровень отклонения передаточной характеристики DAC от идеальной, выраженный в % от FSR.

Zero-Code Error Drift. Оценивает изменение ошибки нуля в зависимости от изменения температуры. Выражается в mkV/°C.

Gain Temperature Coefficient. Температурный коэффициент изменения усиления в зависимости от изменения температуры. Выражается в ppm от FSR/°C.

Offset Error. Ошибка смещения оценивает разницу на выходе между VOUT реального от VOUT идеального DAC, выраженную в mV. Измерение разницы производится посередине линейного участка передаточной функции DAC. Ошибка смещения AD5667R оценивается при загрузке кода 512 в регистр DAC, она может быть положительной или отрицательной.

DC Power Supply Rejection Ratio (PSRR). Коэффициент подавления влияния изменения питания - параметр оценивает, как на выход DAC влияет уровень напряжения питания. PSRR это коэффициент изменения VOUT к изменению VDD для full-scale output DAC, измеряется в dB. VREF удерживается на уровне 2V и VDD изменяется в пределах ±10%.

Output Voltage Settling Time. Время установки выходного напряжения - количество времени, за которое происходит установка выходного уровня DAC между изменением от 1/4 до 3/4 FSR. Это время измеряется от фронта нарастания события STOP шины I2C.

Digital-to-Analog Glitch Impulse. Импульс помехи, инжектируемый на выход DAC, когда меняется значение входного кода в регистре DAC. Обычно указывается как область уровня помехи в nV, и измеряется, когда входной код меняется на 1 LSB при переходе от 0x7FFF к 0x8000 (см. рис. 42 из даташита [1]).

Digital Feedthrough. Наводка цифровой помехи - измеренный импульс на выходе, инжектируемый на аналоговый выход DAC, когда происходит изменение уровня на цифровых входах, однако это измерение производится, когда выход DAC не обновляется. Параметр указывается в nV, и измеряется при изменение входного кода по всей шкале, т. е. от всех нулей до всех единичек, и наоборот.

Reference Feedthrough. Наводка помехи на опорное напряжение - соотношение амплитуды сигнала на выходе DAC ко входу опорного напряжения, когда напряжение на выходе DAC не обновляется. Параметр выражается в dB.

Output Noise Spectral Density. Спектральная плотность шума на выходе - параметр оценивает уровень шума, генерируемого внутри микросхемы. Случайный шум характеризуется спектральной плотностью. Измеряется на выходе при загрузке в DAC среднего уровня, единицы nV / корень Гц. График спектральной плотности можно увидеть на рис. 48 даташита [1].

DC Crosstalk. Параметр оценивает перекрестные помехи между каналами DAC. Измеряется при изменении по полной шкале на выходе одного DAC (или при программном выключении и включении), когда на выходе другого канала удерживается средний уровень FSR. Выражается в mkV.

DC crosstalk из-за изменения тока нагрузки показывает влияние изменения тока нагрузки одного канала DAC, когда на выходе другого канала удерживается средний уровень FSR. Выражается в mkV/mA.

Digital Crosstalk. Оценивает импульс помехи, который передается на выход одного из каналов DAC, когда на его выходе средний уровень, от другого канала DAC, когда его входной код меняется от всех нулей до всех единиц и наоборот. Измерятся в режиме standalone и выражается в nV.

Analog Crosstalk. Аналоговый импульс помехи, передаваемый на выход одного DAC при изменении уровня на другом DAC. Измеряется загрузкой одного из входных регистров изменением кода по всей шкале (от всех нулей до всех единиц и обратно), затем выполнением программного ~LDAC и мониторингом выхода DAC, когда цифровой код не меняется. Диапазон помехи выражается в nV.

DAC-to-DAC Crosstalk. Аналоговый импульс помехи, передаваемый на выход одного DAC при изменении цифрового кода и последующего изменения уровня на другом DAC. Измеряется при изменении наводящего помеху канала по полной шкале (от всех нулей до всех единиц и обратно) при уровне лог. 0 на ~LDAC путем мониторинга выхода на другом канале, на выходе которого уровень половины шкалы. Энергия помехи выражается в nV.

Multiplying Bandwidth. Оценка конечной полосы пропускания внутренних усилителей DAC. Синусоидальный сигнал на опорном напряжении (с кодом FSR, загруженном в DAC) появится на выходе. Multiplying Bandwidth это частота, с которой амплитуда выхода падает на 3dB ниже амплитуды входа.

Total Harmonic Distortion (THD). Общий коэффициент гармонических искажений - оценивает разницу между идеальной синусоидой и её версией, полученной с помощью DAC. Синусоидальный сигнал используется как опорное напряжение для DAC, и THD измеряет гармоники, присутствующие на выходе DAC. Измеряется в dB.

Таблица 4. Параметры указаны для VDD = 2.7V .. 5.5V, температура между TMIN и TMAX, fSCL = 3.4 МГц, если не указано нечто другое1.

Парам. Условия2 MIN MAX Ед. Описание
fSCL3 Standard mode   100 кГц Частота тактов I2C
Fast mode   400
High speed mode, CB = 100 пФ   3.4 МГц
High speed mode, CB = 400 пФ   1.7
t1
Standard mode 4   мкс tHIGH, время нахождения SCL в лог. 1
Fast mode 0.6  
High speed mode, CB = 100 пФ 60   нс
High speed mode, CB = 400 пФ 120  
t2
Standard mode 4.7   мкс tLOW, время нахождения SCL в лог. 0
Fast mode 1.3  
High speed mode, CB = 100 пФ 160   нс
High speed mode, CB = 400 пФ 320  
t3
Standard mode 250   нс tSU;DAT, data setup time (время установки данных)
Fast mode 100  
High speed mode 10  
t4
Standard mode 0 3.45 мкс tHD;DAT, data hold time (время удержания данных)
Fast mode 0 0.9
High speed mode, CB = 100 пФ 0 70 нс
High speed mode, CB = 400 пФ 0 150
t5
Standard mode 4.7   мкс tSU;STA, setup time (время установки) для repeated START
Fast mode 0.6  
High speed mode 160   нс
t6
Standard mode 4   мкс tHD;STA, hold time, время удержания для (repeated) START
Fast mode 0.6  
High speed mode 160   нс
t7
Standard mode 4.7   мкс tBUF, время свободного состояния шины между STOP и START
Fast mode 1.3  
t8
Standard mode 4   мкс tSU;STO, setup time (время установки) для STOP
Fast mode 0.6  
High speed mode 160   нс
t9
Standard mode   1000 нс tRDA, rise time SDA, время нарастания сигнала данных
Fast mode   300
High speed mode, CB = 100 пФ 10 80
High speed mode, CB = 400 пФ 20 160
t10
Standard mode   300 нс tFDA, fall time SDA, время спада сигнала данных
Fast mode   300
High speed mode, CB = 100 пФ 10 80
High speed mode, CB = 400 пФ 20 160
t11
Standard mode   1000 нс tRCL, rise time SCL, время нарастания сигнала тактов
Fast mode   300
High speed mode, CB = 100 пФ 10 40
High speed mode, CB = 400 пФ 20 80
t11A
Standard mode   1000 нс tRCL1, rise time SCL, время нарастания сигнала тактов после repeated START и после бита ACK/NACK
Fast mode   300
High speed mode, CB = 100 пФ 10 80
High speed mode, CB = 400 пФ 20 160
t12
Standard mode   300 нс tFCL, fall time SCL, время спада сигнала тактов
Fast mode   300
High speed mode, CB = 100 пФ 10 40
High speed mode, CB = 400 пФ 20 80
t13
Standard mode 10   нс Время лог. 0 для импульса ~LDAC
Fast mode 10  
High speed mode 10  
t14
Standard mode 300   нс Время спада 9-го импульса SCL последнего байта правильной записи
Fast mode 300  
High speed mode 30  
t15
Standard mode 20   нс Время лог. 0 для импульса ~CLR
Fast mode 20  
High speed mode 20  
tSP4 Fast mode 0 50 нс Ширина подавленных импульсов помех
High speed mode 0 10

Примечания:

1. См. рис. 3. Параметры режима high speed применимы только для микросхем AD5627RBRMZ-2/AD5627BRMZ-2REEL7 и AD5667RBRMZ-2/AD5667BRMZ-2REEL7.
2. CB обозначает емкость сигнала шины (capacitance bus).
3. Интервалы времени SDA и SCL измерены с разрешением входных фильтров. Выключение входных фильтров увеличивает скорости передачи, однако негативно влияет на EMC-поведение микросхемы.
4. Входная фильтрация SCL и SDA подавляет выбросы помех длительностью меньше 50 нс для fast mode или 10 нс для high speed mode.

AD56x7 I2C timing diagram fig03

Рис. 3. Диаграмма времени сигналов 2-проводной шины I2C.

AD5627 AD5667 pinout fig04

Рис. 4. Цоколевка AD5627/AD5667, вид сверху.

AD5627R AD5647R AD5667R pinout fig05

Рис. 5. Цоколевка AD5627R/AD5647R/AD5667R, вид сверху.

Примечание: нижняя металлическая площадка корпуса LFCSP накоротко соединяется с GND.

Таблица 6. Функциональное описание выводов.

Мнем. Описание
1 VOUTA Аналоговое выходное напряжение канала A. Выход усилителя работает по уровням как rail-to-rail.
2 VOUTB Аналоговое выходное напряжение канала B. Выход усилителя работает по уровням как rail-to-rail.
3 GND Земля для всех сигналов, минус питания.
4 ~LDAC Подача импульса лог. 0 на этот вывод позволяет любому регистру DAC или всем регистрам DAC обновиться, если на вход поступили новые данные. Это позволяет одновременно обновить все выходы DAC. Альтернативно этот вывод может быть постоянно в лог. 0.
5 ~CLR Асинхронный вход очистки. Вход ~CLR срабатывает по спаду уровня. Когда ~CLR находится в лог. 0, все импульсы ~LDAC игнорируются. Когда ~CLR активирован, во все входные регистры и регистры DAC загружаются нули, что приводит к появлению на выходе 0V. Микросхема выйдет из режима очистки по спаду 9-го тактового импульса последнего байта правильной операции записи. Если ~CLR был активирован во время последовательности записи, то эта запись обрывается. Если ~CLR был активирован в режиме high speed, то микросхема выйдет из режима high speed.
6 ADDR Вход, чувствительный к трем состояниям. Его состояние устанавливает два младших бита (A1, A0) 7-битного slave-адреса.
7 SCL Serial Clock Line, тактовый сигнал I2C. Используется вместе с SDA для тактирования данных в 24-битный входной регистр и из него.
8 SDA Serial Data Line, сигнал данных I2C. Используется вместе с SCL для передачи данных в 24-битный входной регистр и из него. Это двунаправленный сигнал с открытым стоком, который должен быть подтянут верхним подтягивающим резистором (pull-up) к VDD.
9 VDD Вход напряжения питания. Эти микросхемы могут работать от напряжения питания в диапазоне от 2.7V до 5.5V, и питание должно быть отфильтровано на GND двумя параллельно соединенными конденсаторами 10 мкФ и 0.1 мкФ.
10 VREFIN/VREFOUT AD56x7R имеют общий вывод для входа и выхода опорного напряжения. Когда используется внутренний источник опорного напряжения, то это выход. Когда используется внешний источник опорного напряжения, то это вход. По умолчанию этот вывод работает как вход для опорного напряжения. Вход и выход может быть только в микросхемах с суффиксом R. Микросхемы AD56x7 используют этот вывод только как вход.

[Принцип работы]

Схема цифро-аналогового преобразования. AD56x7R/AD56x7 DAC производятся по техпроцессу CMOS. Схема построена на основе линейки резисторов и ключей, за которым идет буферный усилитель.

AD56x7 DAC architecture fig52

Рис. 52. Блок-схема архитектуры DAC.

AD56x7 resistor string fig53

Рис. 53. Цепочка резисторов DAC, выполняющая цифро-аналоговое преобразование.

Выходное напряжение идеального DAC при использовании внешнего опорного напряжения вычисляется по формуле (VOUT выходное напряжение, VREFIN опорное напряжение, D это входной цифровой код, N это разрядность DAC):

VOUT = VREFIN x (D / 2N)

Выходное напряжение идеального DAC при использовании внутреннего опорного напряжения вычисляется по формуле (VOUT выходное напряжение, VREFOUT опорное напряжение, D это входной цифровой код, N это разрядность DAC):

VOUT = 2 x VREFOUT x (D / 2N)

Значение кода D может быть в диапазоне от 0 до 4095 для AD5627R/AD5627 (12-bit DAC), в диапазоне от 0 до 16383 для AD5647R (14-bit DAC) и в диапазоне 0 .. 65535 для AD5667R/AD5667 (16-bit DAC).

Выходной усилитель. Выходной буферный усилитель может генерировать выходной уровень во всем диапазоне напряжений (rail-to-rail voltages), от 0V до VDD. Он может выдавать сигнал на параллельно соединенную цепочку из 2 кОм резистора и 1000 pF конденсатора (один конец цепочки подключен к выходу усилителя, второй к GND). Возможности по втекающему и вытекающему току выходного усилителя показаны на рисунках 33 и 34 (см. даташит [1]). Скорость изменения выходного напряжения составляет 1.8V/мкс с временем установки 7 мкс при изменении уровня на выходе от 1/4 до 3/4 FSR.

Внутреннее опорное напряжение. AD5627R/AD5647R/AD5667R снабжены встроенным источником опорного напряжения. Версии без суффикса R требуют внешнего опорного напряжения. Встроенное опорное напряжение выключено при подаче питания, и включается специальной командой записи в регистр управления (подробности см. далее в секции "Настройка внутреннего опорного напряжения").

Версии в 10-выводных корпусах LFCSP имеют опорное напряжение 1.25V, что дает выход FSR 2.5V. Эти микросхемы могут работать при напряжении питания в диапазоне от 2.7V до 5.5V. Версии в 10-выводном корпусе MSOP имеют опорное напряжение 2.5V, что дает выход FSR 5V. Эти микросхемы функциональны в диапазоне напряжений питания от 2.7V до 5.5V, однако когда напряжение питания VDD становится меньше 5V, уровень на выходе обрезается до уровня VDD. Полный список моделей микросхем см. разделе "Ordering Guide" даташита [1]. Уровень внутреннего опорного напряжения выводится на ножку VREFOUT микросхемы. Если на этот сигнал должна быть подключена внешняя нагрузка, то для неё требуется буферный усилитель. При использовании внутреннего опорного напряжения рекомендуется использовать блокирующий конденсатор 100 nF между выводом VREFOUT и GND.

Внешнее опорное напряжение. AD5627/AD5667 требуют внешнего опорного напряжения, поданного на вывод VREFIN. Вывод VREFIN микросхем AD56x7R позволяет использовать внешнее опорное напряжение, если того требует приложение. По умолчанию при включении питания встроенный источник опорного напряжения выключен. Все устройства могут работать от одного источника в диапазоне от 2.7V до 5.5V.

[Последовательный интерфейс]

AD56x7R/AD56x7 работает как подчиненное (slave) I2C-устройство. Поддерживаются скорости передачи данных standard (100 кГц), fast (400 кГц) и high speed (3.4 МГц). Режим high speed доступен только для определенных моделей (см. "Ordering Guide" даташита [1]). Не предоставляется поддержка для 10-битной адресации и адресации general call (отдельные функции протокола I2C/TWI).

Каждая AD56x7R/AD56x7 имеет 7-битный slave-адрес. 5 старших бит 00011, и два младших (A1, A0) определяются состоянием подключения вывода ADDR, что дает возможность подключить параллельно на одну шину I2C до трех микросхем. Значение бит адреса A1 и A0 в зависимости от состояния подключения вывода ADDR показано в таблице 7.

Таблица 7. Выбор адреса для A1 и A0.

Подключение вывода ADDR A1 A0
VDD 0 0
Никуда не подключен 1 0
GND 1 1

2-проводный последовательный протокол шины I2C/TWI работает следующим образом:

1. Master инициирует передачу данных событием START, когда SDA переходит 1 -> 0 при уровне 1 на SCL. Затем идет байт адреса, в котором находится 7-битный slave-адрес устройства. Slave-устройство, соответствующее переданному адресу, отвечает подтяжкой SDA к лог. 0 во время 9-го тактового импульса (это так называемый бит подтверждения, acknowledge bit, сокращенно ACK). На этой стадии все другие устройства, подключенные к шине (если они есть), остаются в состоянии не активности по шине, в то время как адресованное slave-устройство ждет поступления данных для записи в него или для чтения из него.

2. Данные передаются по шине друг за другом, при прохождении 9 тактовых импульсов (8 бит данных, за которым идет бит ACK). Изменения уровня на SDA должны происходить, когда на SCL присутствует уровень лог. 0, и на SDA должен оставаться стабильный уровень, когда на SCL присутствует лог. 1.

3. Когда все биты данных были записаны или прочитаны, передается сигнал STOP. Для этой цели в режиме записи master подтягивает SDA к лог. 1 во время 10-то тактового импульса. В режиме чтения master выдает no acknowledge (NACK) во время 9-го тактового импульса (т. е. SDA остается в лог. 1). Затем master переводит SDA в лог. 0 во время 10-го тактового импульса, чтобы выдать сигнал STOP.

Операция записи (WRITE). При записи в AD56x7R/AD56x7 master должен выдать START, за которым идет байт адреса с битом R/W равным 0, после чего DAC подтверждает, что готов принимать данные, путем подтяжки SDA к лог. 0. AD56x7R/AD56x7 требует двух байт данных для DAC и байта команды, который управляет различными функциями DAC. Таким образом, в DAC должны быть записаны 3 байта: байт команды, за которым идет старший байт, и затем идет младший байт, как показано на рис. 54. Все эти байты подтверждаются AD56x7R/AD56x7. Затем идет сигнал STOP.

AD56x7 I2C Write fig54

Рис. 54. Операция записи I2C.

Операция чтения (READ). Когда данные вычитываются обратно из AD56x7R/AD56x7, пользователь выдает START, за которым идет байт адреса с битом R/W = 1, после чего DAC подтверждает, что готов передавать данные путем подтяжки SDA к лог. 0. Затем из DAC вычитываются 3 байта, которые подтверждаются master, как показано на рис. 55. Затем идет сигнал STOP.

AD56x7 I2C Read fig55

Рис. 55. Операция чтения I2C.

HIGH SPEED MODE. AD5627RBRMZ b AD5667RBRMZ предоставляют режим последовательного обмена с тактовой частотой 3.4 МГц (см. раздел "Ordering Guide" даташита [1]).

Режим обмена high speed начинается после того, как master адресует все подключенные к шине устройства кодом 00001XXX, чтобы показать начало высокоскоростной передачи (см. рис. 56). Этот код не разрешается подтверждать ни одному устройству, подключенному к шине, поэтому в ответ на этот код придет NACK. Затем master должен выдать повторный START (repeated START), за которым идет адрес устройства. Выбранное устройство подтвердит этот адрес.

AD56x7 placing in High Speed Mode fig56

Рис. 56. Перевод AD5627RBRMZ-2/AD5667RBRMZ-2 в High Speed Mode.

Все устройства продолжат работать в режиме high speed до тех пор, пока master не выдаст сигнал STOP. Кода будет выдан сигнал STOP, все устройства вернутся в режим standard/fast. Микросхема также вернется в режим standard/fast, когда активируется сигнал ~CLR, когда микросхема находится в режиме high speed.

Входной регистр сдвига. Этот регистр имеет ширину 24 бита. Данные загружаются в устройство как 24-битное слово под управлением сигнала тактов SCL. Физическая диаграмма времени этой операции и её параметры показаны во врезке "Параметры I2C" выше (таблица 4 и рис. 3). Старшие 8 бит этого регистра это байт команды. Бит DB23 зарезервирован, и всегда должен быть установлен в 0, когда происходит запись в устройство. Бит DB22 (S) используется для выбора многобайтного режима работы (Multiple Block Write). Следующие 3 бита это биты команды C2C1C0, которые управляют режимом работы устройства (см. таблицу 8). Последние 3 бита первого байта это биты адреса A2A1A0 выбора канала A и/или B (см. таблицу 9). Оставшиеся данные это словао данных (2 байта), в которых значимыми (полезными) будут 16, 14 или 12 бит (в зависимости от модели DAC). Полезные биты всегда идут первыми, начиная с самого значащего бита, и последние 2 или 4 бита из 16 бит могут быть ничего не значащими в случае 14-битного или 12-битного DAC соответственно (т. е. соответственно для AD5647R и для AD5627R/AD5627, см. рисунки 59 .. 61, ничего не значащие младшие биты данных показаны крестиками X).

Таблица 8. Определение команд.

C2 C1 C0 Команда
0 0 0 Запись во входной регистр n.
0 0 1 Обновление регистра DAC n.
0 1 0 Запись во входной регистр n, обновить все (программный ~LDAC).
0 1 1 Запись и обновление DAC канала n.
1 0 0 Включение/выключение.
1 0 1 Сброс.
1 1 0 Настройка регистра ~LDAC.
1 1 1 Настройка внутреннего опорного напряжения (включение/выключение).

Таблица 9. Команда адреса DAC.

A2 A1 A0 Адрес (n)
0 0 0 DAC A
0 0 1 DAC B
1 1 1 Адресованы оба DAC-а

Multiple Block Write. Этот режим поддерживается AD56x7R/AD56x7, он полезен для приложений, требующих быстрого обновления DAC, когда не надо менять байт команды. В этом случае каждая выборка данных передается только двумя байтами, без выдачи сигнала STOP после каждой переданной пары байт. Бит S (DB22) в байте команды для многобайтного режима должен быть установлен в 1 (см. рис. 57). Для стандартных режимов 3-байтного и 4-байтного бит S (DB22) в байте команды должен быть установлен в 0 (см. рис. 58).

AD56x7 Multiple Block Write with Initial Command Byte Only(S1) fig57

Рис. 57. Multiple Block Write только с начальным байтом команды (S = 1).

AD56x7 Multiple Block Write with Command Byte in each block(S0) fig58

Рис. 58. Multiple Block Write c байтом команды в каждом блоке (S = 0).

AD5667R AD5667 Input Shift Register(16 bit DAC) fig59

Рис. 59. Входной регистр сдвига микросхем AD5667R/AD5667 (16-битный DAC).

AD5647R Input Shift Register(14 bit DAC) fig60

Рис. 60. Входной регистр сдвига микросхем AD5647R (14-битный DAC).

AD5627R AD5627 Input Shift Register(12 bit DAC) fig61

Рис. 61. Входной регистр сдвига микросхем AD5627R/AD5627 (12-битный DAC).

Синхронный ~LDAC. Регистры DAC обновляются после того, как были введены новые данные. В этом случае ~LDAC может находиться постоянно в лог. 0 или на него могут приходить импульсы.

Асинхронный ~LDAC. Выходы не обновляются одновременно с записью входных регистров. Когда ~LDAC переходит в лог. 0, регистры DAC обновляются содержимым входного регистра.

Регистр ~LDAC дает пользователю полную гибкость и управление через аппаратный вывод ~LDAC. Этот регистр позволяет выбрать, какая комбинация каналов одновременно обновляется, когда управляется аппаратный вывод ~LDAC. Установка в 0 бита ~LDAC регистра означает, что обновление этого канала управляется выводом ~LDAC. Если этот бит установлен в 1, то этот канал обновляется синхронно, т. е. регистр DAC обновляется после того, как будут введены новые данные, независимо от состояния вывода ~LDAC. Это выглядит так, как если бы вывод ~LDAC был бы подтянут к лог. 0. См. таблицу 10 для режима работы регистра ~LDAC. Эта гибкость полезна в приложениях, когда пользователь хочет одновременно обновить каналы, в то время как остальная часть каналов синхронно обновляется.

Таблица 10. Режим работы регистра ~LDAC: загрузка регистра ~LDAC.

Биты ~LDAC (DB1, DB0) Вывод ~LDAC Работа ~LDAC
0 1/0 Определяется выводом ~LDAC
1 x - уровень не имеет значения Регистры DAC обновляются сразу после поступления новых данных

Запись в DAC команды 110 загрузит 2-битный регистр LDAC [DB1:DB0]. По умолчанию для каждого канала тут 0, т. е. вывод ~LDAC работает в нормальном режиме. Установка этих бит в 1 означает, что регистр DAC обновляется независимо от состояния вывода ~LDAC. См. рис. 63 для содержимого входного регистра сдвига во время команды настройки регистра ~LDAC.

AD56x7 LDAC Setup Command fig63

Рис. 63. ~LDAC Setup Command.

Команда 100 зарезервирована для функции power-up/down (включение/выключение). Режимы power-up/down программируются установкой бит DB5 и DB4. Это определяет выходное состояние усилителя DAC, как показано в таблице 11.

Таблица 11. Режимы работы AD56x7R/AD56x7.

DB5 DB4 Режим работы
0 0 Нормальная работа
Режимы power-down:
0 1 Между GND и выходом подключается резистор 1 кОм
1 0 Между GND и выходом подключается резистор 100 кОм
1 1 Выход в третьем состоянии, отключен (высокое сопротивление)

Биты DB1 и DB0 определяют, какому DAC или каким DAC применяется команда power-up/down. Установка одного из этих бит в 1 применяет состояние power-up/down, определенное битами DB5 и DB4 для соответствующего DAC. Если этот бит установлен в 0, то состояние DAC не изменится. Рис. 65 показывает содержимое входного регистра сдвига для команды power up/down.

AD56x7 Power Up Down Command fig65

Рис. 65. Power Up/Down Command.

Когда бит DB5 и бит DB4 установлены в 0, микросхема работает в нормальном режиме, потребляя ток 0.4 mA от 5V. Однако для трех режимов power-down ток потребления падает до 480 nA при 5V. Падает не только ток потребления, но еще выходной каскад внутри микросхемы переключает выход усилителя на резисторную цепь с известным сопротивлением. Это дает возможность знать выходное сопротивление микросхемы, когда её канал находится в режиме power-down. Выходы могут быть либо подключены внутри микросхемы к GND через резистор 1 кОм или 100 кОм, или же могут остаться не подключенными (третье состояние), как показано на рис. 62.

AD56x7 output stage during Power Down fig62

Рис. 62. Состояние выходного каскада во время выключения (power-down).

Когда активируется режим power-down, выключаются генератор смещения (bias generator), выходной усилитель, цепочка резисторов DAC и другие линейные схемы, которые в рабочем режиме потребляли ток. Однако выключение не влияет на содержимое регистра DAC. Время выходя из power-down обычно составляет 4 мкс для VDD = 5V.

Power-on reset и software reset. AD56x7R/AD56x7 содержит схему сброса при включении питания (power-on reset), которая управляет выходным напряжением в момент подачи на микросхему питания. Это обеспечивает появление на выходе 0V при включении питания, и выход остается в таком состоянии до тех пор, пока не произойдет правильная последовательность записи данных в DAC. Это полезно в приложениях, где важно знать состояние выхода DAC, когда происходит включение питания. Любые события на сигналах ~LDAC или ~CLR игнорируются во время power-on reset.

Также есть функция программного сброса (software reset), выполняемая командой 101. Эта команда программного сброса имеет 2 режима сброса, программируемых установкой бита DB0 во входном регистре сдвига.

Таблица 12 показывает состояния бита и работу соответствующих режимов сброса устройства. Рис. 64 показывает содержимое входного регистра сдвига во время режима программного сброса.

Таблица 12. Режимы программного сброса AD56x7R/AD56x7.

DB0 Регистры, сбрасываемые в 0
0 Регистр DAC.
Входной регистр сдвига.
1 (Power-On Reset) Регистр DAC.
Входной регистр сдвига.
Регистр ~LDAC.
Регистр Power-Down.
Регистр настройки опорного напряжения.

AD56x7 Software Reset Command fig64

Рис. 64. Software Reset Command.

Вход очистки ~CLR. У AD56x7R/AD56x7 есть асинхронный вход сброса ~CLR. Для этого входа моментом активации является спад уровня (переход 1 -> 0). Когда ~CLR находится в лог. 0, все импульсы на ~LDAC игнорируются. Когда ~CLR активирован, во все входные регистры и регистры DAC загружаются нули, это переводит выход в уровень 0V. Микросхема выходит из режима очистки по спаду уровня 9-го тактового импульса последнего байта правильной записи. Если ~CLR был активирован во время последовательности записи, то запись будет оборвана. Если ~CLR был активирован во время режима high speed, то микросхема выйдет из режима high speed, перейдя в нормальный режим скорости (standard/fast speed mode).

Настройка внутреннего опорного напряжения. Эта настройка применима только к версиям R микросхем. По умолчанию при включении питания встроенный источник опорного напряжения выключен. Он может быть включен командой настройки опорного напряжения 111 (reference setup command) и установкой бита DB0 во входном регистре сдвига. Таблица 13 показывает состояния бита и соответствующие режимы работы. Рис. 66 показывает содержимое регистра сдвига во время выполнения команды настройки внутреннего опорного напряжения.

Таблица 13. Reference Setup Command.

DB0 Действие
0 Внутренний источник опорного напряжения выключен (по умолчанию).
1 Внутренний источник опорного напряжения включен.

AD56x7 Reference Setup Command fig66

Рис. 66. Reference Setup Command.

[Информация по применению]

Использование в качестве питания источника опорного напряжения. Из-за того, что ток потребления AD56x7R/AD56x7 чрезвычайно мал, то как вариант для его питания можно использовать микросхему источника эталонного опорного напряжения (см. рис. 67).

AD56x7 REF195 as Power Supply fig67

Рис. 67. Применение REF195 в качестве источника питания для AD56x7R/AD56x7.

Это особенно полезно, если основной источник питания довольно зашумленный, или если системные напряжения питания имеют значения, отличающиеся от 5V или 3V, например 15V. Напряжение микросхемы опорного напряжения даст стабильное питание для AD56x7R/AD56x7. Если используется low dropout REF195, то она должна предоставить для AD56x7R/AD56x7 ток порядка 0.45 mA, когда на выходе DAC нет нагрузки. Когда на выходе DAC есть нагрузка, то от REF195 будет потребляться больше тока. Общий требуемый ток потребления с нагрузкой 5 кОм на выходе DAC вычисляется по формуле:

450 мкА + (5 V/5 кОм) = 1.45 мА

Характеристика регулирования REF195 обычно соответствует 2 ppm/mA, что дает ошибку 2.9 ppm (14.5 mkV) для тока потребления 1.45 мА. Это соответствует ошибке 0.191 LSB.

Биполярное включение. AD56x7R/AD56x7 была разработана для работы в однополярном включении, однако можно также реализовать биполярный режим работы выхода по схеме на рис. 68. Эта схема дает выходное напряжение в диапазоне ±5 V. Работа rail-to-rail на выходе достигается использованием операционного усилителя AD820 или OP295 в качестве выходного усилителя.

AD56x7 Bipolar Operation fig68

Рис. 68. Работа AD56x7R/AD56x7 для генерации биполярного выходного напряжения.

Выходное напряжение для любого входного кода можно вычислить по формуле:

VO = [VDD x (D / 65536) x ((R1+R2)/R1) - VDD x (R2/R1)]

Здесь D это входной код (в десятичной форме 0 .. 65535, в HEX-форме 0x0000 .. 0xFFFF). При VDD = 5V, R1 = R2 = 10 кОм выходное напряжение составит:

VO = ( 10 x D / 65536 ) - 5V

Это дает диапазон изменения напряжения на выходе ±5 V, когда D = 0x0000 соответствует -5V на выходе, и D = 0xFFFF соответствует +5V на выходе.

Фильтрация питания и заземление. Когда необходимо достичь высокой точности DAC, на печатной плате следует тщательно реализовать разводку питания и земли. Печатная плата, где применяется AD56x7R/AD56x7, должна иметь раздельные секции цифровых и аналоговых цепей, каждая из которых занимают отдельные область на плате. Если AD56x7R/AD56x7 находится в системе, где другие устройства также требуют соединения цепей AGND и DGND, то это соединение должно быть реализовано только в одной точке. Эта точка заземления должна находиться как можно ближе к AD56x7R/AD56x7.

Напряжение питания AD56x7R/AD56x7 должно быть отфильтровано блокировочными конденсатором 10 мкф, параллельно которому стоит конденсатор 0.1 мкф. Эти конденсаторы должны находиться максимально близко к микросхеме, идеальный вариант - когда конденсатор 0.1 мкф стоит в непосредственной близости с устройством. Конденсатор 10 мкф должен быть танталовым. Важно, чтобы конденсатор 0.1 мкф имел низкое эффективное последовательное сопротивление (effective series resistance, ESR) и эффективную последовательную индуктивность (effective series inductance, ESI), например это должен быть качественный керамический конденсатор SMD. Такой конденсатор предоставит низкое сопротивление для замыкания на землю токов пульсаций, генерируемых переключениями внутренней логики.

Шина питания должна иметь максимально возможную ширину, чтобы обеспечить низкое сопротивление цепи питания и снизить импульсы провалов по питанию. Такты и другие быстро переключающиеся цифровые сигналы должны быть экранированы цифровой землей DGND от других частей печатной платы. По возможности избегайте пересечения и параллельного пролегания цифровых и аналоговых сигналов на плате. Когда проводники проходят по противоположным сторонам печатной платы, постарайтесь обеспечить их ориентировку под прямым углом друг к другу, это снизит перекрестные наводки между сигналами. Лучшая техника разводки - microstrip, когда для каждой стороны выделен отдельный внутренний слой земли, и сигнальные проводники проходят по верхней стороне платы. Однако это не всегда возможно для двухслойных плат. Применяйте заливку медью земли для всех свободных от цепей участков печатной платы.

[Пример программирования AD5667]

Ниже описывается библиотека Blackfin и пример её применения - тестовая программа, которая формирует синусоидальный сигнал на выходе ЦАП. Код запускался на макетной плате Simple Blackfin ADSP-BF538 Board [3]. ЦАП подключался к коннектору J11 I2C1. В примере есть только одно прерывание - от таймера, управление аппаратурой I2C/TWI происходит без использования прерываний.

Для упрощения понимания работы кода текст заголовочных файлов опущен. Полный исходный код (проект VisualDSP) можно скачать по ссылке [4].

Модуль twi.c:

/****************************************************
   Подпрограммы для работы с TWI на низком уровне.
*****************************************************/
#include "init_platform.h"#include "TWI.h"
 
static void twi_clear_all_stat (void)
{
   /* Очищает все биты состояния */
   //*pTWI_MASTER_STAT = ( BUFWRERR | BUFRDERR | DNAK | ANAK | LOSTARB);
   *pTWI_MASTER_STAT = *pTWI_MASTER_STAT;
   ssync();
   /* Очищает все флаги прерываний, ожидающих обработки */
   //*pTWI_INT_STAT = ( SINIT | SCOMP | SERR | SOVF | MCOMP | MERR | XMTSERV | RCVSERV );
   *pTWI_INT_STAT = *pTWI_INT_STAT;
   ssync();
   /* Сброс буферов передачи и приема */
   *pTWI_FIFO_CTRL = ( XMTFLUSH | RCVFLUSH );
   ssync();
}
 
// Процедура сбрасывает интерфейс TWI.
void twi_reset(void)
{
   /* Сброс контроллера TWI */
   *pTWI_CONTROL = TWI_RESET_VAL;
   ssync();
   twi_clear_all_stat();
}

Модуль AD5667.c:

#include "AD5667.h"
#include "TWI.h"
#include "timer.h"
 
// Подпрограммы для управления ЦАП AD5667. Реализованы только
// функции записи. Каждая функция (кроме DAC_multiple_start
// и DAC_multiple_stop) осуществляет одиночную запись
// по следующему алгоритму:
//    Отправка сигнала START
//    Передача 7-битного адреса и бита W
//    Передача байта команды
//    Передача 2 байт данных
//    Отправка сигнала STOP.
 
volatile u8 twistate = TWI_IDLE;
u8 channelDAC = DAC_A;
 
static inline void START (u8 stop_or_not)
{
   // Очистка бит вручную:
   *pTWI_FIFO_CTRL = 0;
   // Настройка скорости:
   *pTWI_CONTROL = ( TWI_ENA | PRESCALE_VALUE );
   // CLKDIV = (1/SCL)/(1/10MHz):
   *pTWI_CLKDIV = ( ((CLKDIV_HI) << 8) | (CLKDIV_LO) );
   // Целевой адрес устройства (7-битный адрес без бита R/~W):
   *pTWI_MASTER_ADDR = AD5667_I2C_ADDR;
   // Если stop_or_not == 0xFF, то генерации STOP по завершению
   // передачи не будет:
   *pTWI_MASTER_CTRL = (stop_or_not << 6) | MEN;
   ssync();
}
 
void DAC_init (void)
{
   // Сброс железа I2C:
   //twi_reset();
}
 
// Записывает слово в регистр данных (0 .. 65535), чтобы
// на выходе ЦАП появилось соответствующее напряжение.
void DAC_write_value (u16 data)
{
   if (TWI_IDLE == twistate)
   {
      twi_reset();
      // После передачи адреса и 3 байт будет сгенерирован STOP:
      START(GENERATE_STOP);
      // Передача команды и номера канала:
      *pTWI_XMT_DATA8 = CMD_WRITE_AND_UPDATE_CHNL | channelDAC;
      ssync();
      // Передача данных выборки:
      while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); }
      *pTWI_XMT_DATA16 = (data << 8) | (data >> 8);
      ssync();
      // Ожидание окончания передачи:
      *pTWI_INT_STAT = *pTWI_INT_STAT;
      while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); }
   }
}
 
// Устанавливает либо внутреннее, либо внешнее
// опорное напряжение ЦАП. По умолчанию, после
// включения питания, используется внешний источник
// опорного напряжения.
void DAC_set_reference (u8 ref)
{
   if (TWI_IDLE == twistate)
   {
      twi_reset();
      START(GENERATE_STOP);
      // Передача команды установки источника опорного напряжения:
      *pTWI_XMT_DATA8 = CMD_REFERENCE;
      ssync();
      while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); }
      // Передача настройки внутренний/внешний источник опоры:
      *pTWI_XMT_DATA16 = ref << 8;
      ssync();
      // Ожидание окончания передачи:
      *pTWI_INT_STAT = *pTWI_INT_STAT;
      while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); }
   }
}

// Программный сброс AD5667
void DAC_softreset (void)
{
   // Остановка многословной передачи, если она активна:
   DAC_multiple_stop();
   twi_reset();
   START(GENERATE_STOP);
   // Передача команды сброса:
   *pTWI_XMT_DATA8 = CMD_RESET;
   ssync();
   while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); }
   // Передача данных, которые ничего не значат:
   *pTWI_XMT_DATA16 = 0;
   ssync();
   // Ожидание окончания передачи:
   *pTWI_INT_STAT = *pTWI_INT_STAT;
   while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); }
}
 
// Запуск "многобайтной" передачи (multuple block write).
void DAC_multiple_start (void)
{
   if (TWI_IDLE == twistate)
   {
      // Запись на выход ЦАП среднего значения:
      DAC_write_value(SHIFT);
      // Подача команды Multiple Block Write, после которой
      // каждая 16-битная выборка передается двумя байтами
      // бесконечно в цикле, без генерации STOP:
      START(WITHOUT_STOP);
      *pTWI_XMT_DATA8 = S_MULTIBYTE | CMD_WRITE_AND_UPDATE_CHNL | channelDAC;
      ssync();
      // Ожидание опустошения FIFO передачи:
      while (*pTWI_FIFO_STAT != XMT_EMPTY) { ssync(); }
      twistate = TWI_RUNNING;
      // Запуск прерываний таймера:
      Timer0init();
   }
}
 
// Остановка "многобайтной" передачи.
void DAC_multiple_stop (void)
{
   if (TWI_RUNNING == twistate)
   {
      // Переключение конечного автомата таймера
      // на остановку:
      twistate = TWI_STOP;
      // Ожидание остановки таймера:
      while (twistate != TWI_IDLE){}
   }
}
 
// Установка текущего канала ЦАП, A или B.
void DAC_set_channel (u8 channel)
{
   if (TWI_RUNNING == twistate)
   {
      // Если таймер находится в режиме многобайтной
      // передачи, то требуется его остановка.
      DAC_multiple_stop();
      channelDAC = channel;
      
      DAC_multiple_start();
   }
   else
      channelDAC = channel;
}

Модуль timer.c, используется для передачи выборок в ЦАП с частотой дискретизации 20 кГц для формирования аналогового сигнала:

#include < sys/exception.h >
#include "pins.h"
#include "timer.h"
#include "TWI.h"
#include "AD5667.h"
 
u8 ampl256 = MAX;
u16 voltage = 600;

// Остановка таймера:
static void Timer0stop (void)
{
   // Запрет работы таймера:
   *pTIMER_DISABLE = TIMEN0;
   // Передача завершающей выборки с генерацией STOP:
   *pTWI_MASTER_CTRL = (2 << 6) | MEN;
   u16 val16 = SHIFT;
   *pTWI_XMT_DATA16 = (val16 >> 8)|(val16 << 8);
   // Ожидание завершения передачи I2C:
   *pTWI_INT_STAT = *pTWI_INT_STAT;
   while (0==(*pTWI_INT_STAT & MCOMP)) { ssync(); }
   twistate = TWI_IDLE;
}
 
// Обработчик прерывания таймера 0, который срабатывает
// с частотой 20 кГц (зависит от SAMPLERATE). При каждом
// срабатывании прерывания таймера в ЦАП AD5667R передается
// одна 16-битная выборка данных. При частоте тактов I2C
// 400 кГц максимальная частота прерываний таймера
// ограничена 20 кГц.
EX_INTERRUPT_HANDLER(Timer0ISR)
{
   *pTIMER_STATUS = TIMIL0;
   // Счетчик фазы:
   static float phase = 0;
   // Указатель на таблицу синуса в SDRAM:
   s16 *ptr = 0;
   u16 val16phase;
   u16 val16;
 
   switch (twistate)
   {
   case TWI_IDLE:
      break;
   case TWI_RUNNING:
      LED(1);
      // Запись одной выборки:
      val16phase = (u16)phase;
      val16 = SHIFT + (ptr[val16phase] * (float)ampl256/600)*voltage;
      *pTWI_XMT_DATA16 = (val16 >> 8)|(val16 << 8);
      // Инкремент фазы для 375 Гц:
      phase += 512.0/((float)SAMPLERATE/375);
      if (phase > 512.0)
         phase = phase - 512.0;
      LED(0);
      break;
   case TWI_STOP:
      Timer0stop();
      break;
   }
}
 

// Настройка и запуск таймера.
void Timer0init (void)
{
   // Настройка таймера на частоту 20 кГц:
   *pTIMER0_PERIOD = T0PERIOD;
   *pTIMER0_WIDTH = T0WIDTH;
   *pTIMER0_CONFIG = PWM_OUT | PULSE_HI | PERIOD_CNT | IRQ_ENA;
   // Привязка периферии к IVG:
   *pSIC_IAR2 |= PX_IVG(TIMER0_PERIPH_INT_ID, ik_ivg7);
   // Регистрация обработчика прерывания:
   register_handler_ex(ik_ivg7, Timer0ISR, EX_INT_ENABLE);
   // Установка маски прерываний:
   *pSIC_IMASK0 |= TIMER0_IRQ;
   // Разрешение работы таймера:
   *pTIMER_ENABLE = TIMEN0;
}

Пример применения библиотеки (фрагмент модуля main.c):

void main (void)
{
   ...
   // Создание таблицы синуса в SDRAM:
   GenSinusTable();
   // Запуск ЦАП AD5667R:
   DAC_init();
TPT();
   DAC_set_reference(REF_EXTERNAL);
   DAC_multiple_start();
   // Главный цикл ничего не делает, только меняет амплитуду ampl256
   // от 0 до 255 и обратно. Эта амплитуда используется для регулирования
   // синуса, данные которого посылаются в ЦАП AD5667R в обработчике
   // прерываний EX_INTERRUPT_HANDLER(Timer0ISR).
   while(true)
   {
      delay_ms(10);
      ChangeAmplitude();
      UARTconsolePoll();
   }
}

Тест-программа управляется командами консоли UART:

AD5667 test control console

[Ссылки]

1. Dual, 12-/14-/16-Bit nanoDACs® with 5 ppm/°C On-Chip Reference, I2C® Interface site:analog.com.
2. ADSP-BF538: контроллеры интерфейса TWI (I2C).
3. Simple Blackfin ADSP-BF538 Board.
4191011TestAD5667.zip - библиотека AD5667 и исходный код примера (проект VisualDSP).

 

Добавить комментарий


Защитный код
Обновить

Top of Page