数字电位器X9312的介绍与驱动程序
介绍
X9312是一个包含有99个电阻单元的电阻阵列。在每个单元之间和二个端点都有可以被滑动单元访问的抽头点。滑动单元的位置由CS 、U / D 和INC 三个输入端控制。滑动端的位置可以被储存在一个非易失 性存储器中,因而在下一次上电工作时可以被重新调用。下图是X9312的原理框图。
引脚说明:
X9312时序图
驱动程序
#define PRE 25
int Val_temp= PRE; //定义一个全局变量Val_temp,存放X9312滑动端的位置
void X9312_down(int arg) //
{
int i=0;
CS=0; //选中芯片
INC=1;
delay_us(2);
UPDOWN=0;
delay_us(2);
for(i=0;i<arg;i++) //向下计数100
{
INC=1;
delay_us(3);
INC=0;
delay_us(3);
}
INC=1; //保存
delay_us(2);
CS=1;
delay_ms(30);
}
void X9312_up(int arg)
{
int i=0;
CS=0; //选中芯片
INC=1;
delay_us(2);
UPDOWN=1; //切换至向上计数
delay_us(2);
for(i=0;i<arg;i++) //向上计数50
{
INC=1;
delay_us(3);
INC=0;
delay_us(3);
}
INC=1; //保存
delay_us(2);
CS=1;
delay_ms(30);
}
void X9312_val_Init(void) //预置高压直流电源VH
{
int i;
CS=0; //选中芯片
INC=1;
delay_us(2);
UPDOWN=0;
delay_us(2); //切换至向计数
for(i=0;i<100;i++) //向下计数100
{
INC=1;
delay_us(3);
INC=0;
delay_us(3);
}
INC=1;
delay_us(2);
UPDOWN=1; //切换至向上计数
delay_us(2);
for(i=0;i<PRE;i++) //向上计数50
{
INC=1;
delay_us(3);
INC=0;
delay_us(3);
}
INC=1; //保存
delay_us(2);
CS=1;
delay_ms(30);
}
void X9312_Setval(int arg)
{
int temp,cir;
temp=Val_temp;
Val_temp=arg;
if(arg<temp)
{
cir=temp-arg;
X9312_down(cir);
}
else{
cir=arg-temp;
X9312_up(cir);
}
}