嵌入式学习记录- 16-1~17-3

这篇博客记录了嵌入式学习的过程,主要涉及AD/DA转换的基本原理、性能指标和XPT2046的SPI通信。此外,还介绍了红外遥控的工作机制以及STC89C52单片机的外部中断应用。
摘要由CSDN通过智能技术生成

16-1 AD/DA

2023 04 28

  • AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号

  • DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号

AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能

运算放大器

坏了听不懂,得去学数电模电了

运算放大器(简称“运放”)是具有很高放大倍数的放大电路单元。内部集成了差分放大器、电压放大器、功率放大器三级放大电路,是一个性能完备、功能强大的通用放大电路单元,由于其应用十分广泛,现已作为基本的电路元件出现在电路图中

运算放大器可构成的电路有:电压比较器、反相放大器、同相放大器、电压跟随器、加法器、积分器、微分器等

运算放大器电路的分析方法:虚短、虚断(负反馈条件下)

DA原理

前者不需要占用CPU资源(不需要PWM),但精度是固定的。

AD原理

有点类似二分的思想

AD/DA性能指标

分辨率:指AD/DA数字量的精细程度,通常用位数表示。例如,对于5V电源系统来说,8位的AD可将5V等分为256份,即数字量变化最小一个单位时,模拟量变化5V/256=0.01953125V,所以,8位AD的电压分辨率为0.01953125V,AD/DA的位数越高,分辨率就越高

转换速度:表示AD/DA的最大采样/建立频率,通常用转换频率或者转换时间来表示,对于采样/输出高速信号,应注意AD/DA的转换速度

XPT2046

XPT2046时序(SPI通信)

通过CS线选择总线上的设备(一个设备单独接个 CS ‾ \overline{\text{CS}} CS

时钟下降沿单片机输出,上升沿单片机输入## 16-2 AD模数转换

2023 04 29

main.c

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"

unsigned int ADValue;

int main(){
                                                                                  
    LCD_Init();

    while(1){
   
        ADValue = XPT2046_ReadAD(XPT2046_XP_8);// 电位器(滑动电阻)
        LCD_ShowNum(2, 1, ADValue, 3);
        Delay(1);
        ADValue = XPT2046_ReadAD(XPT2046_YP_8);// 热敏电阻
        LCD_ShowNum(2, 5, ADValue, 3);
        Delay(1);
        ADValue = XPT2046_ReadAD(XPT2046_VBAT_8);// 光敏电阻
        LCD_ShowNum(2, 9, ADValue, 3);
        Delay(1);
    }
}

XPT2046.c

#include <REGX52.H>
#include "Delay.h"

sbit XPT2046_CS = P3^5;// 从机是否选中
sbit XPT2046_DCLK = P3^6;// 时钟
sbit XPT2046_DIN = P3^4;// 输入从机
sbit XPT2046_DOUT = P3^7;// 从机输出

unsigned int XPT2046_ReadAD(unsigned char Command){
   
    unsigned char i;
    unsigned int ADValue = 0;

    XPT2046_DCLK = 0;
    XPT2046_CS = 0;// 初始化

    for (i = 0; i < 8; i++) {
   
        XPT2046_DIN = (Command & (0x80 >> i));
        XPT2046_DCLK = 1;
        XPT2046_DCLK = 0;
    }

    Delay(1);

    for (i = 0; i < 16; i++) {
   
        XPT2046_DCLK = 1;
        XPT2046_DCLK = 0;
        if(XPT2046_DOUT)ADValue |= (0x8000 >> i);
    }

    if(Command & 0x08) ADValue >>= 8;// 8位分辨率 只有前8位有效
    else ADValue >>= 4;//               12位分辨率 只有前12位有效

    return ADValue;
}

XPT2046.h

#ifndef __XPT2046_H__
#define __XPT2046_H__

#define XPT2046_XP_8    0x9C
#define XPT2046_YP_8    0xDC
#define XPT2046_VBAT_8  0xAC
#define XPT2046_AUX_8   0xEC

#define XPT2046_XP_12   0x94
#define XPT2046_YP_12   0xD4
#define XPT2046_VBAT_12 0xA4
#define XPT2046_AUX_12  0xE4

unsigned int XPT2046_ReadAD(unsigned char Command);

#endif

16-3 DA数模转换

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"

unsigned char Compare,State;

sbit DA = P2 ^ 1;

int main() {
   
    Timer0Init();

    while (1) {
   
        Delay(10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值