LV.12 D19 ADC实验 学习笔记

news2024/10/5 21:19:55

一、ADC简介

1.1 ADC    

        ADC(Analog to Digital Converter)即模数转换器,指一个能将模拟信号转化为数字信号的电子元件

1.2 ADC主要参数

分辨率    

        ADC的分辨率一般以输出二进制数的位数来表示,当最大输入电压一定时,位数越高,分辨率越高; n位的ADC能区分输入电压的最小值为满量程输入的1/2^n; 比如一个12位的ADC,最大输入电压为1.8v,那么该ADC能区分的最小电压为1.8v/2^12≈0.00044v,当转换的结果为m时,则 实际的电压值为m*(1.8v/2^12);

二、 Exynos4412下的ADC控制器

 

这4个引脚是ADC专用引脚。(本次实验实验XadcAIN3)

可选10位精度或者12位精度,有四个通道,最大转换速度1M s是采样 ps是秒,采样频率是1M/s。

他有一个前提ADC时钟是5MHz。每五个时钟采样一次。支持采样保持功能和低功耗模式

模拟输入范围是0-1.8V

PCLK是时钟源,是100M的,这里拿66M举例,当分频是65时,分频后的时钟频率就是1MHz

因为他五个周期采样一次,1MHz在除以5是ADC的转换频率,所以转换速度就是200kHz,频率的倒数就是转换周期,也就是5us。

但是注意,时钟频率不能超过5M,因为他的极限转换速度是1M。

三、ADC寄存器

控制寄存器、延迟寄存器、数据寄存器、中断功能寄存器、选择通道寄存器

RES: 设置精度是10位或12位

ECFLG:这个写的有问题,它是只读的位,如果转换完成则会自动置1,否则是0.

PRSCEN: 写1打开分频器,写0关闭分频器

PRSCVL:设置寄存器的分频倍数。如果你往这个区域写了个N,实际的分频倍数则是N+1。ADC的最大转换速度是1MHz,所以时钟频率不能超过5MHz,所以N一定要设置在19-255之间。

STANDBY: 1待机模式(低功耗模式),0正常模式

READ_START: ADC转化的数据会放入一个寄存器,读走数据就会自动进行下次转化,不读就停止转化。写1开启此模式,写0关闭

ENABLE_START:写1开始转换,然后自动变成0。如果开启READ_START模式,则此模式自动失效。

ADCADT寄存器:用于存储转化结果,只用[11:0]位,读的时候要将高20位清零,不然随机结果可能会影响结果。

ADCMUX寄存器:用于选择转换的通道。由于ADC只有一个,而我们有四个引脚支持ADC功能,所以采取分时复用模式,同一时间只有一个通道可以转化。(本次实验实验AIN3)

步骤:对ADCCON寄存器进行设置,然后选择转换的通道,然后设置ADCCON的[0]位开始转换,ADCCON的[15]位变成1,然后区ADCDAT寄存器读取转换结果。

四、ADC编程

#include "exynos_4412.h"

int main()
{
	unsigned int AdcValue;

	/*将ADC的精度设置为12bit*/
	ADCCON = ADCCON | (1 << 16);
	/*使能ADC的分频器*/
	ADCCON = ADCCON | (1 << 14);
	/*设置ADC的分频 ADC时钟频率=PLCK/(19+1)=5MHz,ADC的转换频率=5MHz/5=1MHz*/
	ADCCON = ADCCON & (~(0xFF << 6)) | (19 << 6);
	/*关闭待机模式,使能正常模式*/
	ADCCON = ADCCON & (~(1 << 2));
	/*关闭通过读使能AD转换*/
	ADCCON = ADCCON & (~(1 << 1));
	/*选择转换通道 3通道*/
	ADCMUX = 3;

	while(1)
	{
		/*开始转换*/
		ADCCON = ADCCON | 1;
		/*等待转换完成*/
		while(!(ADCCON & (1 << 15)));
		/*读取转换结果*/
		AdcValue = ADCDAT & 0xFFF;
		/*将结果转换成实际的电压值 =AdcValue*(1800/4096) mv*/
		AdcValue =AdcValue * 0.44;
		/*打印转换结果*/
		printf("AdcValue = %dmv\n", AdcValue);
	}

	return 0;
}

五、作业

1.编程实现通过LED状态显示当前电压范围

注:

电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮
电压在1001mv~1500mv时,LED2、LED3、LED4点亮
电压在501mv~1000mv时,LED2、LED3点亮
电压在0mv~500mv时,LED2闪烁

#include "exynos_4412.h"

void Delay(unsigned int Time)
{
	while(Time--);
}

int main()
{
	unsigned int AdcValue;

	/*将ADC的精度设置为12bit*/
	ADCCON = ADCCON | (1 << 16);
	/*使能ADC的分频器*/
	ADCCON = ADCCON | (1 << 14);
	/*设置ADC的分频 ADC时钟频率=PLCK/(19+1)=5MHz,ADC的转换频率=5MHz/5=1MHz*/
	ADCCON = ADCCON & (~(0xFF << 6)) | (19 << 6);
	/*关闭待机模式,使能正常模式*/
	ADCCON = ADCCON & (~(1 << 2));
	/*关闭通过读使能AD转换*/
	ADCCON = ADCCON & (~(1 << 1));
	/*选择转换通道 3通道*/
	ADCMUX = 3;
	
	/*LED2*/
	GPX2.CON = GPX2.CON | (0x1 << 28);
	/*LED3*/
	GPX1.CON = GPX1.CON | 0x1;
	/*LED4*/
	GPF3.CON = GPF3.CON | (0x1 << 16);
	/*LED5*/
	GPF3.CON = GPF3.CON | (0x1 << 20);

	while(1)
	{
		/*开始转换*/
		ADCCON = ADCCON | 1;
		/*等待转换完成*/
		while(!(ADCCON & (1 << 15)));
		/*读取转换结果*/
		AdcValue = ADCDAT & 0xFFF;
		/*将结果转换成实际的电压值 =AdcValue*(1800/4096) mv*/
		AdcValue =AdcValue * 0.44;
		/*打印转换结果*/
		printf("AdcValue = %dmv\n", AdcValue);

		if(AdcValue > 1501)
		{
			GPX2.DAT = GPX2.DAT | (1 << 7);
			GPX1.DAT = GPX1.DAT | 1;
			GPF3.DAT = GPF3.DAT | (1 << 4);
			GPF3.DAT = GPF3.DAT | (1 << 5);
		}
		else if(AdcValue > 1001)
		{
			GPX2.DAT = GPX2.DAT | (1 << 7);
			GPX1.DAT = GPX1.DAT | 1;
			GPF3.DAT = GPF3.DAT | (1 << 4);
		}
		else if(AdcValue > 501)
		{
			GPX2.DAT = GPX2.DAT | (1 << 7);
			GPX1.DAT = GPX1.DAT | 1;
		}
		else
		{
			GPX2.DAT = GPX2.DAT | (1 << 7);
			Delay(1000000);
			GPX2.DAT = GPX2.DAT & (~(1 << 7));
		}
	}

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基础之中常用的数据类型总结,从入门到入土的python教程之一。

文章目录 Python 中常用的数据类型包括&#xff1a;Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典&#xff08;Dictionary&#xff09;Python中的集合&#xff08;Set&#xff09;Python中的…

静态web服务器开发之HTTP协议

文章目录 版权声明HTTP协议网址HTTPS补充&#xff1a;HTTP的无状态特性浏览器访问Web服务器流程HTTP协议请求报文HTTP GET请求报文分析POST请求方式要点总结 HTTP协议响应报文HTTP 响应报文分析HTTP 状态码要点总结 HTTP协议通信过程查看 版权声明 本博客的内容基于我个人学习…

基于uniapp的 电子书小程序——需求整理

前言 想开发一个很简单的 电子书阅读小程序&#xff0c;要怎么做的。下面从功能、数据库设计这一块来说一下。说不一定能从某个角度提供一些思路 开发语言 springcloud uniapp 小程序&#xff08;vue2&#xff09;mysql 说明 电子书的主题是电子书&#xff0c;我们在日常…

运行软件报错找不到vcruntime140.dll无法继续执行代码怎么办-6个解决方法

vcruntime140.dll是一个由Microsoft Visual C提供的运行时库文件&#xff0c;它为许多Microsoft Visual Studio开发的应用程序提供了必要的支持。这个文件对于许多Windows应用程序的正常运行至关重要。然而&#xff0c;有时会出现vcruntime140.dll缺失的问题&#xff0c;导致应…

“继续教育”招生报名网存在支付漏洞

1.找到该网站的一个登录页面&#xff0c;注册好账户密码登录进去 2&#xff0c;进去之后&#xff0c;找到一个网上缴费功能 3.选择338元的套餐&#xff0c;支付方式我选的支付宝用burp抓包 发现money0参数与金额有关&#xff0c;于是就尝试把monet0改成一看看能不能搞一个零元购…

超级应用平台(HAP)起航

各位明道云用户和伙伴&#xff0c; 今天&#xff0c;我们正式发布明道云10.0版本。从这个版本开始&#xff0c;我们将产品名称正式命名为超级应用平台&#xff08;Hyper Application Platform, 简称HAP&#xff09;。我们用“超级”二字表达产品在综合能力方面的突破&#xff…

Java特殊文件

Properties 读取数据 package com.itheima.d1;import java.io.FileNotFoundException; import java.io.FileReader; import java.nio.charset.StandardCharsets; import java.util.Properties; import java.util.Set;public class Test1 {public static void main(String[] arg…

免费时代结束:百度云加速取消所有免费套餐

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 在网站时代&#xff0c;凭借着“品牌”“SEO”“免费”的优势&#xff0c;百度云加速一跃成为国内最大的CDN服务商。但随着站长时代结束&#xff0c;和网站相关的产品越来越少&#xff0c;收费的名…

【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

近日小编在使用最新版GPT-4-Turbo模型&#xff08;主要特点是支持128k输入和知识库截止日期是2023年4月&#xff09;时&#xff0c;发现不同商家提供的模型回复出现不一致的情况&#xff0c;尤其是模型均承认自己知识库达到2023年4月&#xff0c;但当我们细问时&#xff0c;Fak…

系统安全测试要怎么做?

进行系统安全测试时&#xff0c;可以按照以下详细的步骤进行&#xff1a; 1、信息收集和分析&#xff1a; 收集系统的相关信息&#xff0c;包括架构、部署环境、使用的框架和技术等。 分析系统的安全需求、威胁模型和安全策略等文档。 2、威胁建模和风险评估&#xff1a; …

野指针详解

1.定义 概念&#xff1a; 野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#xff09;。 2.野指针成因 A.指针未初始化 #include <stdio.h> int main() { int *p;//局部变量指针未初始化&#xff0c;默认为随机值*p 20;return 0;…

GitHub Copilot:做出一个划时代的产品,只需要 6 个人

当前&#xff0c;Copilot 已经成为国内开发者常用的辅助工具。就像有的开发者评价称&#xff0c; “编码时&#xff0c;我希望干扰最少。在这方面&#xff0c;Copilot 给我提供了巨大的帮助。它减少了我可能花在网络上寻找解决方案的时间&#xff0c;而且它们在我最喜欢的 IDE …

C#学习相关系列之base和this的常用方法

一、base的用法 Base的用法使用场景主要可以概括为两种&#xff1a; 1 、访问基类方法 2、 调用基类构造函数 使用要求&#xff1a;仅允许用于访问基类的构造函数、实例方法或实例属性访问器。从静态方法中使用 base 关键字是错误的。所访问的基类是类声明中指定的基类。 例如&…

Latex 基本操作

好久没写博客了&#xff0c;最近一直在写毕业论文&#xff0c;不过对 Latex 的使用进一步了解&#xff0c;这里整理下来方便小伙伴们学习和参考。可以在 Gituhub 上找自己学校的模板&#xff0c;通常我们都是在找到的模板上进行写作&#xff0c;只需要掌握一下基本操作&#xf…

生物动力葡萄酒和有机葡萄酒一样吗?

农业维持了数十万年的文明&#xff0c;但当人类以错误的方式过多干预&#xff0c;过于专注于制造和操纵产品时&#xff0c;农业往往会失败。如果我们的目标是获得最高质量的收成&#xff0c;并长期坚持我们的做法&#xff0c;我们就必须与土地打交道。 当我们开始寻找生物动力…

Java Web——XML

1. XML概述 XML是EXtensible Markup Language的缩写&#xff0c;翻译过来就是可扩展标记语言。XML是一种用于存储和传输数据的语言&#xff0c;它使用标签来标记数据&#xff0c;以便于计算机处理和我们人来阅读。 “可扩展”三个字表明XML可以根据需要进行扩展和定制。这意味…

红队攻防实战之从边界突破到漫游内网(无cs和msf)

也许有一天我们再相逢&#xff0c;睁大眼睛看清楚&#xff0c;我才是英雄。 本文首发于先知社区&#xff0c;原创作者即是本人 本篇文章目录 网络拓扑图&#xff1a; 本次红队攻防实战所需绘制的拓扑图如下&#xff1a; 边界突破 访问网站&#xff1a; http://xxx.xxx.xxx…

Java之异常(下):自定义异常类

一、前言&#xff1a; 在我前面写的博客文章里有一篇叫《Java中关于自定义异常类的一些问题》&#xff0c;它里面讲到了大部分关于自定义异常的基础知识&#xff0c;如果大家想了解底层可以去那里查看。今天我将用一次细节的案例解析&#xff1a;我们所说的自定义异常类。 二、…

【学习篇】Linux中grep、sed、awk

Linux 文本处理三剑客 – awk, sed, grep grep过滤文本 https://zhuanlan.zhihu.com/p/561445240 grep 是 Linux/Unix 系统中的一个命令行工具&#xff0c;用于从文件中搜索文本或字符串。grep 代表全局正则表达式打印。当我们使用指定字符串运行 grep 命令时&#xff0c;如…

VMware安装windows操作系统

一、下载镜像包 地址&#xff1a;镜像包地址。 找到需要的版本下载镜像包。 二、安装 打开VMware新建虚拟机&#xff0c;选择用镜像文件。将下载的镜像包加载进去即可。