前面已经介绍过AD芯片CS1237,这里再介绍一款ADC芯片AD7683。AD7683是一款16bit ADC芯片,虽然位数比CS1237少,但速度比CS1237快,标称是100kSPS。供电电压为2.5~5.5V,封装有MSOP与QFN两种。通信接口也是串口,兼容SPI/QSPI/MICROWIRE。应用场景为:数据获取、仪器仪表、医药仪器、电池供电的设备等。这款ADC芯片也比较适合用51单片机系统。它的管脚图如下:
Pin 脚功能如下:
SPI的时序图如下:
相关时间参数如下:
现在来写他的驱动库函数。新建两个文件分别以ad683.h,ad683.c存入C51 Template文件夹下Library文件夹中。完成后的头文件如下:
/*ad7683.h
Designed by Bill Liu
Version 0.0
Modified last by Bill Liu on 12/12/2021
*/
#ifndef __AD7683_H__
#define __AD7683_H__
#include "mtype.h"
#include "delay.h"
#include "myport.h"//AD7863DCLK,AD7863CS,AD7863DOUT were defined
extern FSYSCLOCK FSCLK; //FSCLK was defined in main.h
/****************************************
Function: AD7683_InClk();
Return value: void
Discription: AD7683 input a clk
Example:
AD7683_InClk();
****************************************/
void AD7683_InClk();
/****************************************
Function: AD7683_GetResult();
Return value: ui16
Discription: get AD7683 adc result
Example:
ui16 tem = AD7683_GetResult();
****************************************/
ui16 AD7683_GetResult();
#endif
现在来完成源代码,在完成源代码之前,写注意这点:
完成后的源代码如下:
/*ad7683.c
Designed by Bill Liu
Version 0.0
Modified last by Bill Liu on 12/12/2021
*/
#include "ad7683.h"
void AD7683_InClk()
{
AD7863DCLK = 0;
Delayxus(1,FSCLK);
AD7863DCLK = 1;
Delayxus(1,FSCLK);
}
//End of AD7683_InClk()
ui16 AD7683_GetResult()
{
ui8 i = 0;
ui16 result = 0;
AD7863CS = 0;
Delayxus(1,8);
for(i = 0; i< 6; i++)
{
AD7683_InClk();
}
for(i = 0; i < 16; i++)
{
result = result << 1;
AD7683_InClk();
if(AD7863DOUT)
result++;
}
AD7863CS = 1;
AD7683_InClk();
AD7683_InClk();
return result;
}
//End of AD7683_GetResult()
以上演示代码及AD7683的datasheet已打包上传到CSDN,文件名为AD7683 Driver Code.rar,如需离线查看可去下载。