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