自做模拟电路到LM3914显示驱动为用户提供可编程性。
美国国家半导体公司的老产品LM3914点/柱状显示驱动器已面市20多年了,但仍被广泛应用。LM3914可以感知模拟电压,并通过点状模式点亮10个LED中的一个,或以柱形图模式逐个点亮LED的方法,显示电压大小。最近,有个应用需要显示模拟输入电压,要求具有线性或对数刻度格式下10个以上等级的LED显示。根据 LM3914的数据手册,可以将多个3914级联,从而获得10个以上LED的显示(参考文献1),但即使这么做,LM3914也只能线性显示输入电压。(编辑注:美国国家半导体还提供 LM3915,这是一款对数型3dB步长版,而LM3916适于音频应用,以音量单位显示输入。)
本应用的要求超出LM3914提供的灵活性,使用一个基于Atmel AVR系列ATTiny13微控制器电路,其具有1kB程序存储器、一个四通道10位ADC,以及6个通用I/O 口。调整电路固件就可以实现0~5V输入电压范围内的线性或对数型转换。
图1中电路以20个LED连续显示输入电压。当开关S1关闭时,将显示冻结在其后电流水平的读数上。微控制器6个I/O口中的5个控制着所有20个LED和开关。剩下的I/O口配置成ADC输入通道,接收模拟输入电压。微控制器采用 Charlieplexing的方法(这是一种用I/O口线驱动多达N×(N-1)个LED的方法),只用5个I/O口就可以驱动20个 LED(参考文献2 ~ 4)。

固件用C语言编写,并用AVR-GCC编译,这是Windows和Linux版本下C和汇编编译器的免费软件。它使用可自由运 行在中断驱动模式的Tiny13的内部10位ADC,将模拟输入电压转换成数字量。每次转换完成时,ADC 产生一个由子程序读的中断,这个中断将 ADC转换输出结果保存在一个共享变量中。
为产生无闪烁的显示,一个内部定时器由9.6MHz系统时钟产生一个1875Hz的中断,以大于90Hz的速率驱动多路LED。将ADC计数值除以一个常数得到输入电压的线性显示。用查找表衡量ADC计数产生对数显示。图2表示确定该查找表值的对数转换曲线。用于线性和对数显示的 ATTiny13控制程序版本都可从本设计实例处下载。可对源代码做修改,而只显示0V~5V输入电压中的某个子区间。例如,可以设定1V~3V为线性显示范围,或2V ~ 3V输入电压为对数显示。

|