基于AD7705的32路信号采集软件设计

61 篇文章 10 订阅
20 篇文章 2 订阅

CSDN话题挑战赛第2期
参赛话题:学习笔记

软件设计

软件设计包括3个子模块:SPI初始化模块、AD7705驱动模块、定时器模块。工作过程:首先通过ATmega16的SPI接口驱动AD7705,完成AD7705通道设置、时钟设置、更新速率以及校准模式等,然后启动ATmega16的定时器,在定时器中断函数中查询AD7705的状态,如转换完成则读取转换结果,否则继续等待直到转换完成,如此不断读出所需的转换结果。程序流程如图5所示。

程序流程框图

5
程序流程框图

SPI初始化模块

对ATmega16的SPI接口进行配置:

void spi_init(void)

{

DDRB|=(1<

DDRB&=~(1<

PORTB|=(1<

SPCR=(1<

}

AD7705驱动模块

该模块程序完成对AD7705的配置任务,需要注意的是读写寄存器之前必须先选择要操作的寄存器。

向AD7705写入1字节函数,入口参数data为需写入的字节数据:

void wr_7705( unsigned char data)

{

SPDR = data; / /启动数据传输

while ( ! ( SPSR & ( 1 < < SPIF) ) ) / /等待传输

结束;

}

读出AD7705 数据函数,返回值为读出的2字节数据:

unsigned int rd_7705( void)

{

unsigned int temp; / /定义临时变量

wr_7705( 0x38) ; / /选择读数据寄存器,1 通道

SPDR = 1; / /启动数据传输

while ( ! ( SPSR & ( 1 < < SPIF) ) ) / /等待传输结

{

;

}

temp = SPDR < < 8; / /读取高字节

SPDR = 1; / /启动数据传输

while ( ! ( SPSR & ( 1 < < SPIF) ) ) / /等待传输结束

{

;

}

temp|=SPDR;//读取低字节

return(temp);

}

AD7705初始化函数:

void init_7705(void)

{

wr_7705(0x20);//选择时钟寄存器,下一操作是写

wr_7705(0x00);//20Hz的更新速率

wr_7705(0x10);//选择设置寄存器,下一操作是写

wr_7705(0x44);//自校准模式,增益为1,单极性

}

定时器模块

利用定时器1按一定的时间间隔读取AD7705的转换结果。读取数据之前必须确定数据寄存器的状态,有两种不同的方式:第1种是查询DRDY引脚,如果处于低电平,表示已经转换完成,可以读取;第2种是查询通信寄存器中的DRDY位,如果是0表示可以读取数据:

定时器1初始化函数:
在这里插入图片描述

定时器1溢出中断函数:
在这里插入图片描述

结语

本文总结了基于AD7705的32通道模拟量采集系统设计,经过试验证明,该采集系统不仅减少仪表设计调试时间,而且结合测量仪器可以构建灵活的测量系统,节约仪器购置成本,提高工作效率。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Robot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值