4. 自动调VCOM
本章节主要介绍如何使用auto_vcom模块实现自动调VCOM的功能。
主要内容:
1 添加设置VCOM和get_flick函数。
2 添加调VCOM流程
3 添加初始化
4 自动调VCOM示例
注意
如果还未点屏成功,请到前面的章节学习如何点亮屏幕
4.1. 添加设置VCOM和get_flick函数:
def SetVCOM(vcom):
vcomh = (vcom>>8)&0x03
vcoml = vcom&0xff
SHARP_MIPI_WR((0x29, 0xD5, vcomh,vcoml,vcomh,vcoml,vcomh,vcoml))#关写保护
SHARP_Delay_ms(10)
return 1
def get_flick():
flick_value = 0.0
res = 1
cnt = 0
while True:
res,flick_value = SHARP_CFL_GetMeasureFLICK(CFL_ID0) #CL2为例获取flick 值
if res>=0:
return res,flick_value[0]
if cnt>20:
res = -1
return res,flick_value
cnt+=1
4.2. 添加调VCOM流程:
方法
AutoVcom_ScanRange用于实现 在规定的范围内 从小到大扫描,找到最佳VCOM。(是VCOM从小到底 不是闪烁从小到大)
vcom_min- 最小VCOM值,开始值
vcom_max- 最大VCOM值,结束值
step- VCOM递增的阶数
step_delay_ms- 每一步间隔时时间返回
res- >0 : 扫描完成; <=0 : 负数出错,结束。返回
Value- 查找到最佳VCOM
方法
AutoVcom_ScanDef用于实现 从默认值开始扫描,寻找最佳VCOM
vcom_def- VCOM默认值,以这个值为中心值寻找最佳VCOM
step- VCOM递增的阶数
step_delay_ms- 每一步间隔时时间返回
res- >0 : 扫描完成; <=0 : 负数出错,结束。返回
Value- 查找到最佳VCOM
######################### 调vcom流程 ########################################
def AutoOTP():
SHARP_Delay_ms(1000)
if Auto_VCOM.one_vcom_flag == 0:
SHARP_DEBUG("1 scan vcom ..\r\n")
res,Value = Auto_VCOM.Auto_Vcom_Object.AutoVcom_ScanRange(60,180,5,500)
print("1 scan vcom end")
if res<0:
print("scan eorr1")
return 0
print("1 scan vcom ok")
print("1 good vcom =%d "%Value)
SHARP_DEBUG("1 good vcom =%d\n"%Value)
Auto_VCOM.center_vcom = Value #保存VCOM中心值
Auto_VCOM.one_vcom_flag = 1 #第一次找值标志位置一,下次不再进行第一次找值
#第二次 进行中心值的小范围找值
print("2 scan vcom...")
res,Value = Auto_VCOM.Auto_Vcom_Object.AutoVcom_ScanDef(Auto_VCOM.center_vcom, 2, 300)
if res<0:
print("scan eorr2\r\n")
return 0
print("2 scan vcom ok")
print("2 good vcom =%d "%Value)
SHARP_DEBUG("2 good vcom =%d\n"%Value)
#第三次 进行精准找值
print("3 scan vcom ...")
res,Value = Auto_VCOM.Auto_Vcom_Object.AutoVcom_ScanRange(Value - 2, Value + 2, 1, 500)
if res<0:
print("scan eorr3")
return 0
print("3 scan vcom ok")
print("3 good vcom =%d "%Value)
SHARP_DEBUG("3 good vcom =%d\n"%Value)
Auto_VCOM.VCOM_VAL = Value #保存最佳VCOM
4.3. 添加初始化:
在main函数初始化时候添加。
1.先在硬件初始化函数之后实现 实例化调vcom 类
2.类
SHARP_Auto_Vcom用于自动调vcom 类-Debug 打印函数, None--打印 1--Print 打印 打印函数--按打印函数的格式打印
-Set_VCOM 设置vcom 函数 函数形式:
set_vcom(vcom),return写入成功与否返回值-get_flick 获取flick 函数 函数形式:
get_flcker(),return读取成功与否返回值,flick值
AutoOTP用于实现调vcom流程
Auto_VCOM = User_Auto_VCOM() #实例化调vcom 类
def main():
Auto_VCOM.Auto_Vcom_Object = SHARP_Auto_Vcom(1,Set_VCOM,get_flick)
AutoOTP()
4.4. 自动调VCOM示例
from sharp_auto_vcom import *
from sharp_lens import *
from sharp_user import *
class User_Auto_VCOM(): #调vcom使用的类
Auto_Vcom_Object = 0 #
vcom_adap = 0 #硬件设备
one_vcom_flag = 0 #第一次vcom查找标志位
center_vcom = 0 #vcom中心值
VCOM_VAL = 0 #最佳VOCM值
def SetVCOM(vcom):
vcomh = (vcom>>8)&0x03
vcoml = vcom&0xff
SHARP_MIPI_WR((0x29, 0xD5, vcomh,vcoml,vcomh,vcoml,vcomh,vcoml))
SHARP_Delay_ms(10)
return 1
def get_flick():
flick_value = 0.0
res = 1
cnt = 0
while True:
res,flick_value = SHARP_CFL_GetMeasureFLICK(CFL_ID0) #CL2为例获取flick 值
if res>=0:
return res,flick_value[0]
if cnt>20:
res = -1
return res,flick_value
cnt+=1
######################### 调vcom流程 ########################################
def AutoOTP():
SHARP_Delay_ms(1000)
if Auto_VCOM.one_vcom_flag == 0:
SHARP_DEBUG("1 scan vcom ..\r\n")
res,Value = Auto_VCOM.Auto_Vcom_Object.AutoVcom_ScanRange(60,180,5,500)
print("1 scan vcom end")
if res<0:
print("scan eorr1")
return 0
print("1 scan vcom ok")
print("1 good vcom =%d "%Value)
SHARP_DEBUG("1 good vcom =%d\n"%Value)
Auto_VCOM.center_vcom = Value #保存VCOM中心值
Auto_VCOM.one_vcom_flag = 1 #第一次找值标志位置一,下次不再进行第一次找值
#第二次 进行中心值的小范围找值
print("2 scan vcom...")
res,Value = Auto_VCOM.Auto_Vcom_Object.AutoVcom_ScanDef(Auto_VCOM.center_vcom, 2, 300)
if res<0:
print("scan eorr2\r\n")
return 0
print("2 scan vcom ok")
print("2 good vcom =%d "%Value)
SHARP_DEBUG("2 good vcom =%d\n"%Value)
#第三次 进行精准找值
print("3 scan vcom ...")
res,Value = Auto_VCOM.Auto_Vcom_Object.AutoVcom_ScanRange(Value - 2, Value + 2, 1, 500)
if res<0:
print("scan eorr3")
return 0
print("3 scan vcom ok")
print("3 good vcom =%d "%Value)
SHARP_DEBUG("3 good vcom =%d\n"%Value)
Auto_VCOM.VCOM_VAL = Value #保存最佳VCOM
Auto_VCOM = User_Auto_VCOM() #实例化调vcom 类
def main():
Auto_VCOM.Auto_Vcom_Object = SHARP_Auto_Vcom(1,Set_VCOM,get_flick)
AutoOTP()