当前位置: 首页 > news >正文

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

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通道模拟量采集系统设计,经过试验证明,该采集系统不仅减少仪表设计调试时间,而且结合测量仪器可以构建灵活的测量系统,节约仪器购置成本,提高工作效率。

相关文章:

  • 【设计模式】【第一章】【支付场景】【策略模式 + 工厂模式 + 门面模式 + 单例模式】
  • SpringCloud笔记(三)微服务应用
  • 翻金币项目 QT项目 (利用Qt 5.80 实现 )
  • Java项目:JSP员工出差请假考勤管理系统
  • OP-TEE driver(三):OP-TEE驱动中的数据结构体
  • 人工智能轨道交通行业周刊-第15期(2022.9.19-9.25)
  • python process模块的使用简介
  • 回调函数等作业
  • 不要再盯着大厂了,这16家中小厂我建议你也试试
  • Linux-常见命令(一)
  • 什么是C语言?
  • 封装——C++
  • 【Java高级】框架底层基础:Java的反射机制剖析
  • verilog移位寄存器实现序列检测
  • 前端性能优化方法与实战02 性能瓶颈点:从 URL 输入到页面加载整过程分析
  • 网络传输文件的问题
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java编程基础24——递归练习
  • Java教程_软件开发基础
  • MySQL主从复制读写分离及奇怪的问题
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • React-Native - 收藏集 - 掘金
  • Vim 折腾记
  • VUE es6技巧写法(持续更新中~~~)
  • Web标准制定过程
  • 阿里云应用高可用服务公测发布
  • 从零开始的无人驾驶 1
  • 近期前端发展计划
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 探索 JS 中的模块化
  • 物联网链路协议
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 你对linux中grep命令知道多少?
  • 仓管云——企业云erp功能有哪些?
  • #QT(一种朴素的计算器实现方法)
  • (C语言)球球大作战
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (算法)前K大的和
  • (一)插入排序
  • (转)http协议
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)shell调试方法
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .gitattributes 文件
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 表达式计算:Expression Evaluator
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET构架之我见