AD/DA基础知识
硬件电路:
模电运放知识回顾:
虚短(Virtual Short)
- 定义:运放同相输入端(+)和反相输入端(-)的电位近似相等,即V+= V-,仿佛两个输入端短路,但实际上并未真正连接(无电流通过),因此称为 "虚短"。
虚断(Virtual Open)
- 定义:运放同相输入端和反相输入端的输入电流近似为零,即 I+ = I- ,仿佛两个输入端开路,但实际上仍有微弱电流(理想运放忽略),因此称为 "虚断"。
eg. 分析:
DA原理:
T型电阻网络DA:
PWM型DA:
SPI协议:

这里时序图以XPT2046为例:
硬件原理图:
引脚定义:
cpp
sbit XPT2046_CS=P3^5;
sbit XPT2046_DCLK=P3^6;
sbit XPT2046_DIN=P3^4;
sbit XPT2046_DOUT=P3^7;
命令字:
选定对应通道:
在头文件里对命令字进行宏定义 :
cpp
#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值:
cpp
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;
}
}