LTC1658是一款14bit轨到轨DAC芯片。可选用3V或5V供电,采用3线串口通信(兼容SPI与MICROWIRE),其应用场景为数字校准、工业控制、自动测试设备等。它采用SOP8封装,Pin脚定义如下:
串口通信的时序图,及操作说明如下:
这款DAC芯片不存在多种操作模式,主要就是输入数据,并使输入数据生效(即按输入数据输出转换电压)。因而其驱动库函数十分简单,下面就来写库函数。新建两个文件,分别以LTC1658.h,.LTC1658.c存入存入C51 Template文件夹下Library文件夹中。完成后的头文件如下:
/*ltc1658.h
Designed by Bill Liu
Version 0.0
Modified last by Bill Liu on 12/11/2021
*/
#ifndef __LTC1658_H__
#define __LTC1658_H__
#include "myport.h" //defined ltc1658DIN,ltc1658CS,ltc1658CLK
#include "mtype.h"
#include "delay.h"
extern FSYSCLOCK FSCLK; //FSCLK was defined in main.h
/**********************************************************************
Function: LTC1658_InClk();
Return value: void
Discription: input a clk to LTC1658
Example:
LTC1658_InClk();
**********************************************************************/
void LTC1658_InClk();
/**********************************************************************
Function: LTC1658_DacOutput(ui16 mData);
Return value: void
Discription: let LTC1658 output mData's dac voltage
Example:
LTC1658_DacOutput(1024);
**********************************************************************/
void LTC1658_DacOutput(ui16 mData);
#endif
完成后的源文件如下:
/*ltc1658.c
Designed by Bill Liu
Version 0.0
Modified last by Bill Liu on 12/11/2021
*/
#include "ltc1658.h"
//***********************************************************
void LTC1658_InClk()
{
ltc1658CLK = 1;
Delayxus(1,8);
ltc1658CLK = 0;
Delayxus(1,8);
}
//End of LTC1658_InClk()
//************************************************************
void LTC1658_DacOutput(ui16 mData)
{
ui8 i;
ltc1658CS = 0;
ltc1658CLK = 0;
Delayxus(1,8);
for(i = 0; i < 16; i++)
{
mData <<= 1;
if(CY)
ltc1658DIN = 1;
else
ltc1658DIN = 0;
Delayxus(1,8);
LTC1658_InClk();
}
ltc1658CS = 1;
ltc1658CLK = 1;
}
//End of LTC1658_DacOutput(ui16 mData)
以上代码及LTC1658 Datasheet 已上传到CSDN,文件名为LTC 1658 Diver Code & Datasheet.rar。如需离线查看可搜索下载。