實驗環境
Matlab版本: 2021b
操作系統 :Win10專業版
模型與原理圖
本次實驗所用到的simulink模型如圖5.2所示,電路原理圖如圖5.3所示,實驗效果為數碼管從‘0’~‘A’輪流顯示,如圖5.1所示。
圖5.1 數碼管驅動顯示實驗效果
圖5.2 數碼管顯示I2C驅動模型
圖5.3 CH422G共陰數碼管電路連接
基礎模型介紹與分析
1、數碼管簡介
數碼管簡單來說就是將多個LED有規律的排列在一起,實驗中用到的數碼管外觀如圖5.4所示,其型號為:FJ3461AH,三維尺寸:30.00mmx14.00mmx7.20mm,數碼管內部為共陰極,內部電路原理和引腳定義如圖5.5圖所示。
圖5.4 數碼管實物外觀
圖5.5 數碼管尺寸及內部電路原理圖
2、CH422G芯片介紹
數碼管驅動芯片CH422引腳分布如圖5.6所示,引腳定義解釋參考表5.1。
圖5.6 數碼管驅動芯片
表5.1 CH422G芯片引腳功能說明
引腳號 | 引腳名稱 | 類型 | 引腳說明 |
---|---|---|---|
14 | VCC | 電源 | 正電源,持續電流不小于 100mA |
7 | GND | 電源 | 公共接地,持續電流不小于 100mA |
1~4、12、13、15、16、 | SEG0~SEG7 | 三態輸出及輸入 | 數碼管的段驅動,高電平有效,雙向輸入輸出,內置弱上拉電阻 |
8~11 | DIG0~DIG3 | 推挽或開漏輸出 | 數碼管的字驅動,低電平有效,通用輸出,可選開漏輸出,低電平有效 |
5 | SDA | 開漏輸出及輸入 | 2 線串行接口的數據輸入和輸出,內置上拉電阻 |
6 | SCL | 輸入 | 2 線串行接口的數據時鐘 |
3、simulink模型分析
本次實驗中只用到I2C寫模型,寫I2C數據核心模型如圖5.7所示,其參數設置如圖5.8所示,其中“I2C module”用于設置選用哪個I2C,即STM32中常說的I2C0,I2C1,I2C2,實驗中用到的I2C芯片連接在I2C2(PB10->SCL,PB11->SDA)上,"Slave address"用于設置I2C器件地址,圖中為了便于理解,使用了一個hex2dec('24')模型轉換函數,“Slave register addr”用于設置寄存器地址,參數設置基本就介紹這些,后面用到其它方式再逐一介紹,這里面的具體參數含義稍后為大家解答。
圖5.7 I2C向寄存器寫數據模型
圖5.8 I2C寫模型參數設置
在驅動CH422芯片前,我們首先要知道進行哪些參數設置和數據寫入才能使數碼管正常工作,如下代碼所示,先對芯片進行設置(讀者朋友對著操作即可,此代碼為官方提供的參考代碼,官方手冊上只有0x48和0x46有簡要說明),我們只需往0x48,0x44,0x46地址中寫入固定數據,最后往0x60地址中寫如要顯示的數據即可。
/* 共陰數碼管編碼表 0~F */
unsigned char BCD_decode_tab[ 0x10 ] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 }; //0--9數碼管數字
CH422_Write(0x48,0x01); /* 設置輸出引腳 DIG0~DIG3 開漏輸出使能 */
CH422_Write(0x44,0x00); /* 設置低8位開漏輸出命令,默認方式 */
CH422_Write(0x46,0x00); /* DIG0~DIG3使引腳輸出低電平 */
CH422_Write(0x60,BCD_decode_tab[i]); /* 設置雙向輸入輸出命令,顯示數據用 */
這里作者首先用C語言方式正常驅動數碼管工作,如圖5.9所示,這是參數設置過程正確時邏輯分析儀捕獲到的I2C波形,圖5.10為正常顯示數字過程中捕獲到的I2C波形。
圖5.9 C語言方式正常設置數碼管波形
圖5.10 C語言方式正常顯示數字波形
為了實現上述相同的效果,我們需要在simulink對參數進行設置來達到上述效果,0x48,0x44,0x46參數設置如圖5.11~5.13所示,細心的讀者應該有發現,器件地址與C語言寫的地址不一樣,這里作者暫時沒找到原因,但是好在還有一定的規律可循,最終得到的波形如圖5.14所示,與C語言驅動的還是有點不一樣,只代表其能工作,圖中首次出現一個脈沖符號樣式,"Enable"模型它是作為子模型的使能用,另外就是每一個寫入模型都是放在一個子模型中,方便對數據進行控制操作。
圖5.11 simulink中"0x48"寫入“0x01”
圖5.12 simulink中"0x44"寫入“0x00”
圖5.13 simulink中"0x46"寫入“0x00”
圖5.14 使用simulink模型初始化數碼管I2C波形
數碼管顯示數據顯示模型如圖5.15所示,地址部分還是一樣的問題,只是寄存器部分數據可以正常使用編碼表中的十六進制數據,最終的波形如圖5.16所示。
圖5.15 simulink中"0x60"寫入“0x3F”
圖5.16 simulink模型“0x60”顯示字母'A'指令波形
最后我們來看下整個模型,參考圖5.2中,除最后一個顯示模型,其它所有的I2C寫入模型都是順序執行,且都只執行一次,最終停留在在顯示字符'A'處。
實驗代碼統一放在碼云上,有問題歡迎給我留言!!
總結
本節實驗中實現了一個基本I2C驅動數碼管顯示實驗,模型中初步做到了參數初始化和數據顯示寫入,但是這里有個問題,我們無法使用硬件在環修改參數達到同步修改數碼管數據的效果,這里讀者朋友可以研究研究下。另外本節中還有個問題就是數據顯示不是循環顯示,大家也可以修改模型實現循環滾動顯示。
-
電路原理圖
+關注
關注
40文章
347瀏覽量
38318 -
STM32
+關注
關注
2270文章
10895瀏覽量
355748 -
數碼管
+關注
關注
32文章
1882瀏覽量
91064 -
I2C
+關注
關注
28文章
1484瀏覽量
123623 -
Simulink
+關注
關注
22文章
533瀏覽量
62381
發布評論請先 登錄
相關推薦
評論