伽瑪校正用于校正亮度和亮度之間的非線性關(guān)系。本應(yīng)用筆記給出了為MAXQ2000微控制器(μC)編寫的匯編程序,該程序使用伽馬校正和固定頻率PWM信號(hào)線性增加和減少LED的亮度。存儲(chǔ)在實(shí)用ROM存儲(chǔ)器中的查找表(LUT)中的PWM占空比經(jīng)過伽馬校正以產(chǎn)生線性亮度變化。該軟件使用免費(fèi)的MAX-IDE開發(fā)工具進(jìn)行編譯,運(yùn)行在MAXQ2000評(píng)估板上。
背景
當(dāng)LED發(fā)光時(shí),伽馬校正用于解釋亮度和亮度之間的冪律關(guān)系。雖然經(jīng)常互換使用,但亮度和亮度不是同義詞。
亮度:發(fā)射光,每單位面積投影,單位為cd/m2(坎德拉/米2)。
亮度:人眼賦予的感知亮度。
冪律關(guān)系可以近似為:
在此討論中,γ等于 2.5。
控制發(fā)光二極管強(qiáng)度
附錄 A 是一個(gè)裝配程序,它線性地增加和降低 LED 的亮度。強(qiáng)度值已經(jīng)過伽馬校正,以近似亮度的線性變化。
LED 使用 PWM 進(jìn)行控制。定時(shí)器0在P0.0上產(chǎn)生PWM信號(hào)(在MAX3評(píng)估板上U11的LED2000上可見),并設(shè)置為16位重載/比較定時(shí)器模式。在此模式下,計(jì)時(shí)器 0 生成兩個(gè)中斷請(qǐng)求 (IRQ):一個(gè)在計(jì)時(shí)器溢出時(shí),另一個(gè)在計(jì)時(shí)器等于 T2C0 中的比較值時(shí)。圖1說明了此過程如何產(chǎn)生PWM信號(hào)。請(qǐng)注意,溢出 IRQ 控制 PWM 周期,而比較 IRQ 控制 PWM 占空比。
圖1.使用定時(shí)器 0 生成 PWM 信號(hào)。
定時(shí)器1用于改變定時(shí)器0的PWM占空比,從而改變LED的強(qiáng)度。每 50 毫秒,計(jì)時(shí)器 1 生成一個(gè)溢出 IRQ,將查找表 (LUT) 中的新值加載到 T2C0 寄存器中。
使用公式2計(jì)算伽馬校正PWM占空比,其中:
T2C0γ = 計(jì)時(shí)器 0 的伽瑪校正比較值
T2C0 = 計(jì)時(shí)器 0 的非伽馬校正比較值
γ = 伽馬校正因子(即 2.5)
count 是定時(shí)器0上重新加載之間的定時(shí)器步數(shù)(即,10000h-0C000h = 04000h)
偏移量是計(jì)時(shí)器 0 重新加載值(即 0C000h)
例如,當(dāng)計(jì)時(shí)器 0 重新加載值為 0C000h 時(shí),每次重新加載之間都會(huì)發(fā)生 04000h 計(jì)時(shí)器步驟。假設(shè)使用 32 個(gè) PWM 占空比來增加 LED 的強(qiáng)度,并且基于 LUT,定時(shí)器 0 (T2C0) 的非伽馬校正比較值為:
0C000h 0C200h 0C400h ... 0FA00h 0FC00h 0FE00h
每個(gè)值之間的差值為 0200h,即 04000h 除以 32。使用公式 2 對(duì)上述值進(jìn)行伽馬校正,得出以下 T2C0 值(圖 2):
0C000h 0C002h 0C010h ... 0F209h 0F676h 0FB1Dh
附錄 A 中的源代碼略微調(diào)整了這些值,以消除計(jì)時(shí)器問題。例如,計(jì)時(shí)器 0 在發(fā)生 IRQ 時(shí)不會(huì)停止。因此,必須注意確保重載值不接近比較值(即,T2C0 - T2R0 >某個(gè)最小正值)。
圖2.伽瑪校正了 T2C0。
使用查找表 (LUT)
前面提到的PWM占空比值存儲(chǔ)在MAXQ2000微控制器程序存儲(chǔ)器的LUT中。雖然將程序存儲(chǔ)器用于常量和LUT可以釋放數(shù)據(jù)存儲(chǔ)器,但它確實(shí)需要更長(zhǎng)的訪問時(shí)間。
實(shí)用程序ROM功能moveDP1用于從程序存儲(chǔ)器中檢索數(shù)據(jù)。注意,由于實(shí)用程序ROM的未來版本可能不在MAXQ2000的ROM中的同一位置,用戶應(yīng)從存儲(chǔ)在地址0800Dh的實(shí)用程序ROM功能表中加載每個(gè)功能的地址。幸運(yùn)的是,這可以在程序初始化期間完成,并且可以保存函數(shù)地址以供以后在程序中使用。
附錄 A 中的源代碼將 moveDP1 實(shí)用程序 ROM 函數(shù)的地址加載到 A[4] 寄存器中,并使用此保存的地址調(diào)用該函數(shù)。
結(jié)論
使用 LUT 保存預(yù)先計(jì)算的計(jì)算結(jié)果可以顯著提高固件執(zhí)行速度。如果LUT保存在程序存儲(chǔ)器中,MAXQ2000實(shí)用程序ROM功能可快速訪問數(shù)據(jù)。為了進(jìn)一步提高固件執(zhí)行速度,MAXQ2000可以在程序初始化時(shí)將LUT數(shù)據(jù)從程序存儲(chǔ)器加載到SRAM中。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7487瀏覽量
151045 -
led
+關(guān)注
關(guān)注
240文章
23134瀏覽量
658419 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7452瀏覽量
163603
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論