LED驱动芯片之型号介绍
2021-03-29 14:47
HT1632C是一种非常常用的LED(数码管或点阵)驱动芯片,尽管官方已经宣布它将在明年(2021年)结束(停产),但同一厂商生产的同一系列芯片,其控制方式通常是相同的(事实上,大多数LED驱动芯片之间的差别并不大),因此了解HT1632C的控制原理对于其他芯片的快速上手也有一定的积极意义。
在HT1632C内还有一个显存(DRAM或DRAM),在本文“LCD显示模块LCD1602的指令篇(1)”中我们已经说了:你向显存写入的内容,屏幕上就会相应地显示出来。这个句子同样适用于HT1632C(以及绝大多数的显示器驱动芯片),因此我们首先需要明确:LED显示状态和显存数据之间的对应(映射)关系。DRAM映射表被标记为下图所示。
这个表格是24个OUTBIT和16个COM的配置(32个OUTBIT和8个COM配置的映射表略有不同,感兴趣的读者可以参考数据手册),这些配置可以通过命令进行设置,您很快就会知道。此外,我们还用红色的比特编号(VD11,VD12,VD21,VD22)来标记4个数据比特,有分教!
上面的表格告诉我们:如果OUTXX和COMXX列交叉在一个单元格中,那么对应的LED就会亮起来,反之就会灭掉,很简单!举例来说,COM0列交叉到OUT1行的数据位为1,VD12将被激活。如果您的硬件电路正确,当然,我们会使用数据手册中的典型应用程序,如下图所示:
在LED点阵中左上方标有四个LED的位号,VD11代表第一行,VD12代表第一行,第二行,其他的依此类推。值得注意的是,电路图中LED的位置相对DRAM映射表旋转90度,因此VD11的状态应该依赖于DRAM映射表中COM0与OUT0交叉的单元格数据位,即地址0x04的D0位,VD12的状态应该依赖于DRAM映射表中COM0与OUT1交叉的单元格数据位,即地址0x04的D0位,对吧?
要修改DRAM数据,我们首先看一下它的指令集,如图所示(接下来将用红色框中的指令):
请注意HT1632C中的“ID”列,它是一种模式识别码,简单地说,它是用来标记所传输的串行数据的含义。HT1632C有4个模式识别码,显示在下面的表格中:
让我们看一下编写DRAM数据的时间顺序(WriteData),如下图:
先发一个模式识别码“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驱动程序(LEDON),就必须使用0b100_0000_0011_x(x代表无效位,即0x806或0x807)发送串行数据。
此外,还提供了连续的数据/命令和读取/重写数据的时间顺序,限于篇幅,有兴趣的读者可以参考数据手册。
我们利用VisualCom软件平台进行验证,调出“基于HT1632C的24X16LED点阵列”后执行了预置数据,仿真结果如下图所示:
这个模拟装置的LED的位置和电路图是一一对应的,我们要看相应的预设数据,如下图所示:
预调数据的顺序定义和时间顺序完全相同,比如前面介绍的第四个数据“806”就是“开启LED驱动输出(LEDON)”指令。
前4个指令是对HD1632C进行初始化。开始时,我们将COM引脚配置为16个PMOS输出结构,它是从前面的硬件电路开始,图中最下面的提示是“CommonarePMOSopendrainoutputstructures”。因为电路中的HT1632C使用了16个COM,所以应设置为16PMOS结构,设置为NMOS结构不能点亮LED点亮,如果设置为8PMOS结构,则下半部的LED就不能点亮(PMOS与NMOS输出结构的具体区别,请参阅数据手册,本文不再赘述)。
第二,我们将HT1632C配置为主控模式,因为主控模式主要用在多芯片级联应用中,硬件电路只使用一片HT1632C。
再一次,我们将系统振荡器打开,使用LED(默认为关机)来驱动时序生成电路,因为动态扫描的时序都是基于振荡器产生的时钟,芯片没有时钟就等于人的心脏没有跳动,自然也无法驱动点阵模块来显示任何信息。
最终,打开LED驱动输出功能,使芯片输出可以发出扫描LED点阵驱动时序(默认为关闭)。事实上,我们也应该配置“使用片内的RC振荡时钟源(RC)”,但由于缺省了上电后这个项目,所以这个配置并非必须的。
在您完成了前面四个预置数据之后,DRAM中的数据就可以被显示了,然后您就可以进行全部的数据处理。要用16X16点阵字体显示汉字“电”,我们首先要做取模操作,如下图所示:
由于每一个DRAM地址的4位数据对应着4个COM(行),因此我们必须纵向取模,并且每一次只有4位数据被写入,从左到右,由上到下(见DRAM映射表中的蓝色箭头方向)。由于DRAM地址0x0~0x3对应的字模数据都是0,因此我们首先要写4个0x0(虽然VisualCom软件平台已经将HT1632C的所有RAM数据初始化为0x0,但是在实际使用时还必须重新写,这样才能避免在芯片充电之后DRAM中的随机数据),然后再将0x8写到DRAM地址0x4。在此再一次提醒大家:字模提取的次序是下高位,这对应于前面提到的DRAM映射表,但写入的串行数据中的4位DRAM数据是反向的(在低位之前),因此实际的预置数据的下4位应该是0x1(你可以观察到“内存窗口”中的DRAM数据,与提取的字模数据完全对应)。读者可以自己分析剩余的预置数据,这里就不多说了。
有人也许会这样喊:这个VisualCom软件平台叫什么都不能瞎编!以上命令表中我看不到任何寄存器!实际上,和HD44780一样,我们向HT1632C发送命令等于是在设置一些寄存器,只是数据手册没有给它们命名成HD44780那样,VisualCom软件平台为便于我们观察芯片的状态,做了一些额外的工作来提取这些寄存器!
例如,我们将“SYSOFF”指令与“SYSON”指令进行比较,会发现其中只有一个指令是有区别的,VisualCom软件平台显示的寄存器“SYS”就是该数据的状态(M/S表示Master/Slave,COM表示COMMONOPTIONS,DUTY表示PWMDUTY)。
在HT1632C内还有一个显存(DRAM或DRAM),在本文“LCD显示模块LCD1602的指令篇(1)”中我们已经说了:你向显存写入的内容,屏幕上就会相应地显示出来。这个句子同样适用于HT1632C(以及绝大多数的显示器驱动芯片),因此我们首先需要明确:LED显示状态和显存数据之间的对应(映射)关系。DRAM映射表被标记为下图所示。
这个表格是24个OUTBIT和16个COM的配置(32个OUTBIT和8个COM配置的映射表略有不同,感兴趣的读者可以参考数据手册),这些配置可以通过命令进行设置,您很快就会知道。此外,我们还用红色的比特编号(VD11,VD12,VD21,VD22)来标记4个数据比特,有分教!
上面的表格告诉我们:如果OUTXX和COMXX列交叉在一个单元格中,那么对应的LED就会亮起来,反之就会灭掉,很简单!举例来说,COM0列交叉到OUT1行的数据位为1,VD12将被激活。如果您的硬件电路正确,当然,我们会使用数据手册中的典型应用程序,如下图所示:
在LED点阵中左上方标有四个LED的位号,VD11代表第一行,VD12代表第一行,第二行,其他的依此类推。值得注意的是,电路图中LED的位置相对DRAM映射表旋转90度,因此VD11的状态应该依赖于DRAM映射表中COM0与OUT0交叉的单元格数据位,即地址0x04的D0位,VD12的状态应该依赖于DRAM映射表中COM0与OUT1交叉的单元格数据位,即地址0x04的D0位,对吧?
要修改DRAM数据,我们首先看一下它的指令集,如图所示(接下来将用红色框中的指令):
请注意HT1632C中的“ID”列,它是一种模式识别码,简单地说,它是用来标记所传输的串行数据的含义。HT1632C有4个模式识别码,显示在下面的表格中:
让我们看一下编写DRAM数据的时间顺序(WriteData),如下图:
先发一个模式识别码“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驱动程序(LEDON),就必须使用0b100_0000_0011_x(x代表无效位,即0x806或0x807)发送串行数据。
此外,还提供了连续的数据/命令和读取/重写数据的时间顺序,限于篇幅,有兴趣的读者可以参考数据手册。
我们利用VisualCom软件平台进行验证,调出“基于HT1632C的24X16LED点阵列”后执行了预置数据,仿真结果如下图所示:
这个模拟装置的LED的位置和电路图是一一对应的,我们要看相应的预设数据,如下图所示:
预调数据的顺序定义和时间顺序完全相同,比如前面介绍的第四个数据“806”就是“开启LED驱动输出(LEDON)”指令。
前4个指令是对HD1632C进行初始化。开始时,我们将COM引脚配置为16个PMOS输出结构,它是从前面的硬件电路开始,图中最下面的提示是“CommonarePMOSopendrainoutputstructures”。因为电路中的HT1632C使用了16个COM,所以应设置为16PMOS结构,设置为NMOS结构不能点亮LED点亮,如果设置为8PMOS结构,则下半部的LED就不能点亮(PMOS与NMOS输出结构的具体区别,请参阅数据手册,本文不再赘述)。
第二,我们将HT1632C配置为主控模式,因为主控模式主要用在多芯片级联应用中,硬件电路只使用一片HT1632C。
再一次,我们将系统振荡器打开,使用LED(默认为关机)来驱动时序生成电路,因为动态扫描的时序都是基于振荡器产生的时钟,芯片没有时钟就等于人的心脏没有跳动,自然也无法驱动点阵模块来显示任何信息。
最终,打开LED驱动输出功能,使芯片输出可以发出扫描LED点阵驱动时序(默认为关闭)。事实上,我们也应该配置“使用片内的RC振荡时钟源(RC)”,但由于缺省了上电后这个项目,所以这个配置并非必须的。
在您完成了前面四个预置数据之后,DRAM中的数据就可以被显示了,然后您就可以进行全部的数据处理。要用16X16点阵字体显示汉字“电”,我们首先要做取模操作,如下图所示:
由于每一个DRAM地址的4位数据对应着4个COM(行),因此我们必须纵向取模,并且每一次只有4位数据被写入,从左到右,由上到下(见DRAM映射表中的蓝色箭头方向)。由于DRAM地址0x0~0x3对应的字模数据都是0,因此我们首先要写4个0x0(虽然VisualCom软件平台已经将HT1632C的所有RAM数据初始化为0x0,但是在实际使用时还必须重新写,这样才能避免在芯片充电之后DRAM中的随机数据),然后再将0x8写到DRAM地址0x4。在此再一次提醒大家:字模提取的次序是下高位,这对应于前面提到的DRAM映射表,但写入的串行数据中的4位DRAM数据是反向的(在低位之前),因此实际的预置数据的下4位应该是0x1(你可以观察到“内存窗口”中的DRAM数据,与提取的字模数据完全对应)。读者可以自己分析剩余的预置数据,这里就不多说了。
有人也许会这样喊:这个VisualCom软件平台叫什么都不能瞎编!以上命令表中我看不到任何寄存器!实际上,和HD44780一样,我们向HT1632C发送命令等于是在设置一些寄存器,只是数据手册没有给它们命名成HD44780那样,VisualCom软件平台为便于我们观察芯片的状态,做了一些额外的工作来提取这些寄存器!
例如,我们将“SYSOFF”指令与“SYSON”指令进行比较,会发现其中只有一个指令是有区别的,VisualCom软件平台显示的寄存器“SYS”就是该数据的状态(M/S表示Master/Slave,COM表示COMMONOPTIONS,DUTY表示PWMDUTY)。