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;

2> 硬件设计
MCU部分:
 
ADC部分:
 
3> TSC2046
3.1> TSC2046功能
TSC2046 有2个功能:
1》连接触摸屏(差分模式);
2》4路AD转换(单端模式);
3.2> TSC2046控制命令


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)串行外设接口;

传输格式:
 
空闲态:
/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.5> 数据转换

因为TSC2046的分辨率为12位,所以2^12 = 4096;
4> 软件编程
4.1> 实现功能
51单片机模拟SPI总线,读取AD转换芯片TSC2046的4路转换值,通过串口发送到PC;
4.2> 编程思路
模块化,分层思路,使SPI驱动模块方便的被所以SPI设备调用,如TSC2046,DS1302等等

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分压电路

5.2> MOSI波形测试

写VBAT通道
5.2> MISO波形测试

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


















