【选帽子】TCS34725颜色传感器和Python图形界面编程(STM32 HAL库)_tcs34725集成stm32 demo_东小东博客的博客-程序员秘密

技术标签: stm32  物联网杂项  STM32  物联网  嵌入式  

截图 

 

描述:

l  STM32 HAL库编程

l  使用模拟IIC通信,方便程序移植

l  Python界面编写,蘑菇头的帽子是什么颜色

l  STM32 HAL库串口通信

l  Python界面使用Pygame

 

视频演示地址:https://www.bilibili.com/video/BV19f4y1z75Q

 

一、 基础认识

l  工作电压:3.3~5V

l  检测距离:3~10mm

l  通信方式:IIC,可达400kbit/s

l  采集参数:红色,绿色,蓝色(RGB),光照强度

l  可屏蔽中断,可屏蔽的上下限值中断

l  低功耗,等待状态65uA,休眠状态25uA

l  可编程采集等待时间,2.4ms~614ms

l  TCS34725彩色传感器有着广泛的应用,包括RGB LED背光控制、固态照明、 健康产品、工业过程控制和医疗诊断设备等;

引脚定义

光谱分布

 

二、 系统状态

内部状态机提供RGBC的系统控制和设备的电源管理特性。通电时,内部开机复位会初始化设备,使其处于低功耗睡眠状态。当在IIC总线上检测到一个开始信号时,设备转换到空闲状态,在那里它检查启用寄存器(Ox00) PON位。禁用PON后,设备会返回休眠状态以节省电量。否则,设备将一直处于空闲状态,直到AEN使能RGBC功能。一旦启用,设备将依次执行等待和RGBC状态,如图16所示。在完成并返回空闲状态时,只要PON和AEN保持启用状态,设备将自动开始一个新的WaitRGBC周期。

 

l  Sleep -- 低功耗睡眠状态

l  IdIe -- 空闲状态

l  Wait and RGBC -- 工作状态(等待和RGBC状态)

 

RGBC操作

 

TCS3472光数字转换器包含一个3×4光电二极管阵列,集成光电二极管电流、数据寄存器、状态机和IIC接口的四个模数转换器(ADC), 3 × 4光电二极管阵列由红滤光、绿滤光、蓝滤光和透明(未滤光)光电二极管组成。此外,光电二极管被涂上ir阻挡滤波器。四个积分adc同时将放大的光电二极管电流转换为16位数字值。在完成一个转换周期后,结果被转移到数据寄存器,数据寄存器是双缓冲的,以确保数据的完整性。所有的内部定时以及低功耗等待状态都由状态机控制。

TCS3472的数据通信是通过一个快速,高达400khz,两线PC串行总线完成的。工业标准1PC总线简化了与微控制器和嵌入式处理器的直接连接。

除了IIC总线, TCS3472提供了一个单独的中断信号输出。当中断被启用,并且超过了用户定义的阈值时, active-low中断将被保持,直到控制器将其清除为止。这个中断特性通过消除对TCS3472的轮询,简化并提高了系统软件的效率。用户可以定义上中断阈值和下中断阈值,并应用中断持久过滤器。中断持久过滤器允许用户在生成中断之前定义必要的连续超出阈值事件的数量。中断输出是开路漏极,因此可以与其他设备连接。

l  模块包含RGBC增益控制器(AGAIN)和4个集成的RGBC光电二极管数模转换器(ADC)

l  转换时间(ATIME)影响RGBC读取的分辨率和灵敏度

l  4个通道整合同时发生,转换周期完成后,结果将转移到颜色数据寄存器

l  传输采用双缓存,以保证数据在传输期间不读取无效数据,读取完成数据后才会触发下一次数据读取和转移

l  可屏蔽的高低阈值中断引脚

三、编程准备

(一) 通信时序

这是一个标准的IIC通信时序

l  写命令寄存器时序:开始信号—写7位IIC地址—写1位读写标识—等待从机ACK—写命令寄存器地址—等待从机ACK—写数据—等待从机ACK--……--停止信号

l  读命令寄存器时序:开始信号—写7位IIC地址—写1位读写标识—等待从机ACK—写命令寄存器地址—等待从机ACK—开始信号—写7位IIC地址—写1位读写标识—等待从机ACK—等待从机数据—写应答ACK—等待从机数据—写应答ACK--……--停止信号

(二)  芯片的IIC地址

从时序可以看出,这是7位地址,所以有:

写地址:0x29<<1

读地址:(0x29<<1)|0x01

(三)   寄存器(命令)发送

CMD

发送命令最高位必须为1

TYPE:

发送类型:

00,重复字节协议,也就是读取数据时将一直读取当前寄存器的数据

01,自动递增协议,读取数据时会自动递增寄存器

10,不使用,保留

11,与SF同时使用

ADDR:

寄存器(命令)地址

寄存器地址描述

 

通常命令寄存器的头部为:0x80

所以寄存器地址应该是:0x80|Address

(四)寄存器数据分析

0x00启动寄存器

 

 

东提示:我们不使用中断,所以不用配置中断相关寄存器,PON写1后要等待至少2.4ms再开启AEN。PON是振荡器开启,AEN是RGBC转换开启

0x01 RGBC转换时间

RGBC Count = (256 − ATIME) × 1024

0x0f 增益控制

控制寄存器为模拟块提供8位杂项控制。这些位通常控制增益设置和/或二极管选择等功能。

 

0x12 设备ID

ID寄存器提供零件号的值。ID寄存器是只读寄存器。

东提示:通常读取ID用来判断与芯片是否通信成功

0x13 状态寄存器

状态寄存器提供设备的内部状态。

这个寄存器是只读的。

东提示:通常读取AVALID的值,如果是1的话表示RGBC转换完成,就可以读取RGBC的数据

0x14 - 0x1B RGBC通道数据寄存器

Clear、red、green、blue为16位数据。为了确保数据被正确读取,一个两字节的read IIC事务应该在命令寄存器中设置一个读字协议位。通过这个操作,当读低位字节寄存器时,高位8位被存储到阴影寄存器中,然后再读高位字节。高位寄存器将读取正确的值,即使是额外的值ADC集成周期结束于读取低位寄存器和高位寄存器之间。

四、 程序实现

(一) 硬件介绍

模块原理图

IIC的两条通信线一定要做上拉,所以初始化配置IO为:

SCL:上拉,推挽输出

SDA:上拉输入

接线:

(二)  CubeMX配置

IO配置

串口配置

(三)  Python界面编程

参考:

Python 游戏之旅(Pygame)

https://www.cnblogs.com/dongxiaodong/p/10015451.html

 

编程思路:

  1. 界面初始化
  2. 串口收到数据
  3. RGB三色数据提取
  4. 颜色更改与显示

 


 

演示视频:https://www.bilibili.com/video/BV19f4y1z75Q

 

原文地址:https://www.cnblogs.com/dongxiaodong/p/14402521.html

 


 

五、 我的微信

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dongxiaodongvip/article/details/113810546

智能推荐

阿里云存储oss 的9个技巧_x-oss-meta-etag__doubleKill的博客-程序员秘密

阿里云存储OSS使用技巧之一:在OSS上读写文件从你的代码中,把fopen()、fclose()这类的函数删掉吧!取而代之的是RESTful风格的HTTP请求:写文件是PUT;读文件是GET;获取文件属性是HEAD;删除文件是DELETE。在搭建好的OSS Python开发环境下,直接用上步声明的my_store对象创建并写入一个新文件(OSS称之为Object)的代码如下:res =

程序员如何应对中年危机,为什么数据库会丢失数据_普通网友的博客-程序员秘密

前言今天逛论坛,看到了一位35岁的老程序员发的博文,看完内容后我又活了,35岁挑战华为社招,竟然凭实力在半个月内经历4轮面试后成功拿到了offer,不得不佩服这位大哥,35岁还这么强我们这些后辈还怕啥!当然重要的是这位程序员大佬最后总结的华为4轮面试所有的面试题和需要注意的事情。所以结合这个老哥面试问的问题和最近华为最新的面试题,重新整理了一下近期华为的面试题,满满干货,分享给大家。抖音Java岗后端一面(7.22)(47分钟)1. 自我介绍还没完屏幕就黑了。。重连后直接问问题。。2. has

Java串口通信详解...【Pnoker】_pnoker的博客-程序员秘密

Java串口通信详解Java串口通信实例Java串口通信JavaJava实例Java详解

poj2155-二维树状数组 区间更新 单点查询_WilliamSun0122的博客-程序员秘密

就像我之前讲二维树状数组单点更新、区间查询一样,二维树状数组与一维没有本质差别,多维的可以通过一维的类推出来。现在我们由一维树状数组的区间更新、单点查询类推一下二维树状数组的区间更新、单点查询。 首先二维树状数组的区间更新应该是一个矩形区域,我们要更新(x1,y1)到(x2,y2)(x1<=x2,y1<=y2)的矩形区域时由一维类推应该这样:update(x1,y1)-update(x1,y1+1

ip打包后如何加入 xilinx_Vivado将模块封装的两种方法(EDF/EDIF文件和IP核)_Eva-ModUMP45的博客-程序员秘密

写在前面参考文章:https://www.cnblogs.com/kingstacker/p/11508111.html软件版本:Vivado2017.4封装生成.edf,.edif文件1建立工程设置顶层模块将需要封装的模块设置为顶层模块。(shift_bus模块) 2、综合待封装模块在设置选项的综合设置中选中打平整个设计,防止别人看到模块层次。 设置-mode out_of_context属性,...

[zz]关于文件读写--Linux的内存映射解决大文件读写_miao_新浪博客_a13393665983的博客-程序员秘密

[zz]关于文件读写--Linux的内存映射解决大文件读写_miao_新浪博客 [zz]关于文件读写--Linux的内存映射解决大文件读写_miao_新浪博客[zz]关于文件读写--Linux的内存映射解决大文件读写_miao_新浪博客[zz]关于文件读写--Lin...

随便推点

opencv调用ssd模型来用于物体检测_opencv 物体模型_雅痞匪徒(Nike)的博客-程序员秘密

之前对ssd的整个原理已经了解了,对于整个网络走动的流程,loss的计算这些,已经心里有数了,那么接下来,要么去训练ssd模型,要么就去利用ssd去测试模型,这不,我们现在就学习一下利用opencv来使用ssd,在这之前,感谢一只稚嫩的小金毛提供的代码和模型,这位作者写的挺好的,但是我个人觉得还是有些地方没有讲清楚,比如模型预测后输出的每个值的含义,而且在筛选预测的边框的时候,我觉得还能再优化,所...

idea maven项目pom文件有删除线解决办法_pom文件中不小心删除了几行_米斯特程序猿的博客-程序员秘密

项目中不知道操作了什么,造成一个maven模块不能被识别解决办法,打开preference,按照如下图方式找到对应的模块,去掉前面的钩即可参考

模拟实现页面置换算法(OPT、FIFO、LRU)C++代码_柃歌的博客-程序员秘密

一、C++代码实现#include &lt;iostream&gt;#include &lt;algorithm&gt;#include &lt;cstring&gt;#include &lt;queue&gt;#include &lt;unordered_set&gt;#include &lt;ctime&gt;using namespace std;typedef pair&lt;int, int&gt; PII;const int N = 1010;//执行序列最大长度const

为什么选择IT行业,转行程序员的8个理由_千锋广州小蚊子的博客-程序员秘密

知乎上有这样一个问题:“你后悔进入IT行业吗?”,此问题得到几十位互联网从业者的回答,全部无悔!的确,IT作为新兴的产业已经成为我国重要的经济增长点,国家更是大力扶持,当前我国正在深入推进“互联网+”、人工智能等重大国家战略,这正说明IT行业对经济发展的重要作用。由此可见,IT行业未来一段时期内都会保持增长的态势,政府将积极促进IT产品更新换代,推动中国由IT大国向IT强国转变。无论是从大的方...

2017年机关工勤计算机试题,机关工勤人员计算机Excel理论试题库.docx_阿卞是宝藏啊的博客-程序员秘密

1、在Excel2003中Sum表示( A )。A、函数求和B、对数据项求商C、函数求积D、函数求差2、Excel2003中,“查找范围”下拉列表指的是搜索单元格的值,搜索其中所隐含的( C ),还是搜索附加到单元格中的批注。A、字符B、标号C、公式D、注释3、在Excel2003中,通过改变( B )就能把整个单元格中的数据完全显示出来。A、行高和行宽B、行高和列宽C、列高和列宽D、整个行高4、...

H5新增_xxxfanggo的博客-程序员秘密

这些新特性都有兼容性问题,基本是IE9+以上的浏览器才支持HTML5新增的语义化标签&lt;header&gt;:头部标签&lt;/header&gt;&lt;nav&gt;:导航标签&lt;article&gt;:内容标签&lt;section&gt;:定义文档某个区域&lt;aside&gt;:侧边栏&lt;footer&gt;:尾部注意:这种语义化标准主要是针对搜索引擎的这些新标签页面中可以使用多次在IE9中,需要把这些元素使用多次其实,我们移动端更喜欢使用这些标签新增的多