ad7705 带SPI接口的16位AD7705驱动程序

最近在做一个印度项目的时候,应用到了AD转换器。该器件是AD公司推出的双通道16位σ-δ(电荷平衡)A/D转换器。它具有高分辨率、宽动态范围、自校准和优异的抗噪声性能,非常适用于仪器仪表等领域。16位无失码;0.003%非线性;内部放大器可以从1、2、4、8、16、32、64和128中选择;八种收获;输出数据更新率;具有自校准和系统校准功能,三线制,可缓冲模拟输入;低。通过努力,一个渠道已经转让,现在共享,希望能起到吸引有价值投资的作用。该程序已在项目板上调试通过,测试精度极高,显示的电压值准确稳定。
#include &lt。iom16v.h&gt。
#include &lt。macros.h&gt。
#包含“delay.h”
#包含“ylkz_io.h”
#包括“FYD__B.h”
#包括“AD7705.h”
//数据类型的定义
#定义uchar无符号字符
#定义uint无符号整数
#定义spk_f 230
//定义
uint vol
/********************************
*设备端口初始化功能*
********************************/
void port_init(void)
{
PORTA = 0b00001111
DDRA = 0b 00110000;
PORTB = 0b00011000
DDRB = 0b 00010111;//输出
PORTC = 0xFF
DDRC = 0b 11000000;//输入
PORTD = 0b00011100
DDRD = 0b 11010000;
}
/*************************************
*蜂鸣器操作功能组*
*************************************/
//被动蜂鸣器操作功能
//入口:n声次,m声时长1/10MS
void spk(uchar n,uint m)
{
uint a;
CLI();//暂停中断以免影响声音
for(;n;n -)
{
a =(m * 100/spk _ f)* 5;//计算周期数
for(;a .a -)
{;
SPK _ TG;
delay _ us(spk _ f);
SPK _ TG;
delay _ us(spk _ f);
}
SPK _关;
delay _ ms(100);
}
SEI();//开/关
}
/****************************
*电压显示功能*
*入口:da电压数据*
****************************/
void dy_disp(uint da)
{
uchar温度;
locate(1,1);
Lcd("AD7705测试程序:");
locate(2,2);
Lcd("一通道电压值");
定位(3,3);
temp =((da/1000)+0x 30);
wr_12864(1,temp);
temp =(da % 1000)/100+0x 30;
wr_12864(1,temp);
temp =(da % 100)/10+0x 30;
wr_12864(1,temp);
temp =(da % 10)+0x 30;
wr_12864(1,temp);
LCD(" mV ");
}
/************************************
*定时器1初始化功能*
*功能:定期读取AD7705的数据*
*计时时间:分频前64,计时500毫秒*
*实际计时:499.991秒(0.0%) *
************************************/
void timer1_init(void)
{
TCCR1B = 0x00//停止计时器
TCNT1H = 0x1F//安装初始值
TCNT1L = 0x01
TCCR1A = 0x00
//TCCR1B = 0x 03;//启动定时器
}
/******************************
*定时器1中断功能*
******************************/
# pragma _ handler timer 1 _ OVF _ ISR:iv _ timer 1 _ OVF
void timer1_ovf_isr(void)
{
TCNT1H = 0x1F//重新加载初始值
TCNT1L = 0x01
_ TG//工作指示灯闪烁
vol = ad 7705();
if(vol)
{
vol =(vol/131)* 5;//电压MV
dy _ disp(vol);
}
}
/******************************
*设备初始化功能*
******************************/
void init_devices(无效)
{
CLI();//首先关闭总中断
port _ init();
timer 1 _ init();
MCUCR = 0x00
GICR = 0x 00;
TIMSK = 0x04//打开中断源
SEI();//打开总中断
}
/******************************
*主要功能*
******************************/
void main(空)
{
init _ devices();
delay _ ms(10);
LCD 12864 _ init();
delay _ ms(50);
init _ 7705();

推荐阅读