【情人節選帽子】TCS34725顏色傳感器和Python圖形界面編程(STM32 HAL庫)
截圖
描述:
l STM32 HAL庫編程
l 使用模擬IIC通信,方便程序移植
l Python界面編寫,蘑菇頭的帽子是什麼顏色
l STM32 HAL庫串口通信
l Python界面使用Pygame
視頻演示地址://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)
//www.cnblogs.com/dongxiaodong/p/10015451.html
編程思路:
- 界面初始化
- 串口收到數據
- RGB三色數據提取
- 顏色更改與顯示
演示視頻://www.bilibili.com/video/BV1Sv411a7qq
原文地址://www.cnblogs.com/dongxiaodong/p/14402521.html