ADC模数转换

ADC概念

使用麦克风时,我们的声音转化为电信号后,再通过ADC转换为数字信号,用于数字音频处理或传输。ADC(模数转换器)是一种电子设备,用于将模拟信号转换为数字信号

  • 模拟信号:连续变化的信号,其值可以在一定范围内任意变化。
  • 数字信号:离散的信号,只能取有限个数值,以二进制形式(0/1)表示。

51 单片机系统内部运算时用的全部是数字量,即 0 和 1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。
用数字量表示同一个模拟量时,数字位数可以多也可以少,位数越多则表示的精度越高,位数越少表示的精度就越低。

ADC转换原理

AD 转换器(ADC)将模拟量转换为数字量通常要经过 4 个步骤

  • 采样

ADC首先对模拟信号进行采样。采样过程是按照一定的时间间隔(采样周期)对连续的模拟信号进行取样。采样频率决定了每秒钟取得的样本数量,频率越高,表示对模拟信号的精细程度越高

采样时需要遵循采样定理,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的2.56~4倍

  • 保持

将采样结果存储起来,直到下次采样,这个过程叫做保持。一旦采样保持电路捕获了模拟信号的值,它会在一段时间内保持这个值稳定,直到完成ADC的量化和编码。

Q:为什么需要保持电路?

在ADC转换过程中,模拟信号是连续变化的,如果不使用采样保持电路,直接将模拟信号输入到ADC的量化器中,可能会因为模拟信号在采样期间的变化而导致转换误差。采样保持电路能够“冻结”模拟信号的值,使得ADC能够准确地转换那个时刻的信号强度,而不受后续模拟信号变化的影响
这样做的目的防止因为模拟信号在采样过程中的变化而导致的误差或失真。

  • 量化
    量化是将连续变化模拟信号转换为离散的数字值的过程。这个过程决定了ADC的分辨率和精度

关键概念和过程

1)分辨率(Resolution):ADC的分辨率通常以位数(比如8位、12位、16位等)表示,它决定了ADC可以输出的数字级别的数量,从而决定了数字化过程中的精确度。

2) 量化级别(Quantization Levels):分辨率越高,量化级别就越多,模拟信号被分成的离散量化级别也就越精细。例如,一个8位ADC可以将模拟信号分成256个级别(28),而一个12位ADC可以分成4096个级别(212)。

3)量化误差(Quantization Error):量化过程中,由于将连续的模拟信号离散化,总会产生一定的误差。这个误差可以通过量化器的设计和分辨率来控制,通常表现为实际输出值与理论模拟信号值之间的差异。

  • 编码
    编码是将量化后的数字信号表示为二进制数的过程。每个量化级别都对应一个特定的二进制代码,这些代码构成了ADC输出的数字数据。

关键概念和过程

编码方式:常见的编码方式包括补码编码(Two’s Complement)、二进制编码、格雷码(Gray Code)等。编码方式的选择取决于应用的要求和ADC的设计。

输出数据:编码后的二进制数据通常以并行串行的方式输出,以便后续的数字系统可以进一步处理或存储。

将采样电平(模拟值)转换为数字值(0或1),主要有两类方法:直接比较型间接比较型

  • 直接比较型:将输入模拟信号直接与标准的参考电压比较,从而得到
    数字量。常见的有并行 ADC 和逐次比较型 ADC。
  • 间接比较型:输入模拟量不是直接与参考电压比较,而是将二者变为中间的某种物理量在进行比较,然后将比较所得的结果进行数字编码。常见的有双积分型 ADC。

逐次逼近ADC(Successive Approximation ADC)

类似于二分算法
这里用二分算法模拟逐次逼近ADC
不断更新mid的位置来逼近目标位置
伪代码
while(i>=0) //循环8次确定一个字节
if(check(mid)>x) 清除当前位的1;
else 保留当前位的1;
i--;//指针后移

原理:逐次逼近ADC是一种常见且高效的转换方法,通过从高位到低位逐步逼近模拟信号的值来实现转换。属于直接转换
转换过程:

1)输入信号采样

首先,输入的模拟信号会被采样并保持在一个保持电容或保持电路中,以便ADC可以对其进行处理。
2)比特位设置

ADC根据其设置的分辨率确定需要转换的比特位数。例如,一个10位ADC需要确定10个比特位。
3)初始化

ADC初始化为将最高位(最高有效位)设为1,其他比特位设为0。
4)比较

ADC通过一个比较器,将被测信号与一个参考电压进行比较。比较器输出一个数字值,用于表示输入信号是否大于或小于参考电压。
5)逐次逼近过程

ADC从最高有效位开始,逐步决定每个比特位的值。对于每一个比特位,ADC将一个比特值输出到DAC(数模转换器)中,这个输出值用于产生一个比较电压。
如果DAC输出的电压高于输入信号,则相应比特位的值保持为1;如果DAC输出的电压低于输入信号,则相应比特位的值设为0。
通过比较结果,ADC确定了每个比特位的值,然后将这些比特位组合成一个完整的数字输出。
6)完成转换

当所有比特位都确定后,ADC完成了一次转换,将输出一个数字化的结果。这个结果可以直接用于数字系统的处理或存储。
在这里插入图片描述

双积分型ADC
原理:将输入电压变换成与其平均值成正比的时间间隔,再把此时间
间隔转换成数字量
,属于间接转换。
转换过程

积分(Integration):首先,将要转换的模拟信号输入到ADC的输入端。ADC通过一个开关控制电路将输入信号传递到积分电容器上。开始时,这个开关关闭。 一个稳定的参考电压(通常是正电源)通过另一个开关施加到一个积分电容上,导致电容器开始充电。积分电容器的电压线性增加,直到它的电压达到输入信号电压的值。
逆积分(Counter-Integration): 当积分电容电压达到输入信号电压后,输入信号的开关会关闭,参考电压的开关打开。积分电容器开始以相反的方式放电,以与输入信号成比例的速率。
同时,一个计时器开始计数直到积分电容器的电压降到零。计时器的计数值与输入信号的电压成正比。
数字输出:计时器停止计数后,其值被作为模拟输入信号的数字表示输出。 通常,输出的数字是通过一些数字逻辑和控制器进行处理,以产生最终的二进制输出。
在这里插入图片描述

XPT2046 芯片介绍

在这里插入图片描述

XPT2046是一款4线制电阻式(也可以是3线)触摸屏控制器,内含12位分辨率125KHz转换速率逐步逼近型A/D转换器。
XPT2046支持从 1.5V 到 5.25V 的低电压 I/O 接口。XPT2046 能通过执行两次 A/D 转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带 2.5V 参考电压,可以作为辅助输入、 温度测量电池监测之用,电池监测的电压范围可以从 0V 到6V。XPT2046 片内集成有一个温度传感器。在 2.7V 的典型工作状态下,关闭参考电压,功耗可 小于 0.75mW。
XPT2046采用微小的封装形式:TSSOP-16,QFN-16 和 VFBGA-48。 工作温度范围为-40℃~+85℃。与ADS7846、TSC2046、AK4182A 完全兼容。

芯片引脚

在这里插入图片描述

引脚功能
在这里插入图片描述

基本原理

  • XPT2046 是一种典型的逐次逼近型模数转换器(SAR ADC),包含了采样/保持、模数转换、串口数据 输出等功能。
  • 同时芯片集成有一个 2.5V的内部参考电压源、温度检测电路,工作时使用外部时钟。
  • XPT2046 可以单电源供电,电源电压范围为 2.7V~5.5V。
  • 参考电压值直接决定ADC的输入范围,参考电压可以使用内部参考
    电压,也可以从外部直接输入 1V~VCC范围内的参考电压(要求外部参考电压源输出阻抗低)
  • X、Y、Z、VBAT、Temp和AUX模拟信号经过片内的控制寄存器选择后进入ADC,ADC可以配置为单端差分模式
  • 选择VBAT、Temp和AUX时应该配置为单端模式;作为触摸屏应用时,应该配置为差分模式,这可有效消除由于驱动开关的寄生电阻及外部的干扰带来的测量误差,提高转换精度。

参考电压

内部参考电压

XPT2046 的内部2.5V参考电压源可通过控制位PD1进行关闭或者打开。一般地,内部参考电压只用于单端模式下VBAT、Temp和AUX输入测量。使用差分模式,触摸屏可以获得最佳性能。(用于触摸屏的位置检测)
如果要与ADS7843 兼容,XPT2046 的内部参考电压源必须强行关闭。因此,上电后要对控制位PD1 置 0以确保关闭内部参考源(见典型特性中参考电压从掉电到上电时间的关系)。

   作用:为ADC提供一个稳定的参考电压,以确保ADC测量的准确性和稳定性。

使用内部参考电压优点

  • 通常是稳定精确的,能够提供一致的参考点,有助于提高触摸屏的精度和性能
  • 简化系统设计,因为不需要外部提供额外的参考电压源
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDsAIKQT-1722364848315)(https://i-blog.csdnimg.cn/direct/78db2cb16b1c4b5baf54e762a79caa17.png#pic_center)]
外部参考电压
  • +REF和-REF(见图 5)之间的电压差(下文用VREF表示)决定了模拟输入的电压范围。XPT2046 的参考电压输入范围为 1V~ VCC。参考电压越低,则ADC输出的二进制数据结果每一个数字位所代表的模拟电压也越低。
  • 在 12 位工作方式下,数据结果的最低位所代表的模拟电压为VREF/4096,其余位依此类推。因此,参考电压越低,干扰引入的误差会越大,此时要求尽可能使用低噪声、低波动的参考电压源;在设计电路板时,尽可能减少干扰,输入的信号噪音也不能太高,否则会直接影响转换精度。

工作模式

单端工作模式

概述
ADC(模数转换器)的单端工作模式是一种常见的工作模式,适用于许多应用场景,特别是在需要测量单一信号的情况下。

工作原理
1)输入信号引脚:ADC的单端输入引脚接收来自被测量信号源的信号。这个信号可以是电压、电流或其他形式的模拟信号。
2)参考电压:ADC需要一个参考电压(Reference Voltage),用来将输入信号的幅值转换为数字数值。在单端工作模式下,参考电压通常是固定的,例如ADC的工作电源(Vcc)或设定的内部参考电压
3)转换过程

  • 输入信号被采样,并与参考电压进行比较。
  • ADC内部的比较器将输入信号与参考电压进行比较,并生成一个对应的数字表示。
  • 数字表示经过编码输出,代表输入信号的大小幅度

特点

  • 简单性:单端工作模式相对于差分工作模式更简单,因为它只涉及一个输入信号和一个地引脚。这简化了电路设计和布线的复杂性。

  • 成本效益:由于不需要额外的差分输入电路和引脚,单端ADC通常成本更低,适合一些预算有限或性能要求不高的应用。

  • 适用场景:单端ADC广泛用于测量环境、温度、湿度等传感器信号,以及一些低精度的控制和监测系统中。它们可以提供足够的精度来满足大多数非高精度应用的要求。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkUCqdbE-1722364848316)(https://i-blog.csdnimg.cn/direct/7753a881ab564f67aec57aec4e119ebe.png#pic_center)]
    SER 表示串行模式的选择位
    DFR 表示差分模式的选择位

差分工作模式

概述
差分工作模式是ADC(模数转换器)中常见且重要的工作模式之一,特别适用于需要高精度测量和抗干扰能力的应用。

工作原理
1)输入信号引脚:ADC的正极(+)和负极(-)输入引脚接收来自被测量信号源的信号。通常,正极接收被测量信号,负极接收参考信号

2)参考电压:差分ADC需要一个参考电压,用来确定正极和负极之间的电压差。这个参考电压可以是外部提供的或者ADC内部的。

3)转换过程

  • ADC内部比较器将正极和负极之间的电压差与参考电压进行比较
    根据比较结果,ADC将差分输入信号的大小幅度转换为相应的数字表示。
  • 这种转换能够提供较高的抗干扰能力,因为差分测量可以减少共模噪声的影响。

特点

  • 高精度:差分工作模式相比单端模式能够提供更高的精度和准确度,特别适合需要测量微小信号或高精度信号的应用场景。

  • 抗干扰能力:由于差分测量可以消除共模噪声(即同时作用在两个输入线上的噪声),因此在环境噪声较大或信号弱的情况下表现更好。

  • 应用场景:差分ADC广泛应用于医疗设备、科学仪器、音频设备、通信系统以及工业控制系统等需要高精度和低噪声的领域。

芯片的简要介绍结束,如果需要更详细的内容可以看看这篇博客
以下部分主要讲解如何操作芯片完成实验

操作芯片完成实验

在这里插入图片描述

XPT2046 芯片的控制管脚接至单片机P3.4~P3.7 管脚上,XPT2046 芯片的 ADC 输入转换通道分别接入了 AD1 电位器、
NTC1 热敏传感器、GR1 光敏传感器,还有一个外接通道 AIN3 接在 DAC(PWM)模块的 J52 端子上供外部模拟信号检测。
注意:上图中 XPT2046 的 DOUT 脚与 DS18B20
温度传感器均连接到单片机的P3.7,因此该两个外设资源不能同时使用,可以分时复用。

本次实验使用的是XPT芯片的电压模式,我们要操作的引脚有DCLK 、CS非、DIN 、DOUT。

DCLK—串行时钟
CS非—片选信号
DIN—串行数据输入
DOUT—串行数据输出

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

那么如何操控程序来完成实验呢,这里先看时序图,了解芯片如何开始工作,如何配置芯片的各种功能,如何实现采样 保持 量化 编码这几个步骤。

处理器和转换器之间的的通信需要 8 个时钟周期,可采用 SPI、SSI 和 Microwire 等同步串行接口

配置控制字节

在这里插入图片描述

  • 一次完整的转换需要 24 个串行同步时钟(DCLK)来完成。
  • 前8个串行同步时钟是串行数据输入(DIN)的控制字节
  • SER/DFR非是位控制参考源模式,选择单端模式(SER/DFR非=1),或者差分模式(SER/DFR非=0)。这次实验为测电压,使用单端模式的时序
  • 如何启动xpt2046芯片——给CS和CLK置0(单片机系统中一般默认为1)

CS=0; CLK=0;

CS(Chip Select)和CLK(Clock)是XPT2046的控制引脚
CS引脚用于选择XPT2046与主控制器进行通信的设备,当CS为低电平(0)时,XPT2046会响应来自主控器的通信请求,允许数据的传输。
CLK引脚是时钟信号线,它指示数据传输的时序。通常,SPI通信中,时钟信号的极性和相位对数据传输的稳定性和可靠性有重要影响。
在CS和CLK引脚准备好之后,主控器可以按照XPT2046的通信协议要求开始向其写入数据。这些数据可能包括控制字、命令、以及要传输的具体数据,如触摸屏坐标信息

DIN的时序共有三个段:闲置段(Idle),获取段(Accquire),转换段(conservation)。DIN的控制位有8位,下面开始从最高位开始介绍

  • XPT2046在接收数据时会根据S位来判断数据的类型,是控制字还是数据字。因此控制字的首位必须是 1,即 S=1。
  • 在XPT2046控制器开始检测到数据传输的起始位之前,所有输入(即在此之前通过DIN引脚输入的数据)将被忽略或不会被处理。
  • 输入配置上(A2,A1,A0决定)由于选择单端模式的XPIN通常也被设计为高速输入通道,更适合实时采集数据 ,A2 A1 A0(通道选择位)应当选择XP输入(对应 0 0 1或0 1 1)

在这里插入图片描述

VBAT:表示电池电压输入。通常用于测量电池的电压水平。
AUXIN:辅助输入通道,可以连接到外部传感器或其他电路的输出端。(如测量电位器)
TEMP:温度传感器输入。用于测量环境温度。
YN:保留输入。
XP:触摸屏X轴位置输入。
YP:触摸屏Y轴位置输入。

在这里插入图片描述

  • MODE:模式选择位,用于设置 ADC 的分辨率。MODE=0,下一次的转换将是 12 位模式;MODE=1,下一次的转换将是 8 位模式。本次实验选择精度更高的12位。

12位和8位的区别

  • 12位提供更高的精度,适合需要更精确测量的应用,如测量电位器的细微变化。
  • 8位转换速度较快,适合于一些不需要非常高精度的应用
  • SER/ DFR非 :控制参考源模式,选择单端模式(SER/ DFR非 =1),或者差分模式。在单端模式下,转换器的参考电压固定为VREF相对于GND引脚的电压。
  • PD0和PD1:控制掉电和内部参考电压配置的关系。为了使测量精度更高,我们选择外部电压模式,即PD1和PD0都为0。
  • PD0 = 0, PD1 = 0:表示使用外部参考电压。适合需要高精度和稳定性的应用,外部参考电压可以提供更为准确的ADC转换。

  • PD0 = 1, PD1 = 0 或 PD0 = 0, PD1 = 1:表示使用内部参考电压。XPT2046芯片通常提供内部的参考电压源,用于ADC转换。内部参考电压通常不如外部参考电压精准,但对于一般的应用已经足够。

  • PD0 = 1, PD1 = 1:这种配置表示使用自动选择参考电压。在这种模式下,芯片会根据测量的输入信号范围自动选择使用内部还是外部参考电压源,以提供最佳的转换性能和精度。

  • PD0和PD1寄存器用来配置芯片的电源模式其他功能,但并不直接控制单端模式下的参考电压。它们主要影响的是芯片的工作模式电源选项某些特殊功能启用

到这里我们可以得到本次实验的控制指令 10010100(2进制)
转化为16进制后得到 0x94

adc_value=xpt2046_read_adc_value(0x94);//测量电位器

当DIN的控制字节处理完成之后,转换器进入转换状态,输入采样-保持器进入保持状态,触摸面板驱动器停止工作(单端工作模式——芯片只使用一个输入引脚来进行模拟转换)接着的 12 个时钟周期将完成真正的模数转换。

模数转换时序

采样

显示XPT2046发送采样命令,开始测量电位器输出的模拟电压。
输入控制指令

adc_value=xpt2046_read_adc_value(0x94);//测量电位器

保持

保持阶段确保采样后的模拟电压在转换期间保持稳定。这通常在硬件电路中自动完成。在时序图中,保持阶段显示为电压稳定的状态,直到转换完成。

量化
  • 显示SAR ADC逐步逼近的过程,将模拟电压转换为数字编码。
  • xpt2046芯片的AD是逐次逼近式AD(SAR),可直接参考ADC转换原理的内容理解。

SAR使用对分搜索法产生数字量,以8位数字量为例,SAR首先产生8位数字量的一半,即b=1000000,试探模拟量Vi的大小。若Vo>Vi,清楚最高度位;反之,则保留最高位。在最高位确认后,SAR又以对分搜索法确定下一位(次高位),即以7位数字量的一半1000000(y由前面的过程已确回认)试探模拟量Vi的大小。依此类推,直到确定了bit0为止,转换结束。

本次实验中并未使用逐步逼近算法实现,而是通过SPI接口从XPT2046芯片中读取12位的数据。(逐位移位和按位或运算

u16 xpt2046_read_data(void)
{
	u8 i;
	u16 dat=0;
	CLK = 0;
	_nop_();
	for(i=0;i<12;i++)//循环 12 次,每次读取一位,大于一个字节数,所以返回值类型是 u16
	{
		dat <<= 1;
		CLK = 1;
		_nop_();
		CLK = 0; //CLK 由高到低产生一个下降沿,从而读取数据
		_nop_();
		dat |= DOUT;//先读取高位,再读取低位。
	}
	return dat;
}
编码
  • 数据编码为适合SPI传输的格式,并通过SPI接口发送给主控制器或其他设备。

adc_value=xpt2046_read_data();
return adc_value;

END

代码文件

public.h

#ifndef _public_H
#define _public_H

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

void delay_10us(u16 ten_us);
void delay_ms(u16 ms);

#endif

public.c

#include "public.h"


void delay_10us(u16 ten_us)
{
 	while(ten_us--);
}

void delay_ms(u16 ms)
{
 	u16 i,j;
	for(i=ms;i>0;i--)
	 	for(j=110;j>0;j--);
}

smg.h

#ifndef _smg_H
#define _smg_H

#include "public.h"

#define SMG_A_DP_PORT P0
//宏定义数码管段码口

//定义数码管位选信号控制脚
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

extern u8 gsmg_code[17];

void smg_display(u8 dat[],u8 pos);

#endif

smg.c

#include "smg.h"
//共阴极数码管显示0~F的段码数据
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
				0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void smg_display(u8 dat[],u8 pos)
{
	u8 i=0;
	u8 pos_temp=pos-1;

	for(i=pos_temp;i<8;i++)
	{
	 	switch(i)
		{
		 	case 0:LSC=1;LSB=1;LSA=1;break;
			case 1:LSC=1;LSB=1;LSA=0;break;
			case 2:LSC=1;LSB=0;LSA=1;break;
			case 3:LSC=1;LSB=0;LSA=0;break;
			case 4:LSC=0;LSB=1;LSA=1;break;
			case 5:LSC=0;LSB=1;LSA=0;break;
			case 6:LSC=0;LSB=0;LSA=1;break;
			case 7:LSC=0;LSB=0;LSA=0;break;	
		}
		SMG_A_DP_PORT=dat[i-pos_temp];
		delay_10us(100);
		SMG_A_DP_PORT=0x00;//消影
	}
 	
}

xpt2046.h

#ifndef _xpt2046_H
#define _xpt2046_H

#include "public.h"

sbit DIN=P3^4;//串口输入
sbit CS=P3^5;//片选
sbit CLK=P3^6;//时钟脉冲
sbit DOUT=P3^7;//串口输出

//返回12位数据,采用16位
u32	xpt2046_read_adc_value(u8 cmd);//传入控制指令

#endif

xpt2046.c

#include "xpt2046.h"
#include "intrins.h" 
//向xpt2046写入数据	(这里是写入控制指令)
void xpt2046_write_date(u8 dat)
{
	u8 i;

	CLK=0;  //上升沿写入数据
	_nop_();

	for(i=0;i<8;i++)
	{
	 	DIN=dat>>7;
		dat<<=1;

		CLK=0;
		_nop_();//写入数据位
		CLK=1;
		_nop_();
	}
}

//从高位到低位读取,下降沿输出数据到DOUT后读取,开始输出的是高位

u32	xpt2046_read_date(void)
{
 	u8 i;
	u16 dat=0;
	CLK=0;
	_nop_();

	for(i=0;i<12;i++)
	{
		dat<<=1;
	 	CLK=1;
		_nop_();//产生一个下降沿
		CLK=0;
		_nop_();
		dat |= DOUT;
	}
	return dat; 
}



u32 xpt2046_read_adc_value(u8 cmd)
{
	u8 i;
 	u32 adc_value=0;//量化后的值

	//使xpt2046进入工作模式
	CLK=0;//默认引脚置1,软件置0
	CS=0;//片选置0,启动AD
	//采样——写入控制指令cmd
	xpt2046_write_date(cmd);//发送控制指令(完成时序的前8位)
	
	for(i=6;i>0;i--);//等待转换结果
	CLK=0;
	_nop_();//清除busy
	CLK=1;
	_nop_();
	
	adc_value=xpt2046_read_date();	//读取量化后的数据
	
	CS=1;//片选置1,完成时序,关闭xpt2046
	return adc_value;//返回编码
}

main.c

#include "smg.h"
#include "xpt2046.h"
#include "public.h"


void main()
{
 	u32 adc_value=0;
	float adc_vol;//ADC电压
	u8 adc_buf[5];
	while(1)
	{
	 	adc_value=xpt2046_read_adc_value(0X94);
		adc_vol=5.0*adc_value/4096;//2^12=4096 转化为电压
		adc_value=adc_vol*1000;//保留三位小数
		adc_buf[0]=gsmg_code[adc_value/1000]|0x80;
		adc_buf[1]=gsmg_code[adc_value%1000/100];
		adc_buf[2]=gsmg_code[adc_value%100/10];
		adc_buf[3]=gsmg_code[adc_value%10];
		adc_buf[4]=0x3e;//单位v
		smg_display(adc_buf,4);
	}
	//Vref*ADC_Value/分辨率
	//分辨率是adc的位数 ,这里是2^12
}

实验现象
数码管上显示 AD 模块采集电位器的电压值
在这里插入图片描述

  • 30
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值