您好,
我正在通道A使用带+/-15V外部电源的DAC8775,我想将通道A用作电流源。
是否有任何初始化顺序? 例如,在通道A上生成1mA的步骤是什么。
谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
这是初始化代码,但仍然不起作用!
void DAC8775_init()
{
//初始化SPI
SPI_A0_init();
//将报警引脚初始化为具有中断的输入
P6REN || DAC8775_ALARM_PIN;//启用内部电阻器
P6OUT |= DAC8775_ALARM_PIN;//将电阻器设置为上拉
P6DIR &= DAC8775_ALARM_PIN;//将引脚设置为输入
P6OUT &=~(DAC8775_CLR_PIN + DAC8775_LDAC_PIN + DAC8775_RST_PIN);//初始化为低
P6OUT |= DAC8775_CS_PIN;//初始化为高
P6DIR || DAC8775_RST_PIN + DAC8775_CS_PIN + DAC8775_CLR_PIN + DAC8775_LDAC_PIN;//设置为输出引脚
//将RST设置为高
P6OUT |= DAC8775_RST_PIN;
DAC8775_writeToRegister (DAC8775_RST, 0x0001);//软件重置
DAC8775_writeToRegister (DAC8775_RST_config, 0x0012);//启用参考,关闭电源条件,将VOUT和IOUT更改为高-Z
DAC8775_writeToRegister (DAC8775_select_DAC,0x0020);//选择DAC通道A
DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x000F);//设置为4至20mA范围
DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x100F);//启用输出
DAC8775_writeToRegister (DAC8775_DAC_data, 0x8000);//将DAC数据寄存器值写入中尺度
}
void DAC8775_writeToRegister (uint8_t registerAddress,uint16_t值)
{
DAC8775_select();
SPI_A0_sendByte (registerAddress);
SPI_A0_sendByte ((value & 0xFF00)>> 8);
SPI_A0_sendByte (值和0x00FF);
DAC8775_Deselect ();
}
您好,Wahib,
您提供的示意图有几个潜在问题。 我在下面概述了我的反馈:
还请提供具有以下信号的完整SPI事务:
此致,
马特
Matt,您好!
首先感谢您的帮助,我检查了SPI和LDAC交易并找出了问题,
新代码现在为:
包括"dac8775.h"
内联空DAC8775_select()
{
P6OUT &=~DAC8775_CS_PIN;
}
内联空DAC8775_Deselect ()
{
P6OUT |= DAC8775_CS_PIN;
}
void DAC8775_init()
{
//初始化SPI
SPI_A0_init();
//将报警引脚初始化为具有中断的输入
P6REN || DAC8775_ALARM_PIN;//启用内部电阻器
P6OUT |= DAC8775_ALARM_PIN;//将电阻器设置为上拉
P6DIR &= DAC8775_ALARM_PIN;//将引脚设置为输入
P6OUT &=~(DAC8775_CLR_PIN + DAC8775_RST_PIN);//初始化为低
P6OUT |= DAC8775_CS_PIN + DAC8775_LDAC_PIN;//初始化为高
P6DIR || DAC8775_RST_PIN + DAC8775_CS_PIN + DAC8775_CLR_PIN + DAC8775_LDAC_PIN;//设置为输出引脚
//将RST设置为高
P6OUT |= DAC8775_RST_PIN;
DAC8775_writeToRegister (DAC8775_RST, 0x0001);//软件重置
DAC8775_writeToRegister (DAC8775_RST_config, 0x0012);//启用参考,关闭电源条件,将VOUT和IOUT更改为高-Z
DAC8775_writeToRegister (DAC8775_select_DAC,0x0020);//选择DAC通道A
DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x0007);//设置为-24mA至+20mA范围
DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x1007);//启用输出
}
void DAC8775_writeToRegister (uint8_t registerAddress,uint16_t值)
{
DAC8775_select();
SPI_A0_sendByte (registerAddress);
SPI_A0_sendByte ((value & 0xFF00)>> 8);
SPI_A0_sendByte (值和0x00FF);
P6OUT &=~DAC8775_LDAC_PIN;
DAC8775_Deselect ();
P6OUT |= DAC8775_LDAC_PIN;
}
问题是LDAC应在使SYNC变为HIGH之前变为LOW,然后在使SYNC变为HIGH之后应将LDAC再次设置为HIGH。
另一件事是SPI的CLK,它必须设置为ClockPolarity =0和ClockPhase =0。
要更新通道当前值:
DAC8775_writeToRegister (DAC8775_DAC_data, 1.9114万);//-10mA
DAC8775_writeToRegister (DAC8775_DAC_data, 4.6421万);//+10mA