ИМС X9Cxxx это потенциометр с цифровым управлением. Управление изменением сопротивления модуля цифрового потенциометра осуществляется путем коммутации 99 постоянных резисторов.
Управление модулем потенциометра осуществляется подачей сигналов на входы U/D, INC и CS.
VH, RW, VL — выходы потенциометра, максимальное напряжение через потенциометр 10 В, ток до 8 мА.
В серии X9Cxxx содержит потенциометры 4-х номиналов:
Управление цифровым потенциометром достаточно простое, сигнал CS разрежает (LOW) и запрещает (HIGH) работу потенциометра. Сигнал U/D меняет направление изменение сопротивления, а импульсы подаваемые на вход INC с каждым тактом меняют значение сопротивления потенциометра на один шаг (1%).
Например если необходимо установить значение сопротивления с 0 % на 20 %, необходимо установить CS в LOW, на пин U/D подать HIGH и далее на пин INC подать 20 импульсов. Если необходимо уменьшить сопротивление, то на пин U/D нужно подать LOW.
Ниже показан пример использования цифрового потенциометра, пример очень простой, на вывод VH подано с платы контроллера напряжение 3,3 В, на VL GND, а вывод RW подключен к аналоговому входу A0. Так же используются две кнопки управления работой цифрового потенциометра.
В примере используется плата разработчика на базе LGT8F328.
#define CS 2 #define INC 4 #define UD 3 #define STEP 5 int pop,dat=0,dat_old; bool w=1; void setup() { analogReadResolution(12); analogReference(INTERNAL4V096); Serial.begin(9600); pinMode(CS,OUTPUT); pinMode(INC,OUTPUT); pinMode(UD,OUTPUT); pinMode(A0,INPUT); pinMode(11,INPUT_PULLUP); pinMode(12,INPUT_PULLUP); digitalWrite(CS,LOW); cl(); } void loop() { if(digitalRead(11)==LOW){dat+=STEP;w=1;if(dat>100){dat=100;}delay(200);digitalWrite(CS,LOW);} if(digitalRead(12)==LOW){dat-=STEP;w=1;if(dat<0){dat=0;}delay(200);digitalWrite(CS,LOW);} if(dat_old!=dat){pop = dat-pop; if(pop>0){up(abs(pop));} if(pop<0){dw(abs(pop));} pop=dat; digitalWrite(CS,HIGH); } dat_old=dat; if(w==1){w=0; delay(50); Serial.print(analogRead(A0)/1000.0,3);Serial.println(" V"); Serial.print(pop);Serial.println(" %"); } } void cl(){digitalWrite(UD,LOW);for(int i=0;i<100;i++){digitalWrite(INC,LOW);digitalWrite(INC,HIGH);}} void up(byte data){digitalWrite(UD,HIGH);for(int i=0;i<data;i++){digitalWrite(INC,LOW);digitalWrite(INC,HIGH);}} void dw(byte data){digitalWrite(UD,LOW);for(int i=0;i<data;i++){digitalWrite(INC,LOW);digitalWrite(INC,HIGH);}}
При подачи питания потенциометр устанавливает % сопротивления указанный в переменной dat. В данном примере переменная dat имеет значение 0. Если занести значение переменной в EEPROM, то при подачи питания будет установлено ранее установленное напряжение. Далее кнопками UP и DW можно регулировать напряжение подаваемое на вход A0, от 0 до 3,3 В. Так же можно установить кол-во шагов при одном нажатии кнопки, в примере одно нажатие равно 5 шагам (5 %).
#define STEP 5
Показания напряжения и % сопротивления выводиться в монитор порта: