我写了个TLC5620的程序,TLC5620是一款8位DA芯片。
程序如下:
// ;==========================================================
// ; 电压给定Uref写入
// ;==========================================================
// ;入口参数: A;
// ;命 令 字: A1,A0,RNG
// ;==========================================================
// ; A1 A0 | Note
// ;----------------------------------------------------------
// ; 0 0 | DACA OUT
// ;----------------------------------------------------------
// ; 0 1 | DACB OUT
// ;----------------------------------------------------------
// ; 1 0 | DACC OUT
// ;----------------------------------------------------------
// ; 1 1 | DACD OUT
// ;==========================================================
// ;当命令字中RNG=0,表示D/A的反馈系数为1。
// ; Vo=1 * Vref
// ;--------
// ;当命令字中RNG=1,表示D/A的反馈系数为2。
// ; Vo=2 * Vref
// ;----------------------------------------------------------
// ;写入数据的格式为:A1 A0 RNG D7D6D5D4D3D2D1D0
// ;----------------------------------------------------------
void TLC5620UrefWrite(uchar dat)
{
uchar i;
EA=0;
Clock=0;
LOAD=1;
Dat=0; // ;A1=0,选择通道A
Clock=1;
_nop_();
Clock=0;
Dat=0; // ;A0=0,选择通道A
Clock=1;
_nop_();
Clock=0;
Dat=0; // ;RNG=0使产生的DAC转换电压在参考基准电压与GND 之间Vout=1*Vref.
Clock=1; // ;RNG=1使产生的DAC转换电压在参考基准电压2倍与GND之间Vout=2*Vref.
_nop_();
Clock=0;
for(i=0;i<8;i++)
{
if((dat&0x80)==0x80)
Dat=1;
else
Dat=0;
dat<<=1;
Clock=1;
_nop_();
Clock=0;
// ;输入八位数据
}
LOAD=0;
_nop_();
_nop_();
_nop_();
LOAD=1;
EA=1;
}
调用如下:
temp=38;
while(1)
{
temp++;
if(temp>=50)
temp=38;
TLC5620UrefWrite(temp);
for(i=0;i<20000;i++);
}
发现一个奇怪的现象,在temp=40~48的时候,DA输出的电压值不变。
其他的,通过做实验,0~39,49~255,电压值都有变化。请问高手,是芯片问题,还是程序问题?谢谢! |