可驅(qū)動20個LED對數(shù)/點狀/條狀的微控制器
美國國家半導體公司的LM3914點狀/條狀顯示驅(qū)動器已經(jīng)面市20多年了,但仍然在設(shè)計者中廣泛流行。LM3914可以檢測模擬電壓,并使10個 LED顯示,方法是以點狀模式點亮10個LED中的一個,或以條形圖模式逐個點亮LED。最近,一種模擬輸入電壓顯示器的一項應(yīng)用,要求能夠以線性或?qū)?shù)級格式實現(xiàn)10個以上LED的顯示。根據(jù) LM3914的數(shù)據(jù)資料,可以將多支3914級聯(lián)起來,獲得10個以上LED的顯示(參考文獻1),但即使這么做,LM3914也只能線性地顯示輸入電壓。(編輯注:美國國家半導體還提供 LM3915,這是一款對數(shù)型3dB步長版,而LM3916則適合音頻應(yīng)用,以音量單位顯示輸入。)
本文應(yīng)用要求超出了LM3914提供的靈活性,它使用了一個基于Atmel AVR系列ATTiny13微控制器的電路,有1kB程序內(nèi)存、一個四通道10位ADC,以及6個通用I/O 腳。調(diào)整電路的固件就可以實現(xiàn)0 V ~ 5V輸入電壓范圍內(nèi)的線性或?qū)?shù)型縮放。
圖1中的電路以20個連續(xù)顯示輸入電壓。當開關(guān)S1關(guān)閉時,即將顯示凍結(jié)在當時的電流水平讀數(shù)。微控制器6個I/O腳中的5個控制著所有20個LE D和開關(guān)。剩下的I/O腳配置為一個 ADC 輸入通道,負責接收模擬輸入電壓。微控制器采用 Charlieplexing,這是一種用I/O線驅(qū)動多達N×(N-1)個LED的方法,這樣只用5個I/O腳就可以驅(qū)動20個 LED(參考文獻2 ~ 4)。
固件以C語言編寫,并用AVR-GCC編譯,這是一個以Windows和Linux版提供的免費C編譯器和匯編器。它使用運行在中斷驅(qū)動自由模式的 Tiny13內(nèi)部 10 位 ADC,將模擬輸入電壓轉(zhuǎn)換為一個數(shù)字值。每次轉(zhuǎn)換完成時,ADC 產(chǎn)生一個由子程序讀出的中斷,中斷將 ADC 轉(zhuǎn)換輸出保存在一個共享變量中。
為了產(chǎn)生無閃爍的顯示,一個內(nèi)部定時器從一個9.6MHz系統(tǒng)時鐘產(chǎn)生一個1875Hz中斷,以大于90Hz的速率驅(qū)動多路輸出的 LED。將ADC計數(shù)除以一個常數(shù)即得到輸入電壓的一個線性顯示。用一個查找表縮放ADC計數(shù)就產(chǎn)生一個對數(shù)顯示。圖2表示確定該查找表值的對數(shù)轉(zhuǎn)換曲線。用于線性和對數(shù)縮放的 ATTiny13控制程序版本都可以從本設(shè)計實例處下載??梢詫@些源碼作修改,而只顯示0V ~ 5V輸入電壓中的某個子區(qū)間。例如,可以設(shè)定1V ~ 3V的線性顯示范圍,或2V ~ 3V輸入電壓的對數(shù)縮放。
參考文獻
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.
評論