DAC无电压输出

[复制链接]
3605|10
 楼主| zhaohualiang 发表于 2012-8-13 16:55 | 显示全部楼层 |阅读模式
本帖最后由 zhaohualiang 于 2012-8-13 16:59 编辑

想用51单片机控制DAC输出模拟电压,单片机选用stc11f32xe,dac选用max517,运行程序后没有电压输出,一直是0V。VEF电压为2.5v.


下面是测试程序:
/*****************************************************************************************/
//DAC:MAX517   起始条件子函数
/*****************************************************************************************/
void DAC_Start(void)
{
SDA=1;
nop();
SCL=1;
nop();
SDA=0;
nop();
}
/*****************************************************************************************/
//DAC:MAX517   停止条件子函数
/*****************************************************************************************/
void DAC_Stop(void)
{
SDA=0;
nop();
SCL=1;
nop();
SDA=1;
nop();
}
/*****************************************************************************************/
//DAC:MAX517    应答子函数
/*****************************************************************************************/
void DAC_Ack(void)
{
SDA=0;
nop();
SCL=1;
nop();
SCL=0;
}
/*****************************************************************************************/
//DAC:MAX517   发送数据子程序,Data为要发送的数据
/*****************************************************************************************/
void DAC_Send(uchar Data)
{
uchar BitCounter=8;//位控制
uchar temp;//中间变量控制
do
  {
  temp=Data;
  SCL=0;
  nop();
  if((temp&0x80)==0x80)//如果最高位是1
   SDA=1;
  else
   SDA=0;
  SCL=1;
  temp=Data<<1;//左移
  Data=temp;
  BitCounter--;
  }
while(BitCounter);
SCL=0;
}
/*****************************************************************************************/
//DAC:MAX517   读一个字节的数据,并返回该字节值
/*****************************************************************************************/
uchar DAC_Read(void)
{
uchar temp=0;
uchar temp1=0;
uchar BitCounter=1;
SDA=1;
do
  {
  SCL=0;
  nop();
  SCL=1;
  nop();
  if(SDA)
   temp=temp|0x01;
  else
   temp=temp&0xfe;
  if(BitCounter-1)
   {
   temp1=temp<<1;
   temp=temp1;
   }
  BitCounter--;
  }
while(BitCounter);
return(temp);
}
void main(void)
{
DAC_Start();
DAC_Send(0x5a);
DAC_Ack();
while(DAC_Read()!=0);
DAC_Send(0x00);
DAC_Ack();
while(DAC_Read()!=0);
DAC_Send(0xff);
DAC_Stop();
while(1);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
IJK 发表于 2012-8-13 17:07 | 显示全部楼层
估计I2C通信有点问题。有条件的话,最好用示波器查查。
另外,如果max517有ID可以读的话,读ID看是否正确。
 楼主| zhaohualiang 发表于 2012-8-13 17:11 | 显示全部楼层
没有示波器,不知道这样检测应答对吗,id是什么啊
ayb_ice 发表于 2012-8-13 17:23 | 显示全部楼层
10成是通信都没有通
 楼主| zhaohualiang 发表于 2012-8-14 08:12 | 显示全部楼层
是软件原因还是硬件连接的原因啊
zhm8508 发表于 2012-8-14 08:42 | 显示全部楼层
时序明显有问题嘛,while(DAC_Read()!=0)干什么用的?
 楼主| zhaohualiang 发表于 2012-8-14 08:45 | 显示全部楼层
读应答信号,是否为0
zhm8508 发表于 2012-8-14 09:17 | 显示全部楼层
1、地址对不对
2、NOP指令延时够不够
 楼主| zhaohualiang 发表于 2012-8-14 10:20 | 显示全部楼层
1.地址一开始是AD1=0;AD0=1,所以地址是0x5a,现在改成AD1=0;AD0=0,地址设成0x58,还是不行。
2.nop()增加到十多个了还是不行。
 楼主| zhaohualiang 发表于 2012-8-14 14:25 | 显示全部楼层
我改了下应答子程序,应该是有应答,但是 还没有电压输出。
void DAC_Ack(void)
        {
        nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();
        SDA=1;
        SCL=1;
        nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();        while(SDA==1);
        SCL=0;
        }
void main(void)
               {
                DAC_Start();
                DAC_Send(0x58);
                DAC_Ack();
                DAC_Send(0x00);
                DAC_Ack();
                DAC_Send(0x00);
                DAC_Stop();
               }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

219

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部