- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
带SPI接口的16位AD7705驱动程序
来源于 HYPERLINK 作者:tonghe
最近在做一个印度项目时,应用到16位AD转换器AD7705,此器件是AD公司推出的双通道16位∑-Δ(电荷平衡式)A/D转换器。具有高分辨率、宽动态范围、自校准,低功耗及优良的抗噪声性能,因此非常适用于仪表测量和工业控制等领域。16位无丢失代码;0.003%的非线性度;内部放大器可选择1,2,4,8,16,32,64,128;8种增益;输出数据更新速率可编程;具有自校准和系统校准功能,三线串行接口,可缓冲模拟输入;低功耗。经努力,目前已调通一个通道,现将驱动程序共享,愿起到抛砖引玉的作用。此程序在项目板上调试通过,而且测试精度极高,显示的电压值准确稳定。
#include iom16v.h#include macros.h#include delay.h#include ylkz_io.h#include FYD_12864_B.h#include AD7705.h
//数据类型的定义#define uchar unsigned char #define uint unsigned int#define spk_f 230
//全局变量定义uint vol;
/********************************* 器件端口初始化函数 *********************************/void port_init(void){PORTA = 0DDRA = 0PORTB = 0DDRB = 0 //输出PORTC = 0xFF;DDRC = 0 //输入PORTD = 0DDRD = 0}
/************************************** 蜂鸣器操作函数组 **************************************///无源蜂鸣器操作函数//入口:n响声次数,m响声时长1/10MSvoid 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_OFF;delay_ms(100);}SEI(); //开中断}
/***************************** 电压显示函数 ** 入 口:da 电压数据 *****************************/void dy_disp(uint da){uchar temp;locate(1,1);lcd(AD7705测试程序:);locate(2,2);lcd(一通道电压值);locate(3,3);temp=((da/1000)+0x30);wr_12864(1,temp);temp=(da%1000)/100+0x30;wr_12864(1,temp);temp=(da%100)/10+0x30;wr_12864(1,temp);temp=(da%10)+0x30;wr_12864(1,temp);lcd(mV);}
/************************************* 定时器1初始化函数 ** 功 能:定时读取AD7705数据 ** 定时时间:预分频64,定时500MS ** 实际定时:499.991mSec (0.0%) *************************************/void timer1_init(void){TCCR1B = 0x00; //停止定时器TCNT1H = 0x1F; //装初值TCNT1L = 0x01;TCCR1A = 0x00;// TCCR1B = 0x03; //启动定时器}/******************************* 定时器1中断函数 *******************************/#pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVFvoid timer1_ovf_isr(void){TCNT1H = 0x1F; //重装初值TCNT1L = 0x01;LED_TG
文档评论(0)