1.LTC2664是一款DAC芯片,输出范围可调。
头文件定义寄存器
#define LTC2664_CMD_CODE_N 0x00 /* write code to n */
#define LTC2664_CMD_CODE_A 0x80 /* write conde to all */
#define LTC2664_CMD_SPAN_N 0x60 /* write span to n */
#define LTC2664_CMD_SPAN_A 0xE0 /* write span to all */
#define LTC2664_CMD_UPDT_N 0x10 /* Update n */
#define LTC2664_CMD_UPDT_A 0x90 /* update all */
#define LTC2664_CMD_CDUP_N 0x30 /* write code to n ,update n*/
#define LTC2664_CMD_CDUP_NA 0x20 /* write code to n ,update all */
#define LTC2664_CMD_CDUP_A 0xA0 /* write code to all ,update all*/
#define LTC2664_CMD_POWD_N 0x40 /* power down n*/
#define LTC2664_CMD_POWD_A 0x50 /* power down chip*/
#define LTC2664_CMD_ANAL_M 0xB0 /* analog mux*/
#define LTC2664_CMD_TOGL_S 0xC0 /* toggle select*/
#define LTC2664_CMD_TOGL_G 0xD0 /* globle toggle*/
#define LTC2664_CMD_CONFIG 0x70 /*config*/
#define LTC2664_CMD_NOOPTION 0xF0 /* no option*/
#define LTC2664_ADDR_0 0x00 /* DAC0*/
#define LTC2664_ADDR_1 0x01 /* DAC1*/
#define LTC2664_ADDR_2 0x02 /* DAC2*/
#define LTC2664_ADDR_3 0x03 /* DAC3*/
#define LTC2664_SPAN0_5 0x00 /* 0-5V*/
#define LTC2664_SPAN0_10 0x01 /* 0-10V*/
#define LTC2664_SPAN_5_5 0x02 /* -5-5V*/
#define LTC2664_SPAN_10_10 0x03 /* -10-10V*/
#define LTC2664_SPAN_2V5_2V5 0x04 /* -2.5-2.5V*/
#define LTC2664_SEND_BYTE(Byte) DrvSpiSendData(LTC2664_SPI,Byte)
初始化SPI接口Mode0模式
void ltc2664_Bsp_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;//最大16M 主频100M
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
DrvSpiInit(LTC2664_SPI,&SPI_InitStructure);
LTC2664_CS_INIT();
}
定义输出电压范围为-5V-5V
uint8_t InitLtc2664(void)
{
ltc2664_Bsp_Init();
DelayMs(10);
Ltc2664SetSpanN(LTC2664_ADDR_0,LTC2664_SPAN_5_5);
Ltc2664SetSpanN(LTC2664_ADDR_1,LTC2664_SPAN_5_5);
Ltc2664SetSpanN(LTC2664_ADDR_2,LTC2664_SPAN_5_5);
Ltc2664SetSpanN(LTC2664_ADDR_3,LTC2664_SPAN_5_5);
return True;
}
写寄存器函数
void LTC1664WriteRegValue(uint8_t cmd,uint8_t addr ,uint16_t value)
{
uint8_t i;
uint8_t un8WriteBuf[3];
LTC2664_CS_LOW();
un8WriteBuf[2] = (uint8_t)((value & 0x00FF) >> 0);
un8WriteBuf[1] = (uint8_t)((value & 0xFF00) >> 8);
un8WriteBuf[0] = cmd|addr;
for(i = 0; i < 3; i++)
{
LTC2664_SEND_BYTE(un8WriteBuf[i]);
}
LTC2664_CS_HIG();
}
配置并不更新通道函数
void Ltc2664SetCodeN(uint8_t chn,uint16_t value)
{
LTC1664WriteRegValue(LTC2664_CMD_CODE_N,chn,value);
}
配置并更新通道函数
void Ltc2664SetUpdtN(uint8_t chn,uint16_t value)
{
LTC1664WriteRegValue(LTC2664_CMD_UPDT_N,chn,value);
}