CCS中实时显示ADC采样波形

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

显示单个变量

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include Fileint 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 Fileint 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=25MHzEDIS;InitAdc();									//调用系统ADC初始化函数,开启ADC时钟,内部校准,延时5msAdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;	//ADCCLK = 25MHz /(2*1) = 12.5MAdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;		//ADC脉冲宽度 = (15+1)* ADCCLK周期 16个ADC clocksAdcRegs.ADCTRL1.bit.SEQ_CASC = 1;			//序列发生器工作在级联模式 SEQ为16通道AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0;		//输入通道1寄存器的CONV00转换通道选择为通道0AdcRegs.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_SEQ1return 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的任意波。
在这里插入图片描述
通过波形可以看出,虽然使用数组显示波形波直接使用变量显示波形效果要好很多,但是用数组显示的波形还是有点失真,不确定是采样的问题还是这个波形显示工具的问题。

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索NDVI:了解植被指数的意义与应用

随着科技的进步和遥感技术的发展,我们能够更深入地了解地球上的植被覆盖情况,而其中一项重要的工具就是NDVI(Normalized Difference Vegetation Index,归一化植被指数)。NDVI不仅仅是一个数值,更是一扇窥探…

利用遥感技术反演地表温度的方法与意义

​随着科技的不断进步,遥感技术在地球科学领域的应用变得越来越广泛。其中,利用遥感技术反演地表温度已经成为了一种常见的方法,对于环境监测、气候研究、城市规划等领域具有重要意义。 ​地表温度是指地表或地表以下一定深度范围内的温度&am…

C语言高质量编程之assert()和const

目录 编程中常见的错误 assert() const 编程中常见的错误 在编程中我们通常会遇到三种错误形式,分别是:编译型错误,链接型错误,运行时错误。 编译型错误: 在编译阶段发生的错误,绝大多数情况是由语法错误…

【OpenHarmony】TDD-FUZZ环境配置

零、参考 1、AttributeError: ‘ElementTree‘ object has no attribute ‘getiterator‘:https://blog.csdn.net/suhao0911/article/details/110950742 一、创建工作目录 1、新建工作目录如:D:\0000_TDD_FUZZ\0000_ohos_tdd_fuzz。 2、gitee上下载 t…

流氓软件清理绝杀全家桶

下载地址:流氓软件清理绝杀全家桶.zip 网上仍有不少软件中携带流氓软件,甚至某些所谓的大厂出品的工具中也会有一些捆绑! 对于玩机经验不太丰富的小白来说,也许一不小心,桌面就会被某些流氓软件搞得乌烟瘴气&#xf…

论文笔记:Teach LLMs to Phish: Stealing Private Information from Language Models

iclr 2024 reviewer 评分 588 1 intro 提出了一种“神经网络钓鱼攻击” 一种新的针对在敏感用户数据上训练或finetune的LLMs的攻击向量攻击者将看似无害的投毒数据插入到模型的训练数据集中,以“教会LLMs进行钓鱼”,即诱导模型记住他人的个人身份信息&…

阿里云优惠券如何领取(阿里云优惠券领取入口)

在云计算日益普及的今天,阿里云作为国内领先的云计算服务提供商,受到了众多企业和个人的青睐。为了回馈广大用户,阿里云经常推出各种优惠活动,其中就包括优惠券的发放。那么,阿里云优惠券如何领取呢?本文将…

Ubuntu-22.04安装KVM虚拟机并安装Windows10

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、KVM是什么?二、安装步骤1.检查虚拟化2.查看KVM虚拟化3.安装KVM4.启用后台进程5.添加用户组6.重启电脑 三、使用步骤1.添加虚拟机2.配置虚拟机3.…

Go语言入门|包、关键字和标识符

目录 Go语言 包文件 规则 关键字 规则 标识符 规则 预定义标识符 Go语言 Go语言是一种静态类型、编译型和并发型的编程语言,由Google开发。Go的源代码文件以.go为扩展名,文件名通常与包名保持一致。一个Go文件可以包含多个顶级声明,…

2024HW --> 安全产品 Powershell无文件落地攻击

在HW中,除了了解中间件,web漏洞,这些攻击的手法,还得了解应急响应,安全产品,入侵排查,溯源反制...... 那么今天,就来说一下安全产品(安全公司我就不说了,这个…

支持向量机模型

通过5个条件判定一件事情是否会发生,5个条件对这件事情是否发生的影响力不同,计算每个条件对这件事情发生的影响力多大,写一个支持向量机模型程序,最后打印5个条件分别的影响力。 示例一 为了计算每个条件对一件事情发生的影响力&#xff0c…

PostgreSQL入门到实战-第二十九弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(四)官网地址PostgreSQL概述PostgreSQL中CUBE命令理论PostgreSQL中CUBE命令实战更新计划 PostgreSQL中数据分组操作(四) 如何使用PostgreSQL CUBE生成多个分组集 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不…