數(shù)碼產(chǎn)品的壞點(diǎn)到底是不是LCD壞點(diǎn)?
一、什么是CCD/LCD壞點(diǎn)?壞點(diǎn)和亮點(diǎn)分別是什么?
我的一些顧客都在同時(shí)問兩個(gè)問題:“能保證CCD和LCD沒有壞點(diǎn)同時(shí)也沒有亮點(diǎn)嗎?”這里必須說明,所謂的“壞點(diǎn)”和“亮點(diǎn)”其實(shí)是一個(gè)概念。在術(shù)語上,應(yīng)該叫“壞點(diǎn)”。
壞點(diǎn)就是CCD元件上不能成像的點(diǎn)。具體表現(xiàn)就是:每張照片的固定位置出現(xiàn)全白或全黑的斑點(diǎn),就是CCD元件上不發(fā)光或者始終發(fā)光的點(diǎn)。這是一個(gè)比較嚴(yán)重的問題,嚴(yán)重影響了成像效果,一旦發(fā)現(xiàn)壞點(diǎn)是要堅(jiān)決換機(jī)的。
同理,所謂LCD壞點(diǎn),也是指LCD(顯示屏)上不能成像的點(diǎn)。LCD上的壞點(diǎn)并不影響相機(jī)的實(shí)際成像效果,一般來說,LCD上有3個(gè)以上壞點(diǎn)才算質(zhì)量問題,廠家才會(huì)同意換機(jī)。比如柯達(dá)公司就規(guī)定LCD有5個(gè)壞點(diǎn)才換屏。LCD壞點(diǎn)只是影響觀瞻,影響心情吧,其實(shí)3個(gè)以下的壞點(diǎn),肉眼基本是沒有感覺的。
在我們實(shí)際銷售的過程中,CCD壞點(diǎn)幾率非常低,目前只遇到過一臺。LCD壞點(diǎn)則遇到過7、8臺,一般也都在發(fā)貨前進(jìn)行了調(diào)換。
二、如何界定、判斷“壞點(diǎn)”?
關(guān)于這個(gè)問題,網(wǎng)上很多文章都在講。我不想羅嗦了。只是想用通俗的語言給大家再講一遍。
1、獲得檢測“壞點(diǎn)”的全黑照片。拿到相機(jī)后,預(yù)熱幾分鐘,把相機(jī)的ISO(感光度)調(diào)節(jié)到最小值(一般是100),關(guān)閉閃光燈,設(shè)定曝光時(shí)間為1/60秒、光圈最大值,然后用鏡頭蓋蓋住鏡頭(沒有鏡頭蓋的,可在平坦的桌子上放張厚紙,將鏡頭扣在紙上拍攝,一定不能讓光線進(jìn)入到鏡頭里面,同時(shí)也不要太過用力),按下快門,拍攝一張全黑的照片。然后,把曝光時(shí)間設(shè)定為1秒,再拍攝一張全黑照片,這兩張照片就是我們要檢測“壞點(diǎn)”的證據(jù)。如果你購買的相機(jī)有自動(dòng)降躁功能,那么也要注意關(guān)閉。
如果是全自動(dòng)相機(jī),則一般在默認(rèn)模式、關(guān)閉閃光燈、ISO最低值的情況下,拍攝一張全黑照片就可以了。
有的專家把整個(gè)過程說的過分復(fù)雜了,在實(shí)際操作中,除非是專業(yè)級別的玩家對待專業(yè)級別的相機(jī),普通家用相機(jī)和一般的攝影愛好者用這個(gè)通俗易懂的方式獲得全黑照片就可以。
2、對全黑照片進(jìn)行檢測。使用Dead Pixel Test軟件來進(jìn)行檢測的。設(shè)定超過60流明的點(diǎn)是噪點(diǎn)(hot),超過250流明的點(diǎn)為壞點(diǎn)(dead)。把全黑照片輸入電腦,通過該軟件進(jìn)行測試,很快就會(huì)出來測試結(jié)果——有多少躁點(diǎn)、有沒有壞點(diǎn),結(jié)果很快就出來了。這個(gè)軟件網(wǎng)上很多地方可以下載,是免費(fèi)的軟件,這個(gè)軟件很容易上手,具體不再講了。
3、用全黑照片測試LCD屏幕。用LCD屏幕來回放這一張全黑照片,就可以看出來LCD屏幕是否有壞點(diǎn)。一般來說,不超過3個(gè)都是合格的。當(dāng)然,對于一個(gè)非常注重自己信譽(yù)的賣家來說,也許一個(gè)也不會(huì)放過。
WinCE的LCD驅(qū)動(dòng)程序該如何編寫?
本文以1024*768分辨率的TFT_16BPP真彩LCD為例,說明在WIN CE 4.2中驅(qū)動(dòng)程序的修改事項(xiàng),目標(biāo)板的微處理器是S3C2410A。
該LCD的時(shí)序圖如下圖所示:
Note:LCD時(shí)序的參數(shù)和時(shí)鐘相位因不同LCD而異,請參考相應(yīng)LCD的datasheet.
在WIN CE 4.2中修改LCD驅(qū)動(dòng)程序有五個(gè)相關(guān)文件,分別是:
1. …\WINCE420\PLATFORM\SMDK2410\INC\s2410.h
2. …\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c
3. …\WINCE420\PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\s3c2410disp.cpp
4. …\WINCE420\PLATFORM\SMDK2410\FILES\config.bib
5. …\ WINCE420\PLATFORM\SMDK2410\FILES\platform.reg
1. s2410.h
…\WINCE420\PLATFORM\SMDK2410\INC\s2410.h
主要有LCD控制器的寄存器定義、LCD控制器的工作時(shí)序定義、分辨率的定義等等。紅色部分為修改后的內(nèi)容:
#define LCDTYPE TFT16BPP
#define LCD_TYPE TFTxxx_xxx
#define SCR_XSIZE_TFT (1280)
#define SCR_YSIZE_TFT (960)
#define LCD_XSIZE_TFT (1024)
#define LCD_YSIZE_TFT (768)
#define VBPD ((2-1)&0xff)
#define VFPD ((2-1)&0xff)
#define VSPW ((2-1) &0x3f)
#define HBPD ((16-1)&0x7f)
#define HFPD ((200-1)&0xff)
#define HSPW ((16-1)&0xff)
#define CLKVAL_TFT (1) //這個(gè)值的定義在LCD初始化函數(shù)中并不用到,而是直接用數(shù)值表示。
2. cfw.c
…\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c
紅色部分為修改后的內(nèi)容:
static void InitDisplay()
{
********
s2410LCD-》rLCDCON1=(1《《8)|(MVAL_USED《《7)|(3《《5)|(12《《1)|0;
// CLKVAL_TFT = 1 , HCLK = 100MHz -》 VCLK = 25MHz
//TFT LCD panel
//16 bpp for TFT
s2410LCD-》rLCDCON2=(VBPD《《24)|(LINEVAL_TFT《《14)|(VFPD《《6)|(VSPW);
s2410LCD-》rLCDCON3=(HBPD《《19)|(HOZVAL_TFT《《8)|(HFPD);
s2410LCD-》rLCDCON4=(MVAL《《8)|(HSPW);
s2410LCD-》rLCDCON5=
(1《《11)|(0《《10)|(0《《9)|(0《《8)|(0《《7)|(0《《6)|(0《《3)|(0《《1)|(1《《0);
//5:6:5 Format
//The video data is fetched at VCLK falling edge
//VLINE/HSYNC pulse polarity-Normal
//VFRAME/VSYNC pulse polarity-Normal
//VD (video data) pulse polarity-Normal
//VDEN signal polarity-Normal
//Disable PWREN signal
//Byte swap Disable
//Half-Word swap Enable
********
}
紅色部分為修改后的內(nèi)容:
WORD TempBuffer[1025][768];
S3C2410DISP::S3C2410DISP (void)
{
********
m_nScreenWidth = 1024;
m_nScreenHeight = 768;
*********
}
到此修改工作基本完成,但還要一個(gè)問題:1024*768分辨率占用的顯示緩沖區(qū)大小是:1024*768*2 = 1536 K Bytes,因此要確認(rèn)所分配的內(nèi)存空間夠不夠,是在config.bib文件中定義的。如果以前定義的足夠大,后面的步驟可以省略了。
4. config.bib
…\WINCE420\PLATFORM\SMDK2410\FILES\config.bib
#define NKNAME NK
#define NKSTART 8C200000
#define NKLEN 01D00000
#define RAMSTART 8E000000
#define RAMLEN 01F00000
$(NKNAME) $(NKSTART) $(NKLEN) RAMIMAGE
RAM $(RAMSTART) $(RAMLEN) RAM
AUD_DMA 8c002000 00002000 RESERVED
DRV_GLB 8c010000 00010000 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
SD_DMA 8c028000 00008000 RESERVED
EDBG 8c030000 00020000 RESERVED
CPXIPCHAIN 8c050000 00008000 RESERVED
SLEEP_BUFF 8c058000 00004000 RESERVED
DISPLAY 8c100000 00100000 RESERVED
DISPLAY
AUD_DMA 8c002000 00002000 RESERVED
DRV_GLB 8c010000 00010000 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
SD_DMA 8c028000 00008000 RESERVED
EDBG 8c030000 00020000 RESERVED
CPXIPCHAIN 8c050000 00008000 RESERVED
SLEEP_BUFF 8c058000 00004000 RESERVED
;DISPLAY 8c100000 00100000 RESERVED
DISPLAY 8c060000 001a0000 RESERVED
5.
在(4)中修改了DISPLAY顯示緩沖區(qū)的開始地址,因此要在“s2410.h”中做相應(yīng)的修改:
…\WINCE420\PLATFORM\SMDK2410\INC\s2410.h
#define DMA_BUFFER_BASE 0xAC000000
#define DMA_PHYSICAL_BASE 0x30000000
//#define FRAMEBUF_BASE (DMA_BUFFER_BASE + 0x00100000)
//#define FRAMEBUF_DMA_BASE (DMA_PHYSICAL_BASE + 0x00100000)
#define FRAMEBUF_BASE (DMA_BUFFER_BASE + 0x00060000)
#define FRAMEBUF_DMA_BASE (DMA_PHYSICAL_BASE + 0x00060000)
6. 在(4)中修改了DISPLAY顯示緩沖區(qū)的大小, 因此要在“s3c2410disp.cpp”中做相應(yīng)的修改:
…\WINCE420\PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\s3c2410disp.cpp
紅色部分為修改后的內(nèi)容:
void S3C2410DISP::InitializeHardware (void)
{
*********
m_VirtualFrameBuffer = (DWORD)VirtualAlloc(0, (0x1A0000), MEM_RESERVE, PAGE_NOACCESS);
if (m_VirtualFrameBuffer == NULL)
{
RETAILMSG(0,(TEXT(“m_VirtualFrameBuffer is not allocated\n\r”)));
return;
}
else if (!VirtualCopy((PVOID)m_VirtualFrameBuffer, (PVOID)gdwLCDVirtualFrameBase, (0x1A0000), PAGE_READWRITE | PAGE_NOCACHE))
{
RETAILMSG(0, (TEXT(“m_VirtualFrameBuffer is not mapped\n\r”)));
VirtualFree((PVOID)m_VirtualFrameBuffer, 0, MEM_RELEASE);
return;
}
*********
}
評論
查看更多