s丅7318是啥芯片_透彻解析LED驱动芯片HT1632C指令集与驱动编程
HT1632C是一款很常用的LED(數(shù)碼管或點陣)驅動芯片,雖然官方已經宣布該芯片明年(2021年)即將壽終正寢(停產),但是相同廠家生產的同系列芯片的控制方式通常是相同的(事實上,大多數(shù)LED驅動芯片差別也不大),所以了解HT1632C的控制原理對快速上手其它芯片也有一定的積極意義。
HT1632C內部也有一片顯存(DisplayRAM, DRAM),我們在文章《液晶顯示模組LCD1602之指令篇(1)》中已經說過:你往顯存寫什么,屏幕上就會相應顯示什么。這句話對于HT1632C(以及絕大多數(shù)顯示器件驅動芯片)也是適用的,所以我們首先需要明確:LED顯示狀態(tài)與顯存數(shù)據(jù)的對應(映射)關系。數(shù)據(jù)手冊標記了下圖所示的DRAM映射表。
這張表是針對24個OUTBIT與16個COM的配置(32個OUTBIT與8個COM配置對應的映射表稍有不同,有興趣的讀者可參考數(shù)據(jù)手冊),這可以通過命令來設置,你很快就會知道。另外,我們還用紅色位號(VD11、VD12、VD21、VD22)標記了4個數(shù)據(jù)位,有分教!
上表告訴我們:如果OUTXX行與COMXX列交叉的單元格數(shù)據(jù)位為1,則相應的LED就會被點亮,反之則熄滅,簡單吧!例如,COM0列與OUT1行交叉數(shù)據(jù)位為1,則VD12就會被點亮。當然,前提是你的硬件電路是正確的,我們就使用數(shù)據(jù)手冊中的典型應用電路,如下圖所示:
我們標記了LED點陣左上角四個LED的位號,VD11表示第1行第1列,VD12表示第1行第2列,其它依此類推。需要注意的是,電路圖中LED的位置相對于DRAM映射表旋轉了90度,所以VD11的狀態(tài)應該取決于DRAM映射表中COM0與OUT0交叉的單元格數(shù)據(jù)位,也就是地址0x00的D0位,VD12的狀態(tài)應該取決于DRAM映射表中COM0與OUT1交叉的單元格數(shù)據(jù)位,也就是地址0x04的D0位,對不對?
為了修改DRAM數(shù)據(jù),我們先來看看它的指令集,如下圖所示(紅色框內的指令是后續(xù)將要使用到的):
注意“ID”列,在HT1632C被稱為模式識別碼,簡單的說,它用來標記傳輸?shù)拇袛?shù)據(jù)的具體意義。HT1632C有4種模式識別碼,如下表所示:
我們來看看寫DRAM數(shù)據(jù)時序(WriteData),如下圖所示:
首先發(fā)送模式識別碼“101”,表示后續(xù)跟隨的11位串行數(shù)據(jù)是往DRAM地址(7位)中寫入數(shù)據(jù)(4位)。需要特別注意的是:7位地址的最高位先發(fā)送,而4位數(shù)據(jù)的最低位反而先發(fā)送。在眾多使用串行通訊接口的控制器件中,這可以說是比較“奇葩”的位序定義(正常邏輯來講,要么都是高位先行,或都是低位先行),除非你定義的4位數(shù)據(jù)本身就是反過來的,否則我們無法將地址與數(shù)據(jù)直接合并進行發(fā)送(必須先將位序反過來)。
例如,現(xiàn)在需要點亮VD22(對應地址0x4),那么往HT1632C發(fā)送的串行數(shù)據(jù)應該為0x2844(0b101_0000100_0100),而不是0x2842(0b101_0000100_0010)。
發(fā)送命令的時序如下圖所示:
往HT1632C寫命令時發(fā)送的串行數(shù)據(jù)是:模式識別碼“100”+9位具體的命令位,總計12位(比寫DRAM數(shù)據(jù)時少2位)。例如,我們要打開LED驅動(LED ON),則需要發(fā)送的串行數(shù)據(jù)為0b100_0000_0011_x(x表示無效位,即0x806或0x807)。
還有連續(xù)寫數(shù)據(jù)/命令以及讀/改寫數(shù)據(jù)的時序,限于篇幅不再贅述,有興趣的讀者可參考數(shù)據(jù)手冊。
咱們使用VisualCom軟件平臺來驗證一下,調出“基于HT1632C的24X16 LED點陣模組”后執(zhí)行預置數(shù)據(jù),相應的仿真效果如下圖所示:
該仿真器件的LED位置與電路圖是一一對應的,我們來看看相應的預置數(shù)據(jù),如下圖所示:
預置數(shù)據(jù)的位序定義與時序完全一樣,例如第四條數(shù)據(jù)“806”就是我們剛剛介紹過的“打開LED驅動輸出(LED ON)”指令。
前面四條是初始化HD1632C的指令。我們首先將COM引腳配置為16個PMOS輸出結構,該配置的依據(jù)來源于前面的硬件電路,圖中最下方的提示“Common are PMOS open drain outputstructures”。由于電路中HT1632C使用了16個COM,所以應該設置為16 PMOS結構,設置為NMOS結構是無法點亮LED點陣的,而如果設置為8 PMOS結構,下半部分的LED將不會被點亮(PMOS與NMOS輸出結構的具體區(qū)別可參考數(shù)據(jù)手冊,本文不再贅述)。
其次,我們把HT1632C配置為主模式,因為從模式主要用于多芯片級聯(lián)應用時,我們的硬件電路只使用了一片HT1632C。
再次,我們打開了系統(tǒng)振蕩器與LED驅動時序生成電路(默認處于關閉狀態(tài)),因為動態(tài)掃描的時序都是基于振蕩器產生的時鐘,芯片沒有了時鐘就相當于人的心臟沒有跳動,自然不可能驅動點陣模塊顯示任何信息。
最后,我們開啟了LED驅動輸出功能,這樣芯片輸出才能發(fā)出掃描LED點陣驅動時序(默認處于關閉狀態(tài))。實際上,我們還應該配置“使用片內RC振蕩時鐘源(RC)”,但是由于上電后這一項是默認的,所以這一項配置并不是必須的。
執(zhí)行完前面四條預置數(shù)據(jù)后,DRAM中的數(shù)據(jù)就可以顯示了,接下來全部是寫數(shù)據(jù)操作。為了顯示16X16點陣字體的漢字“電”,我們首先需要進行取模操作,如下圖所示:
因為每個DRAM地址中的4位數(shù)據(jù)對應4個COM(行),所以我們得縱向取模,且每次只寫入4位數(shù)據(jù),方向為從左到右、由上至下(見DRAM映射表中藍色箭頭方向)。DRAM地址0x0~0x3對應的字模數(shù)據(jù)都是0,所以我們首先寫入了4個0x0(盡管VisualCom軟件平臺已經將HT1632C的RAM數(shù)據(jù)全部初始化為0x0,但實際應用時還是得重新寫入,這樣可以避免芯片上電后DRAM出現(xiàn)隨機數(shù)據(jù)),然后往DRAM地址 0x4寫入了0x8。這里再次提醒一下:字模的提取順序是下高位,這與前述DRAM映射表是對應的,但是寫入的串行數(shù)據(jù)中的4位DRAM數(shù)據(jù)是反過來的(低位先行),所以實際預置數(shù)據(jù)的低4位應該是0x1(你可以觀察“內存窗口”中的DRAM數(shù)據(jù),與提取的字模數(shù)據(jù)是完全對應的)。讀者可自行分析剩下的預置數(shù)據(jù),此處不再贅述。
有些人可能會叫道:這叫啥的VisualCom軟件平臺不是瞎編的嘛!我在上面的命令表中可沒有看到什么寄存器!其實與HD44780一樣,我們給HT1632C發(fā)送命令就相當于設置一些寄存器,只不過數(shù)據(jù)手冊沒有將它們像HD44780那樣命名而已,VisualCom軟件平臺為了方便我們觀察芯片的狀態(tài),做了一些額外的工作將這些寄存器提取出來了而已!
舉個小例子,我們對比一下“SYS OFF”與“SYS ON”指令,就會發(fā)現(xiàn)只有一位是有差別的,VisualCom軟件平臺顯示的寄存器“SYS”就是這個數(shù)據(jù)位的狀態(tài)(M/S表示Master/Slave,COM表示COMMON OPTIONS, DUTY表示PWM DUTY)。
總結
以上是生活随笔為你收集整理的s丅7318是啥芯片_透彻解析LED驱动芯片HT1632C指令集与驱动编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 德利捷读码器设置软件_S7-1500PL
- 下一篇: ae中心点重置工具_AE中图形绘制的6大