【導(dǎo)讀】該項(xiàng)目系列的總體目標(biāo)是設(shè)計(jì)一個(gè)智能環(huán)境光監(jiān)視器,它可以分析室內(nèi)光線水平并執(zhí)行相應(yīng)的響應(yīng)操作,例如控制燈調(diào)光器。在開發(fā)這個(gè)項(xiàng)目的過程中,我們需要一種方便的方法來表示電流和電壓幅度的模數(shù)轉(zhuǎn)換值。
該項(xiàng)目系列的總體目標(biāo)是設(shè)計(jì)一個(gè)智能環(huán)境光監(jiān)視器,它可以分析室內(nèi)光線水平并執(zhí)行相應(yīng)的響應(yīng)操作,例如控制燈調(diào)光器。在開發(fā)這個(gè)項(xiàng)目的過程中,我們需要一種方便的方法來表示電流和電壓幅度的模數(shù)轉(zhuǎn)換值。因此,我們將從編寫固件開始,該固件可以將存儲(chǔ)在變量中的普通數(shù)字轉(zhuǎn)換為一系列單獨(dú)的數(shù)字,然后這些數(shù)字將決定我們將哪些像素?cái)?shù)據(jù)陣列傳輸?shù)?LCD 模塊。
該固件旨在顯示三位數(shù)測量值,單位為毫伏、伏特、微安或毫安。如果顯示的單位是伏特或毫安,位數(shù)字后的小數(shù)點(diǎn)將自動(dòng)啟用。這意味著顯示接口可以處理從 0 μA 到 9.99 mA 的電流幅度和從 0 mV 到 9.99 V 的電壓幅度。但是,這個(gè)范圍的大部分將永遠(yuǎn)不會(huì)被使用——光傳感器的輸出電流為 5 mA, ADC 無法測量高于其參考電壓的電壓,在本設(shè)計(jì)中為 2.4 V。
端口輸入輸出
您可以參閱本文 以獲取有關(guān)使用交叉開關(guān)和將引腳配置為輸入或輸出的更深入信息。如上圖所示,SPI 信號(hào)被啟用并路由到連接到相應(yīng) LCD 信號(hào)的引腳。SPI片選信號(hào)由固件控制,輸出到P0.1,因?yàn)閮?nèi)置的SPI從機(jī)選擇信號(hào)與LCD接口不兼容。
外設(shè)和中斷
在項(xiàng)目的這個(gè)階段,我們只需要兩個(gè)外設(shè):SPI 和 Timer4。SPI 配置為 3 線主機(jī)模式,時(shí)鐘分頻器設(shè)置為產(chǎn)生 875 kHz 的 SPI 時(shí)鐘頻率。
SPI 中斷被啟用是因?yàn)?SPI 傳輸由 SPI 中斷服務(wù)例程中的狀態(tài)機(jī)控制。傳輸每個(gè)字節(jié)后都會(huì)觸發(fā)中斷。Timer4 用于短延遲,例如 LCD 模塊數(shù)據(jù)表中指定的設(shè)置和保持延遲。一個(gè) Timer4 計(jì)數(shù)約為 490 ns,因此如果我們需要 6 μs 的延遲,我們將 Timer4 寄存器設(shè)置為零并等待計(jì)數(shù)達(dá)到 12。
固件
該項(xiàng)目的固件可分為三個(gè)主要部分:LCD 通信接口、將存儲(chǔ)在變量中的數(shù)字轉(zhuǎn)換為一系列單獨(dú)數(shù)字的函數(shù)以及更新 LCD 像素?cái)?shù)據(jù)陣列的例程。
液晶界面
我們使用多行更新模式與 LCD 通信,如前一篇文章所述。當(dāng)微控制器啟動(dòng)時(shí),它將 LCD 清除為所有白色像素。隨后通過將 128 位像素?cái)?shù)據(jù)寫入一個(gè)或多個(gè)行地址來更新 LCD。所有 LCD 更新均由“LCDControl.c”源文件中的 UpdateLCD() 函數(shù)啟動(dòng),數(shù)據(jù)傳輸過程在 SPI 中斷服務(wù)程序中繼續(xù)進(jìn)行。該項(xiàng)目中的 LCD 通信接口包括對(duì)我們?cè)谥拔恼轮惺褂玫膬?nèi)容的一項(xiàng)改進(jìn):每次調(diào)用 UpdateLCD() 都可以通過將適當(dāng)?shù)男泻鸵恍械刂贩湃?LCDLineStart 和 LCDLineStop 變量來指定要更新顯示的 哪一部分 。
將數(shù)字轉(zhuǎn)換為數(shù)字
重要的是要理解存儲(chǔ)在變量中的數(shù)值與我們用來可視化數(shù)值的一系列數(shù)字根本不同。一個(gè)變量只是一個(gè)由 1 和 0 組成的序列;這個(gè)序列可以用多種方式解釋——例如,解釋為無符號(hào)整數(shù)、有符號(hào)整數(shù)或浮點(diǎn)值。然后需要進(jìn)一步轉(zhuǎn)換,以視覺形式表達(dá)這個(gè)解釋值。將變量值轉(zhuǎn)換為一系列數(shù)字或字符的標(biāo)準(zhǔn) C 語言方法是庫中包含的 printf() 函數(shù)。但盡可能避免庫例程是明智的,主要是因?yàn)樵O(shè)計(jì)自己的代碼更有趣、更有價(jià)值、更有啟發(fā)性。不過,也有實(shí)際的好處。
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)聯(lián)系小編進(jìn)行處理。
推薦閱讀:
PCB 布局挑戰(zhàn)——改進(jìn)您的開關(guān)模式電源設(shè)計(jì)