截圖
描述:
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
程式設計思路:
- 介面初始化
- 串列埠收到資料
- RGB三色資料提取
- 顏色更改與顯示
演示視訊:https://www.bilibili.com/video/BV1Sv411a7qq
原文地址:https://www.cnblogs.com/dongxiaodong/p/14402521.html