C51 - SPI读写ADC

news2024/11/28 15:58:47

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;

1


2> 硬件设计

MCU部分:
1

ADC部分:
2


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等等

42


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> 复盘总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文简述】DELS-MVS: Deep Epipolar Line Search for Multi-View Stereo(WACV 2023)

一、论文简述 1. 第一作者&#xff1a;Mattia Rossi 2. 发表年份&#xff1a;2023 3. 发表期刊&#xff1a;WACV 4. 关键词&#xff1a;MVS、3D重建、极线搜素 5. 探索动机&#xff1a;目前的方法无论是深度值还是逆深度值&#xff0c;都需要提前确定深度值范围&#xff0…

java反序列化 URLDNS链分析

前言 终于可算是来到java反序列化&#xff0c;在菠萝师傅的一番提醒&#xff0c;我认识到自己不能继续在简单的游荡了&#xff0c;要来到难的地方了。 也庆祝自己终于拥有了勇气。 分析 基础 我相对喜欢先代码在讲原理&#xff0c;这里不怎么了解序列化可以去复习一下javase 可…

黑盒测试用例设计

目录 前言&#xff1a; 一、黑盒测试 二、实验目的 三、实验内容 四、实验步骤 五、实验过程 题目一 1、等价类划分表 2、设计测试用例 3、缺陷 4、代码实现 5、测试结果 题目二 设计测试用例 题目一示例代码&#xff08;java编写&#xff09; 总结 前言&#x…

苹果pencil和平替笔有哪些区别?性价比平替电容笔排行榜

而对于那些把ipad当做学习工具的学生党而言&#xff0c;电容笔就成了日常的必备品。但因为苹果Pencil的售价太贵了&#xff0c;学生们都买不起。因此&#xff0c;最好的选择还是平替电容笔。作为一个ipad的忠实用户&#xff0c;同时也是一个数码产品的热衷者&#xff0c;这两年…

1797F Li Hua and Path(Min-rt树,Max-rt树)

题目链接 题意 &#xff1a; 给你一个大小为nnn的树&#xff0c;我们想求解一个问题&#xff0c;问题的定义是找有多少条路径满足恰好满足路径的端点是路径的最小值ororor最大值条件之一&#xff0c;【注】不能同时满足路径的两个端点是最小值又是最大值 现在增加mmm个操作&am…

【Unity】基于AVFoundation开发MacOS摄像头(二)

【Unity】基于AVFoundation开发MacOS摄像头&#xff08;一&#xff09;_GrimRaider的博客-CSDN博客实现一个Camera设备驱动&#xff0c;代替unity自带WebCamTexturehttps://blog.csdn.net/GrimRaider/article/details/130127229 目标1&#xff1a;实现bridge&#xff0c;创建一…

【Java数据结构——环形链表】判断链表成环与寻找链表成环的入口节点(经典)

判断链表是否成环https://leetcode.cn/problems/linked-list-cycle/description/ 解题核心思路&#xff1a; 定义快慢指针初始引用指向链表的头节点&#xff0c;快指针每向后走两步&#xff0c;慢指针走一步。如果链表中存在环&#xff0c;则快慢指针一定会在某次移动后相遇。 …

一文看懂“低代码、零代码”是什么?有什么区别?

低代码和零代码近几年热度一直居高不下&#xff0c;乍一看&#xff0c;很容易混淆低代码和零代码开发平台—— 因为它们都是传统开发的替代方案&#xff0c;旨在通过类似于可视化编程的功能加速软件开发过程。 但二者根本不是一回事。从开发人员经验 、目标角色到使用场景&…

C++ 学习4

C设计原则 高内聚低耦合 内聚就是一个模块内各个元素彼此结合的紧密程度&#xff0c;高内聚就是一个模块内各个元素彼此结合的紧密程度高。 所谓高内聚是指一个软件模块是由相关性很强的代码组成&#xff0c;只负责一项任务&#xff0c;也就是常说的单一责任原则。 耦合&am…

计算机网络 - TCP的效率与特性

前言 本篇是介绍部分TCP的特性&#xff0c;了解TCP提高传输速率的机制&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录前言1. 滑动窗口2. 流量控制3.拥塞控制4.延时应答5. 捎带应答6. 面向字节流7. 异常…

spring bean

图灵课堂学习笔记 1. BeanFactory与ApplicationContext的关系 p56 ApplicationContext在BeanFactory基础上对功能进行了扩展&#xff0c;例如&#xff1a;监听功能、国际化功能等。BeanFactory的API更偏向底层&#xff0c;ApplicationContext的API大多数是对这些底层API的封…

python带你制作可以随机的自答题程序

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 目录前言环境使用:模块使用:程序实现思路: <模板> 获取题库一. 获取题库 --> 问题答案二. 进行自动答题操作代码展示题库采集自动答题尾语 &#x1f49d;环境使用: 解释器版本 >>> python 3.8 代码编辑器…

数学基础|线性代数回顾

因为学机器学习的时候发现自己线性代数忘光光了&#xff08;悲&#x1f613;&#xff0c;本篇捞一捞当年学线性代数看哔哩哔哩宋浩老师补充记的潦草笔记。 目录 &#x1f4da;线性代数知识点 &#x1f407;向量 &#x1f955;向量的线性组合 &#x1f955;线性相关无关的性…

JVM 工作原理和即时编译(JIT)

目录 1、什么是虚拟机&#xff1f; 2、JVM 虚拟机简介 3、JVM 的工作原理 4、什么是即时编译&#xff08;JIT&#xff09;&#xff1f; 5、解释型语言和编译型语言的区别 6、为什么说 Java 是一种半编译半解释的语言&#xff1f; 1、什么是虚拟机&#xff1f; 虚拟机是一…

直播美颜技术的演进及其应用:直播美颜SDK详解

直播美颜技术的应用&#xff0c;为直播开辟了新的业态&#xff0c;从最初简单的美颜滤镜&#xff0c;到现在的直播美颜SDK&#xff0c;其技术演进历程也是一步步走来。 一、直播美颜技术的演进 1、简单美颜滤镜 最初的直播美颜技术&#xff0c;就是通过简单的美颜滤镜来实现…

python内存回收gc模块

目录1. python 垃圾回收机制标记-清除的回收机制分代回收2. gc 模块参考资料对已经销毁的对象&#xff0c;Python不会自动释放其占据的内存空间。为了能够充分地利用分配的内存&#xff0c;避免程序跑到一半停止&#xff0c;要时不时地进行内存回收&#xff0c;这时候gc&#x…

超详细——Python中 pip 常用命令

人生苦短&#xff0c;我学Python 相信对于大多数熟悉Python的人来说&#xff0c;一定都听说并且使用过pip这个工具&#xff0c;但是对它的了解可能还不一定是非常的透彻&#xff0c;今天小编就来为大家介绍10个使用pip的小技巧&#xff0c;相信对大家以后管理和使用Python当中…

每天一道大厂SQL题【Day19】华泰证券真题实战(一)

每天一道大厂SQL题【Day19】华泰证券真题实战(一) 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&…

CSS中相对定位与绝对定位的区别及作用

CSS中相对定位与绝对定位的区别及作用场景复现核心干货相对定位绝对定位子绝父相&#x1f525;&#x1f525;定位总结绝对定位与相对定位的区别场景复现 在学习前端开发的过程中&#xff0c;熟练掌握页面布局和定位是非常重要的&#xff0c;因此近期计划出一个专栏&#xff0c…

【问题、AI解答】mongodb中使用$lookup进行连表查询使用_id作为localField出现查询结果字段为空的情况

描述&#xff1a; db.acticles.aggregate([ {$lookup&#xff1a;{from:"acticlesMaptags",localField:"_id",foreignField:"acticleid",as:"tagid"} } ])acticlesMaptags集合中的acticleid字段存在与acticles集合中的_id相匹配的数据…