本文应用要求超出了LM3914提供的灵活性,它使用了一个基于Atmel AVR系列ATTiny13微控制器的电路,有1kB程序内存、一个四通道10位
D和开关。剩下的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输入电压的对数缩放。