精通LED驅動芯片HT1632C指令與編程應用


HT1632C是一款很常用的LED(數碼管或點陣)驅動芯片,雖然官方已經宣布該芯片明年(2021年)即將壽終正寢(停產),但是相同廠家生產的同系列芯片的控制方式通常是相同的(事實上,大多數LED驅動芯片差別也不大),所以了解HT1632C的控制原理對快速上手其它芯片也有一定的積極意義。

HT1632C內部也有一片顯存(Display RAM, DRAM),我們在文章《液晶顯示模組LCD1602之指令篇(1)》中已經說過:你往顯存寫什么,屏幕上就會相應顯示什么。這句話對於HT1632C(以及絕大多數顯示器件驅動芯片)也是適用的,所以我們首先需要明確:LED顯示狀態與顯存數據的對應(映射)關系。數據手冊標記了下圖所示的DRAM映射表。

 

這張表是針對24個OUTBIT與16個COM的配置(32個OUTBIT與8個COM配置對應的映射表稍有不同,有興趣的讀者可參考數據手冊),這可以通過命令來設置,你很快就會知道。另外,我們還用紅色位號(VD11、VD12、VD21、VD22)標記了4個數據位,有分教!

         上表告訴我們:如果OUTXX行與COMXX列交叉的單元格數據位為1,則相應的LED就會被點亮,反之則熄滅,簡單吧!例如,COM0列與OUT1行交叉數據位為1,則VD12就會被點亮。當然,前提是你的硬件電路是正確的,我們就使用數據手冊中的典型應用電路,如下圖所示:

 

我們標記了LED點陣左上角四個LED的位號,VD11表示第1行第1列,VD12表示第1行第2列,其它依此類推。需要注意的是,電路圖中LED的位置相對於DRAM映射表旋轉了90,所以VD11的狀態應該取決於DRAM映射表中COM0與OUT0交叉的單元格數據位,也就是地址0x00的D0位,VD12的狀態應該取決於DRAM映射表中COM0與OUT1交叉的單元格數據位,也就是地址0x04的D0位,對不對?

為了修改DRAM數據,我們先來看看它的指令集,如下圖所示(紅色框內的指令是后續將要使用到的):

 

注意“ID”列,在HT1632C被稱為模式識別碼,簡單的說,它用來標記傳輸的串行數據的具體意義。HT1632C有4種模式識別碼,如下表所示:

 

我們來看看寫DRAM數據時序(Write Data),如下圖所示:

 

首先發送模式識別碼“101”,表示后續跟隨的11位串行數據是往DRAM地址(7位)中寫入數據(4位)。需要特別注意的是:7位地址的最高位先發送,而4位數據的最低位反而先發送。在眾多使用串行通訊接口的控制器件中,這可以說是比較 “奇葩”的位序定義(正常邏輯來講,要么都是高位先行,或都是低位先行),除非你定義的4位數據本身就是反過來的,否則我們無法將地址與數據直接合並進行發送(必須先將位序反過來)。

例如,現在需要點亮VD22(對應地址0x4),那么往HT1632C發送的串行數據應該為0x2844(0b101_0000100_0100),而不是0x2842(0b101_0000100_0010)。

發送命令的時序如下圖所示:

 

往HT1632C寫命令時發送的串行數據是:模式識別碼“100”+9位具體的命令位,總計12位(比寫DRAM數據時少2位)。例如,我們要打開LED驅動(LED ON),則需要發送的串行數據為0b100_0000_0011_x(x表示無效位,即0x8060x807)。

還有連續寫數據/命令以及讀/改寫數據的時序,限於篇幅不再贅述,有興趣的讀者可參考數據手冊。

咱們使用VisualCom軟件平台來驗證一下,調出“基於HT1632C的24X16 LED點陣模組”后執行預置數據,相應的仿真效果如下圖所示:

 

該仿真器件的LED位置與電路圖是一一對應的,我們來看看相應的預置數據,如下圖所示:

 

預置數據的位序定義與時序完全一樣,例如第四條數據“806”就是我們剛剛介紹過的“打開LED驅動輸出(LED ON”指令。

前面四條是初始化HD1632C的指令。我們首先將COM引腳配置為16個PMOS輸出結構,該配置的依據來源於前面的硬件電路,圖中最下方的提示“Common are PMOS open drain output structures”。由於電路中HT1632C使用了16個COM,所以應該設置為16 PMOS結構,設置為NMOS結構是無法點亮LED點陣的,而如果設置為8 PMOS結構,下半部分的LED將不會被點亮(PMOS與NMOS輸出結構的具體區別可參考數據手冊,本文不再贅述)。

其次,我們把HT1632C配置為主模式,因為從模式主要用於多芯片級聯應用時,我們的硬件電路只使用了一片HT1632C。

再次,我們打開了系統振盪器與LED驅動時序生成電路(默認處於關閉狀態),因為動態掃描的時序都是基於振盪器產生的時鍾,芯片沒有了時鍾就相當於人的心臟沒有跳動,自然不可能驅動點陣模塊顯示任何信息。

最后,我們開啟了LED驅動輸出功能,這樣芯片輸出才能發出掃描LED點陣驅動時序(默認處於關閉狀態)。實際上,我們還應該配置“使用片內RC振盪時鍾源(RC)”,但是由於上電后這一項是默認的,所以這一項配置並不是必須的。

執行完前面四條預置數據后,RAM中的數據就可以顯示了,接下來全部是寫數據操作。為了顯示16X16點陣字體的漢字 “電”,我們首先需要進行取模操作,如下圖所示:

 

因為每個DRAM地址中的4位數據對應4個COM(行),所以我們得縱向取模,且每次只寫入4位數據,方向為從左到右、由上至下(DRAM映射表中藍色箭頭方向)。DRAM地址0x0~0x3對應的字模數據都是0,所以我們首先寫入了4個0x0(盡管VisualCom軟件平台已經將HT1632C的RAM數據全部初始化為0x0,但實際應用時還是得重新寫入,這樣可以避免芯片上電后DRAM出現隨機數據),然后往DRAM地址 0x4寫入了0x8。這里再次提醒一下:字模的提取順序是下高位,這與前述DRAM映射表是對應的,但是寫入的串行數據中的4位DRAM數據是反過來的(低位先行),所以實際預置數據的低4位應該是0x1。(你可以觀察“內存窗口”中的DRAM數據,與提取的字模數據是完全對應的),讀者可自行分析剩下的預置數據,此處不再贅述。

有些人可能會叫道:這叫啥的VisualCom軟件平台不是瞎編的嘛!我在上面的命令表中可沒有看到什么寄存器!其實與HD44780一樣,我們給HT1632C發送命令就相當於設置一些寄存器,只不過數據手冊沒有將它們像HD44780那樣命名而已,VisualCom軟件平台為了方便我們觀察芯片的狀態,做了一些額外的工作將這些寄存器提取出來了而已!

舉個小例子,我們對比一下“SYS OFF”與“SYS ON”指令,就會發現只有一位是有差別的,VisualCom軟件平台顯示的寄存器“SYS”就是這個數據位的狀態。(M/S表示Master/Slave,COM表示COMMON OPTIONS, DUTY表示PWM DUTY)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM