51单片机学习笔记_13 ADC

ADC

使得调节开发板上的电位器时,数码管上能够显示 AD 模块 采集电位器的电压值且随之变化。

开发板上有三个应用:光敏电阻,热敏电阻,电位器。

一般 AD 转换有多个输入,提高使用效率。

image-20230327170005984

ADC 通过地址锁存与译码判断采用哪个输入。

image-20230327172256586

运算放大器,可以作为电压比较器、同相反相放大器、电压跟随器

T 型电阻网络 DA 转换器:

image-20230327195138979

低通滤波器:输入是有直交流两个分量的,可以通过低通滤波器提取出直流。电压跟随器让驱动能力增加。

image-20230327195154405

扫描二维码关注公众号,回复: 14874087 查看本文章

da 简单些,因为d值是固定的,根据d调整a即可。

ad 怎么判断电压大小?我们用一个电压值和给定电压作比较,看大于还是小于,逐渐逼近来找近似值。

分辨率:精细程度。比如8位的 ad 可以把 5v 转换到 0~255 范围。

转换速度:最大采样/建立频率。

XPT2046 采用 SPI,的时序在上升沿输入,下降沿输出,可实现输入再输出。

image-20230327213950578

采用单端模式(触摸屏查分会更好一些)。

PD1=1 采用内部参考电压,内部电压为 2.5v,我们知道adc 映射范围是 0~5v,所以1采用内部电压不如0采用5v的外部电压。

A 地址配置:

image-20230327220710512

VBAT:电池电压。

AUX:辅助电压。

XP YP:XY 正极。

读取指令并 ad 转化:

#define XPT2046_XP_8 0x9C    // 1001 1100
#define XPT2046_YP_8 0xDC    // 1101 1100
#define XPT2046_VBAT_8 0xAC  // 1010 1100
#define XPT2046_AUX_8 0xEC   // 1110 1100
#define XPT2046_XP_12 0x94   // 1001 0100
#define XPT2046_YP_12 0xD4   // 1101 0100
#define XPT2046_VBAT_12 0xA4 // 1010 0100
#define XPT2046_AUX_12 0xE4  // 1110 0100

unsigned int XPT2046_ReadAD(unsigned char command)
{
    
    
    unsigned char i;
    unsigned char temp=command;
    unsigned int ADValue = 0;
    XPT2046_DCLK = 0;
    XPT2046_CS = 0;
    for (i = 0; i < 8; i++)
    {
    
    
        XPT2046_DIN = temp >> 7;
        temp <<= 1;
        XPT2046_DCLK = 1;
        XPT2046_DCLK = 0;
    }

    for (i = 0; i < 12; i++)
    {
    
    
        XPT2046_DCLK = 1;
        XPT2046_DCLK = 0;
        if (XPT2046_DOUT)
            ADValue |= (0x0800 >> i);
    }
    XPT2046_CS = 1;
    //for 12 bit:
    if(command&0x08)return ADValue>>4;
    else return ADValue;
}
void main()
{
    
    
	unsigned int ADValue = 0;
	LCD_Init();
	LCD_ShowString(1, 1, "ADC NTC RG");
	while (1)
	{
    
    
		ADValue = XPT2046_ReadAD(XPT2046_XP_8);//电位器
		LCD_ShowNum(2, 1, ADValue, 3);
		ADValue = XPT2046_ReadAD(XPT2046_YP_8);//热敏电阻
		LCD_ShowNum(2, 5, ADValue, 3);
		ADValue = XPT2046_ReadAD(XPT2046_VBAT_8);//光敏电阻
		LCD_ShowNum(2, 9, ADValue, 3);
		delayMs(10);
	}
}

dac 也是采用 pwm 的原理,改变01 叫错频率来模拟灯的亮度(输出口:P2^1)。所以 dac 用处不广泛,因为可以被代替。

猜你喜欢

转载自blog.csdn.net/jtwqwq/article/details/129821688