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流程:

    1. 方法 AutoVcom_ScanRange 用于实现 在规定的范围内 从小到大扫描,找到最佳VCOM。(是VCOM从小到底 不是闪烁从小到大)

    • vcom_min - 最小VCOM值,开始值

    • vcom_max - 最大VCOM值,结束值

    • step - VCOM递增的阶数

    • step_delay_ms - 每一步间隔时时间

    • 返回 res - >0 : 扫描完成; <=0 : 负数出错,结束。

    • 返回 Value - 查找到最佳VCOM

    1. 方法 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值

    1. 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()