可驱动20个LED对数/点状/条状的微控制器
美国国家半导体公司的LM3914点状/条状显示驱动器已经面市20多年了,但仍然在设计者中广泛流行。LM3914可以检测模拟电压,并使10个 LED显示,方法是以点状模式点亮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 V ~ 5V输入电压范围内的线性或对数型缩放。
图1中的电路以20个连续显示输入电压。当开关S1关闭时,即将显示冻结在当时的电流水平读数。微控制器6个I/O脚中的5个控制着所有20个LE 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输入电压的对数缩放。
参考文献
1. LM3914 data sheet.
2. Lancaster, Don, "Tech Musings," August 2001.
3. "Charlieplexing: Reduced Pin-Count LED Multiplexing," Maxim Application Note 1880, Feb 10, 2003.
4. Benabadji, Noureddine, "PIC microprocessor drives 20-LED dot- or bar-graph display," EDN, Sept 1, 2006, pg 71.
微控制器 相关文章:
- μC/OS-II下通用驱动框架的设计与实现(07-23)
- 微控制器省电管理方法(05-04)
- 基于DSP和Cygnal单片机的移动数据处理传输系统 (07-06)
- 从硅片工艺技术到嵌入式软件的全方位低功耗系统设计(01-01)
- 基于IAP的STM32程序更新技术(01-23)
- 发挥ARM Cortex-M3和M4微控制器最大作用的要诀(01-21)