> 文章列表 > C51 - SPI_AD转换

C51 - SPI_AD转换

C51 - SPI_AD转换

TSC2046

  • 1> 项目概述
  • 2> 硬件设计
  • 3> TSC2046
    • 3.1> TSC2046功能
    • 3.2> TSC2046控制命令
    • 3.3> 控制命令总结
    • 3.4> SPI协议
    • 3.5> 数据转换
  • 4> 软件编程
    • 4.1> 实现功能
    • 4.2> 编程思路
    • 4.3> SPI驱动
    • 4.4> TSC2046驱动
  • 5> 联调测试
    • 5.1> VBAT的1/4分压
    • 5.2> MOSI波形测试
    • 5.2> MISO波形测试
  • 6> 复盘总结

1> 项目概述

51单片机模拟SPI总线,读取AD转换芯片TSC2046的4路转换值,通过串口发送到PC;

C51 - SPI_AD转换


2> 硬件设计

MCU部分:
1

ADC部分:
C51 - SPI_AD转换


3> TSC2046


3.1> TSC2046功能

TSC2046 有2个功能:
1》连接触摸屏(差分模式);
2》4路AD转换(单端模式);


3.2> TSC2046控制命令

222


1

3.3> 控制命令总结

XP引脚输入:  0b' 1001 0100;   // 0x94;
YP引脚输入:  0b' 1101 0100// 0xD4;
VBAT引脚输入:0b' 1010 0100;   // 0xA4;
AUX引脚输入: 0b' 1110 0100// 0xE4;

3.4> SPI协议

概述:
SPI(Serial Peripheral Interface)串行外设接口;

34


传输格式:
31

空闲态:
/CS = 1; - CLK = 0;- MOSI = 0;- MISO = 1;

起始位: CS拉低;
停止位:CS拉高;

写时序:MOSI放数据,然后 主机在CLK↑上升沿发送数据,循环8次;

BUSY信号:第9个CLK时产生忙信号,告诉主机正在转换数据;

读时序:第10个CLK↓下降沿,从机在MISO上发送数据,循环12次;


总结规律:
1> 主机在CLK上升沿,发送数据在MOSI上;
2> 从机在CLK下降沿,发送数据在MISO上;


时序参数:

3.1


3.5> 数据转换

35

因为TSC2046的分辨率为12位,所以2^12 = 4096;


4> 软件编程


4.1> 实现功能

51单片机模拟SPI总线,读取AD转换芯片TSC2046的4路转换值,通过串口发送到PC;


4.2> 编程思路

模块化,分层思路,使SPI驱动模块方便的被所以SPI设备调用,如TSC2046,DS1302等等

C51 - SPI_AD转换


4.3> SPI驱动

/* @brief SPI write 1 byte* @param dat,8bit* @retval None*/
void SPI_WriteByte(uchar8_t dat)
{uchar8_t i = 0;for (i = 0; i < 8; i++) {ADC_SPI_MOSI = dat >> 7;dat <<= 1;ADC_SPI_CLK = 1;ADC_SPI_CLK = 0;}
}/* @brief SPI Read 1 byte* @param None* @retval data*/
uchar8_t SPI_ReadByte(void)
{uchar8_t i = 0;uchar8_t val = 0;for (i = 0; i < 8; i++) {ADC_SPI_CLK = 1;ADC_SPI_CLK = 0;val <<= 1;val |= ADC_SPI_MISO;		}	return val;
}

4.4> TSC2046驱动

ushort16_t TSC2046_ReadAD(uchar8_t chanel)
{ushort16_t val = 0;	ADC_SPI_CLK = 0;ADC_SPI_MOSI = 0;ADC_SPI_CS = 0;SPI_WriteByte(chanel);Delay_5us();val = SPI_ReadByte();val <<= 8;val |= SPI_ReadByte();val >>= 4;ADC_SPI_CS = 1;return val;
}

5> 联调测试


5.1> VBAT的1/4分压

实验过程中发现VBAT引脚采样电压错误,阅读手册后发现VBAT引脚有1/4分压电路

51


5.2> MOSI波形测试

1

写VBAT通道


5.2> MISO波形测试

52

1》 CS拉低后,从机会拉低MISO;
2》后四位补0;
3》从机最后拉高MISO,释放其总线;
4》CLK下降沿,MISO数据输出;


6> 复盘总结