单片机学习笔记.AD/DA(略含有SPI,用的是普中开发板上的XPT2046芯片)
AD/DA基础知识
硬件电路:
模电运放知识回顾:
虚短(Virtual Short)
- 定义:运放同相输入端(+)和反相输入端(-)的电位近似相等,即V+= V-,仿佛两个输入端短路,但实际上并未真正连接(无电流通过),因此称为 “虚短”。
虚断(Virtual Open)
- 定义:运放同相输入端和反相输入端的输入电流近似为零,即 I+ = I- ,仿佛两个输入端开路,但实际上仍有微弱电流(理想运放忽略),因此称为 “虚断”。
eg. 分析:
DA原理:
T型电阻网络DA:
PWM型DA:
SPI协议:
这里时序图以XPT2046为例:
硬件原理图:
引脚定义:
sbit XPT2046_CS=P3^5;
sbit XPT2046_DCLK=P3^6;
sbit XPT2046_DIN=P3^4;
sbit XPT2046_DOUT=P3^7;
命令字:
选定对应通道:
在头文件里对命令字进行宏定义 :
#define XPT2046_XP_8 0x9c //1001 1;8位1:单端00
#define XPT2046_YP_8 0xDc
#define XPT2046_VBAT_8 0xAc
#define XPT2046_AUX_8 0xEc#define XPT2046_XP_12 0x94 //1001 1;8位1:单端00
#define XPT2046_YP_12 0xD4
#define XPT2046_VBAT_12 0xA4
#define XPT2046_AUX_12 0xE4
XPT2046读取AD值:
unsigned int XPT2046_ReadAD(unsigned char Command)//s=1开始检测,a2a1a0选地址
{unsigned char i;unsigned int ADValue;XPT2046_CS=0;XPT2046_DCLK=0;for(i=0;i<8;i++){XPT2046_DIN=Command&(0x80>>i);XPT2046_DCLK=1;Delayms(1);XPT2046_DCLK=0;}for(i=0;i<16;i++){XPT2046_DCLK=1;Delayms(1);XPT2046_DCLK=0;if(XPT2046_DOUT==1){ADValue|=(0x8000>>i);}}XPT2046_CS=1;if(Command&0x08)//0000 0100{return ADValue>>8;}else{return ADValue>>4;}
}