截图

描述:

l  STM32 HAL库编程

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

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

l  STM32 HAL库串口通信

l  Python界面使用Pygame

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

一、 基础认识

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/BV1Sv411a7qq

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


五、 我的微信

【情人节选帽子】TCS34725颜色传感器和Python图形界面编程(STM32 HAL库)的更多相关文章

  1. python图形界面编程

    EasyGui(easygui-docs-0.96\tutorial\index.html) import easygui as g import sys while 1: g.msgbox('mes ...

  2. python图形界面(GUI)设计

    不要问我为什么要用 python 来做这种事,我回到“高兴咋地”也不是不可以,总之好奇有没有好的解决方案.逛了一圈下来,总体上来说,python 图形界面有以下几个可行度比较高的解决方案. 1. py ...

  3. Python 图形界面(GUI)设计

    不要问我为什么要用 Python 来做这种事,我回到“高兴咋地”也不是不可以,总之好奇有没有好的解决方案.逛了一圈下来,总体上来说,Python 图形界面有以下几个可行度比较高的解决方案. 1. py ...

  4. Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sysfrom PyQt5.QtWidgets import QWidget,QApplicati ...

  5. python 图形界面开发

    用python来开发图形界面,确实不是很方便,没有c#,Java,甚至VB来得容易.几个控件拖拽,然后响应事件. 用python写脚本,或者web service来处理一般工作,绰绰有余.但有的时候, ...

  6. Python图形界面Tk

    最近在学习Python,在使用Tkinter做图形界面时遇到了几个小问题,网上查了一下,在Python2.x导入的是Tkinter,Python3则是tkinter.而且导入的simpledialog ...

  7. 使用PyQt进行Python图形界面程序开发文章目录

    ☞ ░ 前往老猿Python博文目录 ░ PyQt入门知识原来是作为老猿Python<Python基础教程目录>后的进阶学习章节存在,最近不少专栏作者提醒老猿整体的博文内容不错,但博文没有 ...

  8. 第十五章 使用PyQt进行Python图形界面程序开发

    在基础知识部分的最后一章<第十三章 Python基础篇结束章>的<第13.3节 图形界面开发tkinter>简单介绍了Python内置图形界面标准库tkinter,当时特别强调 ...

  9. Python 的简单图形界面编程【草】

    可用方案 Tkinter python官方附带,方便,但听说存在乱码问题 wxPython 更成熟一些,但需要额外安装(大约50M) pyQt 授权不够宽松 最短代码 Tkinter 待补充 wxPy ...

随机推荐

  1. 十一、UART&TTY驱动

    Linux系统中UART驱动和TTY驱动两者有着紧密的关系,它们不像I2C和SPI驱动是单独一个模块,分析时应当将它们看成一个整体来分析.UART驱动部分依赖于硬件平台,而TTY驱动和具体的平台无关. ...

  2. python-列表包字典-根据字典的某一个键的值来进行排序

    python-列表包字典-根据字典的某一个键的值来进行排序 列表包字典的数据结构 要实现按照字典中的某一个键所对应的值进行排序 有两种办法 方法一,使用列表的sort方法 由小到大排 列表.sort( ...

  3. JVM有哪些垃圾回收器

    JVM 的垃圾回收器 目录 JVM 的垃圾回收器 经典垃圾收集器 Serial 收集器 ParNew 收集器 Parallel Scavenge 收集器 Serial Old 收集器 Parallel ...

  4. MySQL 中的临时表

    在使用 explain 解析一个 sql 时,有时我们会发现在 extra 列上显示 using temporary ,这表示这条语句用到了临时表,那么临时表究竟是什么?它又会对 sql 的性能产生什 ...

  5. Django QuerySet API---数据库接口

    基本的创建与查询 # -*- coding: utf-8 -*- from django.http import HttpResponse from TestModel.models import T ...

  6. 无法获取 vmci 驱动程序版本: 句柄无效。 驱动程序 vmci.sys 版本不正确。请尝试重新安装 VMware Workstation。 打开模块DevicePowerOn电源失败。

    1.别打开电源,然后到虚拟机安装文件夹内.2.找到你的虚拟机系统文件中后缀为vmx的文件,右击用记事本或者Notepad++打开.2.搜索找到vmci0.present='TRUE',字段,把true ...

  7. Navicat 创建mysql存过、定时执行存过

    创建存过: 使用Navicat for MySQL工具创建存储过程步骤: 1. 新建函数(选择函数标签 -> 点击新建函数): 2.输入函数的参数个数.参数名.参数类型等: 3.编写存储过程: ...

  8. Mybatis报错:Could not find resource mybatis-conf.xml

    Mybatis报错:Could not find resource mybatis-conf.xml 报错截图: 报错内容: java.io.IOException: Could not find r ...

  9. Golang 性能优化实战

    小结: 1. 性能查看工具 pprof,trace 及压测工具 wrk 或其他压测工具的使用要比较了解. 代码逻辑层面的走读非常重要,要尽量避免无效逻辑. 对于 golang 自身库存在缺陷的,可以寻 ...

  10. 关于MinGW64的调试

    学习的机房电脑能老了,都是xp系统.安装DEV C++后发现为MinGW64. 而我常用编译调试命令为: g++ -g *.cpp -o a gdb a 编译出的程序无法调试. 一直以为,根本就无法调 ...