Цифровой переменный резистор MCP41XXX/42XXX с интерфейсом SPI Печать
Добавил(а) microsin   

Микросхемы MCP41XXX/MCP42XXX компании Microschip это электронный переменный резистор, управляемый последовательными данными через интерфейс SPI. У него может быть 1 или 2 канала и дополнительные входы для сброса, выключения, а также цифровой выход для каскадирования таких устройств в цепочку по данным управления (количество каналов и наличие дополнительных выводов зависит от типа корпуса устройства).

Примечание: здесь дан перевод даташита [1] с акцентом на программирование и применение. Таблицы с электрическими, предельно допустимыми параметрами и параметрами диаграмм времени см. в оригинальном даташите.

[Основные возможности цифрового потенциометра]

• У каждого канала потенциометра имеется 256 положений "движка".
• Значения сопротивления могут быть 10 kΩ, 50 kΩ и 100 kΩ.
• Есть одноканальные и двухканальные версии микросхемы.
• Последовательный интерфейс SPI (режимы 0,0 и 1,1).
• Интегральная нелинейность (INL) дифференциальная нелинейность (DNL) составляют ±1 вес младшего разряда (LSB).
• Применена технологий Low power CMOS, в статическом режиме ток потребления составляет максимум 1 μA.
• Несколько микросхем могут быть соединены в одну цепочку каскадирования по передаче данных.
• Одно напряжение питания (2.7 .. 5.5V).
• Индустриальное исполнение для диапазона температур: -40° .. +85°C.
• Расширенный температурный диапазон: -40° .. +125°C.
• Функция выключения открывают схемы для всех резисторов для максимальной экономии энергии питания.

Только для двухканальных версий MCP42XXX:

• Аппаратные выводы выключения ~SHDN, сброса ~RS и выхода данных SO.

Версии MCP41XXX являются одноканальными устройствами, поставляемыми в 8-выводных корпусах PDIP или SOIC. Версии MCP42XXX содержат 2 независимых канала в 14-выводных корпусах PDIP, SOIC или TSSOP. Позиция "движка" резисторов MCP41XXX/42XXX меняется по линейному закону и под управлением стандартного интерфейса SPI. Функция выключения (shutdown), активируемая программно, работает таким образом, что вывод A переменного резистора отключается, и одновременно "движок" W подсоединяется к выводу B. Дополнительно двухканальные версии электронного потенциометра MCP42XXX имеют вывод ~SHDN, который выполняет ту же функцию, но аппаратно. Во время режима shutdown содержимое регистра положения движка может быть изменено, и тогда потенциометр вернется из состояния shutdown в новое положение движка.

Движок сбрасывается в среднюю позицию 80h после включения питания. Вывод ~RS (reset, сброс, доступен только в двухканальных версиях MCP42XXX) реализует аппаратный сброс, возвращая движок резистора в среднее положение.

Интерфейс SPI микросхем версий MCP42XXX имеет 2 сигнала SI и SO (вход и выход), позволяя каскадировать последовательно несколько устройств.

Сопротивления каналов MCP42XXX отличаются не больше, чем на 1%.

MCP4XXXX Block Diagram

Цоколевка корпусов PDIP8, SOIC8:

MCP41XXX PDIP8 SOIC8

Цоколевка корпусов PDIP14, SOIC14, TSSOP14:

MCP42XXX PDIP14 SOIC14 TSSOP14

[Описание выводов]

Имя Описание
PB0,
PB1
Вывод B потенциометра. Клемма переменного резистора, которая обычно при использовании подключается к земле.
PA0,
PA1
Вывод A потенциометра. Клемма переменного резистора, на которую обычно подается регулируемый сигнал.
PW0,
PW1
"Движок" потенциометра/переменного резистора.
~CS Это вывод входа для выборки порта SPI (chip select), который используется для загрузки команды и данных в регистр сдвига и копирования загруженных данных в из регистра сдвига в регистр (или регистры) потенциометра (потенциометров). Сигнал этого вывода проходит через триггер Шмитта.
SCK Это вывод входа тактов порта SPI, и он используется для последовательной загрузки в микросхему команды и данных. Данные вдвигаются в вывод SI по положительному перепаду SCK (0 -> 1), и выходят наружу через вывод SO по отрицательному перепаду SCK (1 -> 0). Этот вывод активизируется сигналов вывода ~CS (например, микросхема почти не потребляет ток, если вывод SCK переключается, когда на выводе ~CS уровень лог. 1). Сигнал с вывода SCK проходит через триггер Шмитта.
SI Это вход для поступления последовательных данных порта SPI. Байты команды и данных вдвигаются в регистр сдвига через этот вывод. Действие входа SI управляется сигналом вывода ~CS (микросхема не потребляет ток и не реагирует на входные данные, когда они меняются на выводе SI, если вывод ~CS находится в лог. 1). Сигнал на вывод SI проходит через триггер Шмитта.
SO Это выход последовательных данных порта SPI, предназначенный для соединения нескольких микросхем в цепочку. Данные выдвигаются наружу через вывод SO по спаду сигнала тактов SCK. Выход SO является двухтактным, и он не переходит в третье состояние, когда на входе ~CS лог. 1. Если на ~CS лог. 1, то на выходе SO будет лог. 0.
~RS Это вход сброса, который переводит состояние потенциометров в среднее положение (код 80h), если на этом выводе появился лог. 0 на время как минимум 150 нс. Этот вывод не переключается в лог. 0, когда ~CS переключается в лог. 0. Можно переключить вход сброса, когда ~SHDN находится в лог. 0. Чтобы снизить потребление тока, вход сброса должен быть подтянут к лог. 1 через резистор pull-up. Производительность этой схемы показана на рис. 2-12 даташита [1]. Этот вывод будет потреблять нежелательный ток, когда находится на уровне между лог. 0 и лог. 1, поэтому не оставляйте вход сброса в подвешенном состоянии.
~SHDN Это аппаратный вход выключения, снабженный триггером Шмитта. Если перевести этот вывод в лог. 0, то микросхема перейдет в энергосберегающий режим, в котором вывод A переменных резисторов отключается, а выводы B и W замыкаются друг на друга. Вход ~SHDN не должен переходить в лог. 0, когда вывод ~CS находится в лог. 0. Чтобы минимизировать потребление энергии, этот вывод должен иметь верхнюю подтяжку (резистор pull-up). Производительность этой схемы показана на рис. 2-12 даташита [1]. Этот вывод будет потреблять нежелательный ток, когда находится на уровне между лог. 0 и лог. 1, поэтому не оставляйте вход сброса в подвешенном состоянии.
VSS GND, земля, минус питания и общий провод для всех цифровых сигналов.
VDD + питания.

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

Устройства MCP41XXX/MCP42XXX это одноканальные и двухканальные потенциометры с 256 положениями, которые можно использовать вместо обычных механических. Доступны номиналы 10 кОм, 50 кОм и 100 кОм. Как показано на рис. 4-1, каждый потенциометр построен из как массив переключаемых резисторов, управляемый 8-битным (отсюда 256 позиций) регистром данных, который определяет положение "движка". Номинальное сопротивление движка составляет 52 Ом для 10 кОм версии, 125 Ом для 50 кОм версии и 100 кОм версии. Для двухканальных устройств различия по сопротивлению между каналами составляет не более 1%. Сопротивление между движком и любым из крайних выводов резистора линейно меняется в зависимости от значения, сохраненное в регистре данных. Код 00h соединяет движок W с выводом B. После включения питания все регистры данных автоматически загружаются средним значением (80h). Последовательный интерфейс предоставляет способ загрузить данные в регистр сдвига, после чего переместить их в регистры данных. Последовательный интерфейс также позволяет перевести отдельные потенциометры в режим выключения (shutdown mode) для минимизации потребления энергии. Вывод ~SHDN может также может использоваться для перевода всех потенциометров в shutdown mode (программно можно задавать shutdown mode индивидуально для каждого из потенциометров), и предоставляется вывод ~RS для установки потенциометров в среднее положение mid-scale (80h).

Shutdown отключает вывод A и подключает движок W к выводу B, без изменения состояния регистров данных.

Когда разводится печатная плата с использованием цифровых потенциометров, должны использоваться блокирующие конденсаторы. Они должны быть подключены максимально близко к выводам питания микросхемы. Рекомендуется использовать конденсатор номиналом 0.1 мкФ. Цифровые и аналоговые проводники должны быть максимально удалены друг от друга на плате, желательно, чтобы не было проводников под корпусом микросхемы или под корпусом конденсатора. Особое внимание должно быть уделено проводникам с высокочастотными сигналами (такие как сигналы тактов), чтобы они как можно дальше проходили от проводников с аналоговыми сигналами. Использование аналоговой заливки рекомендуется, чтобы удерживать потенциал земли одинаковым для всех устройств на плате.

4.1. Режимы работы. Приложения с цифровым потенциометром можно поделить на 2 категории: режим реостата и потенциометра, или режим делителя напряжения.

4.1.1. Режим реостатата. В этом режиме потенциометр используется как двухвыводный резистивный элемент (переменный резистор). Не используемый вывод должен быть соединен с движком, как показано на рис. 4-2. Обратите внимание, что смена полярности выводов A и B не влияет на работу потенциометра в режиме реостата (смена полярности просто поменяет действие записываемых кодов).

MCP4XXXX reostat fig4 2

Рис. 4-2. Конфигурация реостата с двумя выводами. Работает в схеме как переменный резистивный элемент, сопротивление которого меняется под управлением цифрового кода.

Использование устройства в этом режиме позволяет менять общее сопротивление между двумя узлами схемы. Общее измеренное сопротивление будет минимальным для кода 00h, когда движок W соединен с выводом A, и переместился к выводу B. Сопротивление при этом будет равно сопротивлению движка, что составит типично 52Ω для 10 kΩ устройств MCP4X010, 125Ω для 50 kΩ (MCP4X050) и 100 kΩ (MCP4X100) устройств. Для 10 kΩ устройства вес младшего разряда регулирования 39.0625Ω (если предположить общее сопротивление 10 kΩ). Сопротивление будет расти при увеличении кода, и будет максимальным 9985.94Ω для кода FFh. Движок никогда не будет соединен напрямую с точкой B стека резисторов.

В состоянии 00h общее сопротивление будет равно сопротивлению движка W. Чтобы избежать повреждения микросхемы следует ограничить ток через переменный цифровой резистор значением 1 mA.

Для двухканальных устройств разница сопротивления точек A и B между каналами составит меньше 1%. Однако между разными микросхемами несовпадение может составлять до 30%.

В режиме реостата сопротивление имеет положительный температурный коэффициент. Изменение сопротивление между движком и крайним выводом в зависимости от температуры показано на рис. 2-8 даташита [1]. Наибольшее изменение из-за температуры будут происходить для 6% кодов (в диапазоне 00h .. 0Fh) из-за того, что коэффициент сопротивления движка влияет на общее сопротивление. Для оставшихся кодов доминантным будет вклад температурного коэффициента массива резисторов RAB, который обычно составляет 800 ppm/°C.

4.1.2. Режим потенциометра. В режиме потенциометра все 3 вывода устройства подключаются к разным точкам схемы. Это позволяет менять напряжение на движке (выходе) пропорционально коду. Этот режим иногда называют режимом делителя напряжения. Потенциометр используется для предоставления настраиваемого напряжения между двумя точками, как показано на рис. 4-3. Обратите внимание, что изменение полярности выводов A и B не влияет на работу (смена полярности просто поменяет действие записываемых кодов).

MCP4XXXX divider fig4 3

Рис. 4-3. Режим делителя напряжения (потенциометра).

В этой конфигурации соотношение внутреннего сопротивления определяется температурным коэффициентом устройства. Совпадение по температурному коэффициенту сопротивлений RAB и RWB составляет 1 ppm/°C (измерено для кода 80h). Для кодов с меньшими значениями температурный коэффициент движка будет доминировать. Рис. 2-3 даташита [1] показывает эффект температурного коэффициента движка. Выше младших кодов этот рисунок показывает, то 70% состояний даст температурный коэффициент меньше 5 ppm/°C. 30% состояний дадут ppm/°C меньше 1.

4.2. Типовые применения

4.2.1. Программируемые усилители с несимметричным выходом. Потенциометры часто используют для настройки уровней опорного напряжения или усиления. Схемы с программируемым усилением на основе цифровых потенциометров могут быть реализованы разными способами. Пример инвертирующего усилителя с одним источником питания показан на рис. 4-4. Из-за высокого входного сопротивления усилителя сопротивление движка не участвует в передаточной функции.

 
 MCP4XXXX single supply inverting amplifier fig4 4
VOUT = -VIN * (RB/RA) + VREF * (1 + RB/RA)
 
Здесь:
 
     RAB*(256 – Dn)            RAB * Dn
RA = --------------       RB = --------
          256                     256
          
RAB = общее сопротивление канала
Dn = настройка движка (Dn = 0 .. 255)

Рис. 4-4. Инвертирующий программируемый усилитель с однополярным питанием.

Для не инвертирующего усилителя с однополярным питанием может быть использована схема на рис. 4-5.

 
 MCP4XXXX single supply non inverting amplifier fig4 5
 
VOUT = VIN * (1 + RB/RA)
 
Здесь:
 
     RAB*(256 – Dn)            RAB * Dn
RA = --------------       RB = --------
          256                     256
          
RAB = общее сопротивление канала
Dn = настройка движка (Dn = 0 .. 255)

Рис. 4-5. Не инвертирующий программируемый усилитель с однополярным питанием.

Чтобы эти схемы работали правильно, необходимо учесть некоторые моменты. Для линейной работы сигналы на входе и выходе не должны уходить за пределы уровней выводов VSS и VDD микросхемы потенциометра и не должны быть превышены пределы входных и выходных сигналов операционного усилителя. Схема на рис. 4-4 требует виртуальной земли или опорного напряжения для не инвертирующего усилителя. Для дополнительной информации обратитесь к апноуту 682 "Using Single-Supply Operational Amplifiers in Embedded Systems" (DS00682). При включении питания или поступления сигнала сброса (~RS), сопротивление установится в среднее положение, когда сопротивление плеч RA и RB равны. На основе передаточной функции схемы усиление составит 1. Когда код увеличивается, движок перемещается в сторону вывода A, и усиление увеличивается. Соответственно когда движок перемещается к выводу B, усиление уменьшается. Рис. 4-6 показывает эту зависимость. Обратите внимание на псевдо-логарифмическое усиление вокруг десятичного кода 128. По мене приближения движка к любому из выводов крутизна изменения усиления резко возрастает. Из-за несовпадения величин RA и RB для крайних старших и младших кодов малое изменение позиции движка очень сильно влияет на усиления. Как показано на рис. 4-3, рекомендуется использовать изменение коэффициента усиления в диапазоне от 0.1 до 10.

MCP4XXXX Gain vs Code fig4 6

Рис. 4-6. Зависимость усиления от кода для схем инвертирующего и дифференциального усилителей.

4.2.2. Программируемый дифференциальный усилитель. Пример усилителя с дифференциальным входом, где используются цифровые потенциометры, показан на рис. 4-7. Для поддержки передаточной функции в оба канала резистора должны быть запрограммированы одинаковым кодом. Точное соответствие по сопротивлению между каналами сдвоенного резистора может быть использовано как достоинство для этой схемы. Эта схема покажет также стабильную работу в зависимости от температуры из-за низкого температурного коэффициента потенциометра. На рис. 4-6 также показана зависимость между усилением и кодом для этой схемы. Когда движок приближается к любому из выводов потенциометра, с каждым новым шагом усиление меняется очень значительно, поэтому рекомендуется менять коэффициент усиления в диапазоне между 0.1 и 10.

 
 MCP4XXXX single supply differential amplifier fig4 7
 
VOUT = (VA - VB) * RB/RA
 
Здесь:
 
     RAB*(256 – Dn)            RAB * Dn
RA = --------------       RB = --------
          256                     256
          
RAB = общее сопротивление канала
Dn = настройка движка (Dn = 0 .. 255)

Замечание: сопротивления каналов RAB должны быть одинаковые (каналы из одного корпуса MCP42XXX).

Рис. 4-7. Дифференциальный усилитель с однополярным питанием.

4.2.3. Программируемая подстройка смещения. Для приложений, где требуется только программируемое опорное напряжение, можно использовать схему на рис. 4-8. Эта схема показывает устройство, используемое в режиме потенциометра (делителя напряжения) с двумя дополнительными резисторами и буферным усилителем. Это создает линейную зависимость между выходным напряжением и программируемым кодом. Резисторы R1 и R2 могут использоваться для уменьшения или увеличения веса шага регулирования. Потенциометр в этом режиме работает стабильно при изменениях температуры. Температурная зависимость этой схемы показана на рис. 2-3 даташита [1]. Самые плохие показатели для температурной зависимости будут для нижних и верхних кодов из-за того, что начинает оказывать влияние сопротивление движка. R1 и R2 также используются для изменения границ напряжения, таким образом может быть снижена необходимость использования этих крайних кодов.

 
 MCP4XXXX offset trim fig4 8

Рис. 4-8. Номиналы R1 и R2 меняют разрешающую способность схемы и пределы регулирования выходного напряжения.

4.3. Вычисление сопротивлений. Когда программируются настройки цифрового потенциометра, используются следующие выражения для получения сопротивлений. Код 00h соответствует крайнему положению движка максимально близко к выводу B, оставляя только сопротивление движка. Программирование кодов близко к FFh приближают движок к выводу A потенциометра. Выражения на рис. 4-9 могут использоваться для вычисления сопротивлений плеч.

 
 MCP4XXXX calculation fig4 9
 
RWA(Dn) = (RAB * (256 - Dn) / 256) + RW
 
RWB(Dn) = (RAB * Dn / 256) + RW
 
Здесь:
 
PA ножка A потенциометра
PB ножка B потенциометра
PW движок потенциометра
RWA сопротивление между выводом A и движком
RWB сопротивление между выводом B и движком
RAB общее сопротивление резистора (10 kΩ, 50 kΩ или 100 kΩ)
RW сопротивление движка
Dn 8-битное значение в регистре данных для потенциометра n

Рис. 4-9. Сопротивление плеч потенциометра является функцией кода. Следует заметить, что при использовании этих выражений для большинства схем усилителей с обратной связью (как на рис. 4-4 и 4-5) сопротивление движка можно опустить из-за высокого входного сопротивления усилителя.

Рис. 4-10 показывает пример вычислений для 10 kΩ потенциометра.

 
 MCP4XXXX calculation example fig4 10
 
R = 10 kΩ
Код = C0h = 192
 
RWA(Dn) = (RAB * (256 - Dn) / 256) + RW
RWA(C0h) = (10kΩ * (256 - 192) / 256) + 52Ω = 2552Ω
 
RWB(Dn) = (RAB * Dn / 256) + RW
RWB(C0h) = (10kΩ * 192 / 256) + 52Ω = 7552Ω

Рис. 4-10. Пример расчетов сопротивления.

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

Обмен данными между микроконтроллером и цифровым резистором MCP41XXX/42XXX осуществляется через последовательный интерфейс SPI. Этот интерфейс использует 3 команды:

1. Запись нового значения в регистр (регистры) данных потенциометра.
2. Перевод канала в низкопотребляющий режим выключения (low power shutdown mode).
3. Команда NOP (No Operation, пустая операция).

Выполнение любой команды происходит переводом сигнала ~CS в лог. 0, после чего вдвигается байт команды, за которым идет байт данных. Эти данные попадают в 16-битный регистр сдвига. Команда выполняется после того, как сигнал ~CS переводится в лог. 1. Данные вдвигаются через вывод SI по спаду тактов SCK, и выдвигаются на выход через вывод SO, см. рис. 5-1.

Примечание: не все микросхемы имеют вывод SO, это зависит от корпуса.

MCP4XXXX Timing Writing fig5 1

Рис. 5.1. Диаграмма сигналов для записи инструкций или данных в цифровой потенциометр.

Примечания к рис. 5-1: значения бит данных, помеченных крестиком X, не имеют значения. Всегда должно быть нацело поделенное на 16 количество тактов, когда сигнал ~CS находится в лог. 0, иначе команды не будут приняты устройством. Последовательный выход данных SO доступен только для двухканальной версии микросхемы MCP42XXX. Для одноканальной версии микросхемы MCP41XXX бит P1 не имеет значения.

Устройство отслеживает количество тактов (перепадов от 0 -> 1), пока сигнал ~CS находится в лог. 0, и оборвет все команды, если количество пришедших тактов не будет делиться нацело на 16.

5.1. Байт команды. Первый отправляемый байт всегда байт команды, за которым идет байт данных. Байт команды содержит 2 бита выбора команды и 2 бита выбора потенциометра. Содержимое не используемых бит игнорируется (биты 'don’t care', т. е. не имеет значения). Биты выбора команд суммарно описываются на рис. 5-2. Биты выбора команды C1 и C0 (биты 4:5) определяют, какая команда будет выполнена. Если биты команд оба 0 или 1, то будет выполнена команда NOP, как только загружены все 16 бит. Эта команда полезна в конфигурации, когда несколько микросхем соединены в цепочку. Когда биты команды 01, то будет выполнена команда с 8 битами, отправленными в байте данных. Данные будут записаны в потенциометр, определенный битами выбора потенциометра. Если биты команды 10, то будет выполнена команда shutdown на потенциометрах, определенных этими битами выбора потенциометра.

Для устройств MCP42XXX биты выбора потенциометра P1 и P0 (биты 0:1) определяют, на какие потенциометры действует команда. Соответствующая лог. 1 в позиции обозначает, что выполняется команда для этого потенциометра, в то время как лог. 0 обозначает, что команда не будет влиять на этот потенциометр (см. рис. 5-2).

D15 D14 D13 D12 D11 D10 D9 D8
X X C1 C0 X X P1 P2

Рис. 5-2. Формат байта команды.

Биты C1C0 задают команду:

C1 C0 Команда Описание
0 0 None Пустая команда (не будет выполнено никаких действий).
0 1 Write Data В регистр данных выбранного потенциометра (определяется состоянием бит P1P0) будут записано 8 бит данных, которые идут за командой (D7..D0).
1 0 Shutdown Потенциометры, выбранные битами P1P0, будут переведены в состояние "выключено" (Shutdown Mode). Биты данных (D7..D0) для этой команды не имеют значения.
1 1 None Пустая команда (не будет выполнено никаких действий).

Биты P1P0 выбирают потенциометры:

P1 P0 Выбор канала потенциометров
0 0 Пустой выбор: команда не повлияет на состояние потенциометров.
0 1 Команда выполнится для потенциометра 0.
1 0 Команда выполнится для потенциометра 1.
1 1 Команда выполнится для обоих потенциометров.

5.2. Запись данных в регистры. Когда новые данные записаны в один или большее количество регистров данных потенциометра, за командой записи идет байт данных с новым значением. Команда выбирается битами C1C0, установленными в 01. Биты выбора потенциометра P1 и P0 позволяют новому значению записаться в potentiometer 0, potentiometer 1 (или в них оба) одной командой. Лог. 1 либо для P1, либо для P0 приведет к записи данных в соответствующий регистр данных потенциометра, и лог. 0 не окажет изменения, данные этого потенциометра не поменяется. См. суммарное описание формата команды на рис. 5-2.

5.3. Использование команды Shutdown. Команда shutdown позволяет перевести схему приложение в режим низкого потребления тока (power-saving mode). В этом режиме выводы отключены, и ножки потенциометра B и W замкнуты друг на друга. Эта команда выбирается, когда биты команды C1C0 установлены в 10. Биты выбора потенциометра P1 и P0 позволяют выключить каждый потенциометр независимо друг от друга. Если либо P1, либо P0 в лог. 1, то соответствующий потенциометр перейдет в режим shutdown. Лог. 0 для P1 или P0 не окажет эффекта. 8 бит данных, которые идут за командой, все еще нужны для передачи команды shutdown, но их содержимое не имеет значения. См. суммарное описание формата команды на рис. 5-2.

Как только определенный потенциометр вошел в режим shutdown, он будет оставаться в нем, пока не произойдет следующее:

• Новое значение записано в регистр данных потенциометра, при этом вывод ~SHDN должен быть в лог. 1. Устройство будет оставаться в режиме shutdown до перепада 0 -> на выводе ~CS, после чего устройство выйдет из режима shutdown, и новое значение будет записано в регистр (регистры) данных. Если вывод ~SHDN находится в лог. 0, когда принято новое значение, то регистры все-таки получат новое значение, но устройство останется в режиме shutdown. Этот сценарий подразумевает, что принята допустимая команда. Если принята недопустимая команда, то она будет игнорирована, и устройство останется в режиме shutdown.

Примечание: иногда у микросхемы нет вывода ~SHDN, тогда подразумевается, что он всегда находится в состоянии лог. 0. Это зависит от корпуса микросхемы - если корпус имеет 8 выводов, то нет не только вывода ~SHDN, но также нет выводов ~SHDN и сброса ~RS. Поэтому все, что написано дальше, к этим микросхемам не относиться.

Также можно использовать аппаратный вывод выключения (shutdown pin) и вывод сброса (reset pin) для вывода устройства из программно активированного режима выключения. Чтобы сделать это, сначала должен быть выдан импульс лог. 0 на выводе выборки. Для нескольких устройств использование общего вывод ~SHDN или RESET позволяет с помощью выборки перевести вывести из shutdown только нужную микросхему. См. рис. 1-3 диаграммы сигналов. С предварительной подачей импульса выборки может возникнуть одна из ситуаций для вывода устройства из программного shutdown:

• На выводе ~RS появляется импульс лог. 0 на время как минимум 150 нс, при этом ~SHDN должен быть в лог. 1. Если вывод ~SHDN в лог. 0, то регистры все еще будут установлены в среднее значение, но устройство останется в режиме shutdown. Это условие подразумевает, что ~CS находится в лог. 1, так как перевод вывода ~RS в лог. 0 при выводе ~CS в лог. 0 приведет к недопустимому состоянию, и результаты будут непредсказуемы.

• Перепад 0 -> 1 на выводе ~SHDN, который произошел после уровня лог. 0 как минимум 100 нс, когда вывод ~CS был в лог. 1. Переключение ~SHDN в лог. 0, когда ~CS в лог. 0 это недопустимое состояние, которое приведет к непредсказуемым результатам.

• Устройство выключено и потом снова включено.

Примечание: аппаратный вывод ~SHDN всегда переведет устройство в режим shutdown, независимо от того, переведен ли потенциометр в режим shutdown программной командой.

Когда устройство выключено, регистры данных устанавливаются в среднее значение (80h). Схема сброса при включении питания используется для гарантии, что после включения устройства оно окажется в известном состоянии.

5.8. Использование MCP41XXX/42XXX в SPI Mode 11. Можно работать с устройствами в режимах SPI 00 и 11. Разница между этими режимами только в том, что когда используется режим 11, такты остаются в режиме ожидания в состоянии лог. 1, в то время как в режиме 00 такты остаются в режиме ожидания в лог. 0. В обоих режима данные вдвигаются в устройство через вход SI по положительным перепадам SCK, и выдвигаются наружу через вывод SO по спадам уровня SCK. Операции с использованием режима 00 показаны на рис. 5-1. Пример на рис. 5-5 показывает режим 11.

MCP4XXXX Timing SPI mode11 fig5 5

Рис. 5-5. Диаграмма сигналов для работы в режиме SPI Mode 11.

Здесь приведен пример настройки и программирования MCP41010. Также см. исходный код проекта функционального генератора из статьи [2].

/** \file spi.c
 * Простой код для использования периферийного устройства AVR SPI,
 * работающий по опросу (polling, т. е. без прерываний)
 */
/**
 * Инициализирует AVR SPI в соответствии с указанными параметрами.
 * \param setup это опции SPI, которые могут быть маской, составленной
 *              из SPIMODE*, *_FIRST, CLOCKDIV*.
 */
void spi_init(uint8_t setup)
{
   SPI_DDR |= (1 << SPI_MOSI_BIT)|(1 << SPI_SCK_BIT)|(1 << SPI_CS_BIT);
   SPCR     = (1 << SPE)|(1 << MSTR)|setup;
}
 
/**
 * Посылает один байт через SPI с использованием опроса.
 * \param data байт для отправки
 */
void spi_send_byte(uint8_t data)
{
   SPDR = data;
   while(!(SPSR & (1 << SPIF)));
}
 
/** \file MCP41010.h
 */
#define MCP41010_CS_PORT PORTB
#define MCP41010_CS_DDR  DDRB
#define MCP41010_CS_BIT  PB2
 
#define MCP41010_CS_HI() MCP41010_CS_PORT |=  (1 << MCP41010_CS_BIT)
#define MCP41010_CS_LO() MCP41010_CS_PORT &= ~(1 << MCP41010_CS_BIT)
 
//Маски для байта команды MCP44010:
#define MCP_POTENTIOMETER0 0x01
#define MCP_POTENTIOMETER1 0x02
#define MCP_WRITE          0x10
#define MCP_SHUTDOWN       0x20
 
/** \file MCP41010.c
 *
 * Управление электронным переменным резистором MCP41010.
 * Использует одностороннюю передачу данных через SPI.
 */
#include "MCP41010.h"
#include < util/delay.h >
#include "spi.h"
 
void mcp41010_init (void)
{
   //Инициализация ножки выборки:
   MCP41010_CS_DDR |= (1 << MCP41010_CS_BIT);
   MCP41010_CS_HI();
}
 
void mcp41010_write (u8 val)
{
   MCP41010_CS_LO();
   //_delay_us(2);
   spi_send_byte(MCP_WRITE|MCP_POTENTIOMETER0);
   spi_send_byte(val);
   //_delay_us(2);
   MCP41010_CS_HI();
}
 
//////////////////////////////////////////////
// Пример использования:
//////////////////////////////////////////////
   ...
 
   /* Инициализация SPI */
   spi_init(SPIMODE2);
   /* Инициализация AD9833 */
   ad9833_init();
   /* Инициализация MCP41010 */
   mcp41010_init();
 
   ...
   
   mcp41010_write(147);

[Ссылки]

1. MCP41XXX/42XXX Single/Dual Digital Potentiometer with SPI™ Interface site:microchip.com.
2. AD9833: программируемый генератор сигналов.