刚接触这个论坛,正好现在有一点地方弄不明白,寻求高人指点
不知道有没有人用过MCP4728这个片子,用IIC驱动的一个带四路缓冲输出的12 位电压输出DAC
本以为很简单就搞定了,可以一直拖了四五天却毫无进展,谁能给提点意见啊?小弟万分感谢!!!
下面是驱动程序,不知道哪里错了,连接方式很简单:VDD gnd SCL SDA LDAC接地 RDY/BSY空接
下面是程序:(其中IIC用的是原子哥的就没必要贴上来了,只是驱动MCP4728的一段,方便的话大家可以尝试一下)
void MCP4728_WR(void)//500k接地输出
{
u8 temp;
u8 setBuf[8];
setBuf[0]=0x94;
setBuf[1]=0x00;
setBuf[2]=0x92;
setBuf[3]=0x00;
setBuf[4]=0x93;
setBuf[5]=0x00;
setBuf[6]=0x94;
setBuf[7]=0x00;
IIC_Start();
IIC_Send_Byte(0xc0); //器件寻址
IIC_Wait_Ack();
IIC_Send_Byte(0x50); //设置顺序写起始地址 50eeprom 00 no eeprom
IIC_Wait_Ack();
temp=setBuf[0]&0X0F;
temp|=0xf0;
IIC_Send_Byte(temp); //1001高4位
IIC_Wait_Ack();
IIC_Send_Byte(setBuf[1]); //低8位
IIC_Wait_Ack();
temp=setBuf[2]&0X0F;
temp|=0xf0;
IIC_Send_Byte(temp); //1011高4位
IIC_Wait_Ack();
IIC_Send_Byte(setBuf[3]); //低8位
IIC_Wait_Ack();
temp=setBuf[4]&0X0F;
temp|=0xf0;
IIC_Send_Byte(temp); //1101高4位
IIC_Wait_Ack();
IIC_Send_Byte(setBuf[5]); //低8位
IIC_Wait_Ack();
temp=setBuf[6]&0X0F;
temp|=0xf0;
IIC_Send_Byte(temp); //1111高4位
IIC_Wait_Ack();
IIC_Send_Byte(setBuf[7]); //低8位
IIC_Wait_Ack();
IIC_Stop();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1.检查有没有应答.如果没有应答,检查线路和芯片.
2.写入并读出寄存器,如果写入失败,检查时序和操作.
3.写入指定的寄存器,检查输出引脚,如果没有对应现象,检查线路.
具体到这个芯片,
1.执行5.4.4的1st,看有没有应答.
2.1.执行5.4.4所有步骤,看4th的bit4和bit0是否正确.
2.2.执行5.6.4和5.6.9,看写入和读出是否一致.
3.执行5.6.4,看引脚现象.
一周热门 更多>