CCS中实时显示ADC采样波形

  CCS软件中带有波形显示工具,在调试代码的过程中可以比较方便的将代码中待观测的变量直接用曲线的方式显示出来。
  下面就演示一下如何在CCS中使用波形显示。这里使用28335芯片,用一个简单的工程来测试。

显示单个变量

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

int i = 0;
void main() {

	InitSysCtrl();

	InitPieCtrl();
	IER = 0x0000;
	IFR = 0x0000;
	InitPieVectTable();

	while (1) {
			i++;
		if(i>=100)
			i=0;
	}
}

  直接在循环中对变了i进行累加,然后用图形显示i的值。直接点debug按钮进入调试界面。
在变量i上单击鼠标右键,选择将变量添加到观察窗口中。
在这里插入图片描述
然后运行程序,在观察窗口中将黄色箭头图标选中,这时候在观察窗口中就可以看到i的值一直在变化。

在这里插入图片描述
然后在变量i的显示值上面,单击右键选择 Graph
在这里插入图片描述
然后就会打开一个图形显示窗口,选中红色叉号前面的那个黄色箭头图标,开启实时刷新数据功能。
在这里插入图片描述
这时候就可以看到一个蓝色波形将变量i的值实时显示出来。

在这里插入图片描述
按照理论来说波形应该是从0到100,然后又到0的一个锯齿波,但是这里显示的波形比较乱。看不出来锯齿波。这是由于这个图形显示工具刷新的速度比较慢,而代码中i变化的速度又太快,导致i的值不能实时被刷新。
给代码添加一个延时语句,再看看波形。
在这里插入图片描述
添加了100ms的延时语句后,波形显示出来的就是正常的锯齿波了。
在这里插入图片描述
但是在时间应用中不可能每个变量的值都延时这么长时间,比如ADC采样的时候,就需要采样值实时变化,那么这个波形显示还能不能用?

显示数组

如果不延时要实时显示的话,在这里就需要增加一个数组来存储变量的值,然后显示的时候直接从数组中取值。修改代码如下

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

int i = 0;
int buf[100];
void main() {

	InitSysCtrl();

	InitPieCtrl();
	IER = 0x0000;
	IFR = 0x0000;
	InitPieVectTable();

	while (1) {

			buf[i++]=i;
		if(i>=100)
			i=0;
	}
}

编译运行代码,进入调试界面后再工具栏选择 Tool — Graph — Single Time
在这里插入图片描述
然后再打开的界面中进行设置
在这里插入图片描述

设置完成之后,点击OK按钮。此时界面上就多了一个图形显示窗口。
在这里插入图片描述
在这个窗口的标题栏上按住鼠标左键,然后拖动窗口,调整窗口的显示位置。
在这里插入图片描述
然后将实时显示的选项选中,全速运行程序。这时候就可以同时看到变量直接用变量i绘制的曲线和数组绘制的曲线。

在这里插入图片描述
通过两个曲线的对比可以明显看出,用数组打印的曲线比较接近实际的曲线,直接打印变量的曲线没有多大的参考价值。

打印ADC采样曲线

通过上面的测试可以看出,要实时显示曲线必须要使用数组这种方式,下面将ADC采样的代码添加进来。
adc代码如下

#include "adc.h"

void ADC_Init(void)
{
	EALLOW;
	SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;		//使能ADC时钟
	EDIS;

	EALLOW;
	SysCtrlRegs.HISPCP.all = ADC_MODCLK;			//高速外设时钟HSPCLK 分频系数 2*3=6分频 150MHz/6=25MHz
	EDIS;

	InitAdc();									//调用系统ADC初始化函数,开启ADC时钟,内部校准,延时5ms

	AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;	//ADCCLK = 25MHz /(2*1) = 12.5M
	AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;		//ADC脉冲宽度 = (15+1)* ADCCLK周期 16个ADC clocks
	AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;			//序列发生器工作在级联模式 SEQ为16通道
	AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0;		//输入通道1寄存器的CONV00转换通道选择为通道0
	AdcRegs.ADCTRL1.bit.CONT_RUN = 1;			//连续运行模式
	AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0;		//一个序列内完成最大转换次数为0+1次

	//回绕意思是0通过转换完成后,下一个结果依然存到0通道
	//覆盖意思是0通过转换完成后,下一个结果存到1通道,依次递增存储,直到15通道之后,才返回0通道继续存储。
	AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;			//0转换完成后回绕   1 转换完成后覆盖,只有在末端发生回绕

	AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;			//启动SEQ1序列转换
}

Uint16 Read_AdcValue(void)
{
	while (AdcRegs.ADCST.bit.INT_SEQ1 == 0)
		;										//如果SEQ1中断事件为0 就一直等待
	AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;			//清除SEQ1中断标志INT_SEQ1

	return AdcRegs.ADCRESULT0 >> 4;				//返回通道0 转换结果值
}

主程序代码

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

#include "adc.h"

float value = 0.0;
int i;
float buf[100];
void main() {

	InitSysCtrl();

	InitPieCtrl();
	IER = 0x0000;
	IFR = 0x0000;
	InitPieVectTable();

	ADC_Init();

	while (1) {

		value = (float)Read_AdcValue()*3.0/4096;
		buf[i++] = value;
		if (i >= 100)
			i = 0;
	}
}

按照上面的方法将采样值value,和数组buf都添加到波形显示窗口中。使用函数发生器给AD口给一个20Hz,2V的方波。
在这里插入图片描述
20Hz,2V的三角波。
在这里插入图片描述
50Hz,2V的正弦波。
在这里插入图片描述
50Hz,2V的任意波。
在这里插入图片描述
通过波形可以看出,虽然使用数组显示波形波直接使用变量显示波形效果要好很多,但是用数组显示的波形还是有点失真,不确定是采样的问题还是这个波形显示工具的问题。

虽然这个波形显示比起示波器还差点,但是在调试代码的时候有个参考还是不错的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542295.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

element-ui中el-radio-group组件绑定点击事件触发多次的解决办法

1、需求 电商首页需求,需要做个单选框,然后点击选中切换图标方向及更换价格升倒序,如下图: 从官网文档看,单选框支持change event,使用click加载按钮处不会触发选中 但是使用 click.native 事件不做处理…

【JVM】面试题汇总

JVM1. 什么是JVM?2. 了解过字节码文件的组成吗?3. 什么是运行时数据区4. 哪些区域会出现内存溢出5. JVM在JDK6-8之间在内存区域上有什么不同 6. 类的生命周期 7. 什么是类加载器?类加载器有哪几种 8. 什么是双亲委派机制?有什么好…

React脚手架的搭建与使用

React脚手架是开发现代Web应用的必备,其充分利用Webpack、Babel、ESlint等工具辅助项目的开发,当然这些工具也无需手动配置即可使用,脚手架的意义更多的是关注的是业务而不是工具的配置;项目的整体技术架构为:react w…

OJ在线编程常见输入输出练习

文章目录 整型输入输出12345 字符串类型输入输出123 整型输入输出 1 #include <stdio.h>int main() {int a, b;while (scanf("%d %d", &a, &b) ! EOF) { if(a0 && b0)break;printf("%d\n", a b);}return 0; }2 #include <stdio…

服装连锁管理系统如何拓展会员?

在服装连锁店的经营管理中&#xff0c;会员制度是提升客户忠诚度、促进销售增长的重要手段之一。拓展会员对于连锁店来说至关重要&#xff0c;可以通过多种方式来吸引新会员并提升会员的活跃度。本文将探讨如何通过拓展会员来提升服装连锁店的经营效益&#xff0c;并提出四点建…

CSS 实现无限波浪边框卡片

CSS 实现无限波浪边框卡片 效果展示 鼠标悬停效果&#xff0c;底部色块的边框是无限滚动的波浪 鼠标没有悬停效果 CSS 知识点 CSS 基础知识回顾使用 radial-gradient 实现波浪边框使用 anumate 属性实现波浪边框动画和控制动画运动 波浪实现原理 波浪边框的实现思路其…

Axure RP中的相关概念及高保真原型构建方法

1 Axure RP中概念介绍 对于构建高保真原型来说&#xff0c;需要知道事件&#xff08;Event&#xff09;、Case、Action等概念。Axure RP中给出这些概念&#xff0c;是为了方便原型的构建&#xff0c;尤其是高保真原型的构建。 事件&#xff08;Event&#xff09;是附着于控件…

如何下载pycharm历史版本

地址&#xff1a;https://www.jetbrains.com/pycharm/download/other.html

GitHub repository - Pulse - Contributors - Network

GitHub repository - Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津&#xff0c;还是在火热地开发之中&#xff0c;从这里可以一目了然。 2. Contributors 显示对该仓库进行过…

蓝桥杯备赛:考前注意事项

考前注意事项 1、DevCpp添加c11支持 点击 工具 - 编译选项 中添加&#xff1a; -stdc112、万能头文件 #include <bits/stdc.h>万能头文件的缺陷&#xff1a;y1 变量 在<cmath>中用过了y1变量。 #include <bits/stdc.h> using namespace std;// 错误示例 …

基于java+springboot+vue实现的智能停车计费系统(文末源码+Lw+ppt)23-30

摘 要 随着人们生活水平的高速发展&#xff0c;智能停车计费信息管理方面在近年来呈直线上升&#xff0c;人们也了解到智能停车计费的实用性&#xff0c;因此智能停车计费的管理也逐年递增&#xff0c;智能停车计费信息的增加加大了在管理上的工作难度。为了能更好的维护智能…

智慧农业引领乡村全面振兴:数字乡村建设推动农业现代化、农村治理现代化与农民生活品质新提升

文章摘要&#xff1a; 随着信息技术的迅猛发展&#xff0c;智慧农业正成为引领乡村全面振兴的重要力量。数字乡村建设以智慧农业为核心&#xff0c;推动农业现代化、农村治理现代化和农民生活品质新提升。本文将从智慧农业的内涵出发&#xff0c;探讨数字乡村建设如何推动农业现…

机器学习周报第37周

目录 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection1.1 摘要1.2 背景1.3 论文模型1.4 网络设计1.5 YOLO的局限性1.6 实现代码 一、文献阅读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection 1.1 摘要 YOLO是一种新…

3D Showroom Level Kit Vol 1

3D Showroom Level Kit Vol 1是一个预制PBR模块化套件,可帮助您创建任何大小、类型的展厅/关卡! 你想推广新产品吗?制作严肃游戏?展示你的艺术?照片?VR应用程序?你需要这个。。。 该工具包非常易于使用和定制!更改颜色和道具位置。 使用移动设备和VR设备,低多边形建…

Mapmost Alpha:开启三维城市场景创作新纪元

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【leetcode面试经典150题】49. 合并区间(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

Linux 硬链接和软链接怎么区分使用?

一、什么是硬链接和软链接 硬链接 在Linux操作系统中&#xff0c;硬链接相当于存储在硬盘驱动器中的文件&#xff0c;它实际上引用或指向硬盘驱动器上的某个点。硬链接是原始文件的镜像副本。 硬链接与软链接的区别在于&#xff0c;删除原始文件不会影响硬链接&#xff0c;但…

乐趣Python——办公魔法:Word文件自动化

嘿&#xff0c;朋友们&#xff01;在这个办公小课堂中&#xff0c;我将为大家揭开一个神奇的秘密&#xff1a;Word文件自动化处理&#xff01; 通过这种魔法般的方式&#xff0c;我们可以大大提高办公效率&#xff0c;减少重复性工作。而Python作为我们的助手&#xff0c;将展现…

AI大赏-一些关键词的出图效果展示

AI绘画 AI 绘画是利用人工智能技术来生成、转换或增强数字图像和艺术作品的过程。这种技术可应用于各种领域&#xff0c;包括数字媒体、游戏开发、电影制作、设计、视觉艺术等。 具体领域有图像生成、图像转换、图像增强、艺术创作&#xff0c;受影响比较到的是数字媒体&…

【嵌入式基础知识学习】AD/DA—数模/模数转换

AD/DA—数模/模数转换概念 数字电路只能处理二进制数字信号&#xff0c;而声音、温度、速度和光线等都是模拟量&#xff0c;利用相应的传感器&#xff08;如声音用话筒&#xff09;可以将它们转换成模拟信号&#xff0c;然后由A/D转换器将它们转换成二进制数字信号&#xff0c…