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