嵌入式linux驱动之路11:裸机开发之多点电容触摸屏,背光调节

本文介绍了电容触摸屏的工作原理及配置步骤,并详细说明了如何通过配置PWM信号实现LCD背光亮度的调节。

触摸屏

电容触摸屏是需要一个驱动 IC的,驱动 IC 一般会提供一个 I2C 接口给主控制器,主控制器可以通过 I2C 接口来读取驱动 IC里面的触摸坐标数据。比如ATK-7016 的电容触摸屏部分有 4 个 IO 用于连接主控制器:SCL、SDA、RST 和 INT,SCL 和 SDA 是 I2C 引脚,RST 是复位引脚,INT 是中断引脚。一般通过 INT 引脚来通知主控制器有触摸点按下,然后在 INT 中断服务函数中读取触摸数据。也可以不使用中断功能,采用轮询的方式不断查询是否有触摸点按下,和所有的 I2C 器件一样,FT5426 也是通过读写寄存器来完成初始化和触摸坐标数据读取的,所以主要工作就是读写FT5426 的寄存器。
配置步骤如下:
1.先定义了 FT5426触摸屏 的设备地址、寄存器地址和一些触摸点状态宏,然后在定义了一个结构体 ft5426_dev_struc,此结构体用来保存触摸信息。
2.初始化触摸屏( FT5426)复用IO,设置电器属性,初始化触摸屏中断 IO (中断模式设置,输入设置)和复位 IO(输出设置)
3.初始化 I2C,配置工作模式,实质写寄存器
4.初始化 FT5426,往对应寄存器里写值,读取ID寄存器
5.中断IO对应的中断处理函数,最后清除中断标志位
6. 向 FT5426 写入数据, 从 FT5426 读取一个字节的数据核心配置 配置 I2C xfer 结构体。
7.读取当前所有触摸点的坐标,核心从寄存器 FT5426_TOUCH1_XH 开始,连续读取 30 个寄存器的值。

背光调节

RGB LCD 都有一个背光控制引脚,给这个背光控制引脚输入高电平就会点亮背光,输入低电平就会关闭背光。假如我们不断的打开和关闭背光,当速度足够快的时候就不会感觉到背光关闭这个过程了。这个正好可以使用 PWM 来完成。我们给 LCD 的背光引脚输入一个 PWM 信号,这样就可以通过调整占空比的方式来调整LCD 背光亮度了。
I.MX6U一共有 8 路 PWM 信号,每个 PWM 包含一个 16 位的计数器和一个 4 x 16 的数据 FIFO。可以通过配置相应的寄存器来设置 PWM 信号的频率和占空比,PWM 的 16 位计数器是个向上计数器,此计数器会从 0X0000 开始计数,直到计数值等于寄存器 PWMx_PWMPR(x=1~8) ,然后计数器就会重新从 0X0000 开始计数,如此往复。所以寄存器 PWMx_PWMPR 可以设置 PWM 的频率。在一个周期内,PWM 从 0X0000 开始计数的时候,PWM 引脚先输出高电平(默认情况下,可以通过配置输出低电平)。采样 FIFO 中保存的采样值会在每个时钟和计数器值进行比较,当采样值和计数器相等的话 PWM 引脚就会改为输出低电平(默认情况下,同样可以通过配置输出高电平)。计数器会持续计数,直到和周期寄存器 PWMx_PWMPR(x=1~8) 的值相等.在开启 PWM 之前最好设置好 PWMx_PWMPR 和 PWMx_PWMSAR 这两个寄存器,也就是设置好 PWM 的频率和占空比。
当我们向 PWMx_PWMSAR 寄存器写入采样值的时候,如果 FIFO 没满的话其值会被存储到 FIFO 中。如果 FIFO 满的时候写入采样值就会导致寄存器 PWMx_PWMSR 的位 FWE(bit6)置1,表示 FIFO 写错误,FIFO 里面的值也并不会改变。FIFO 可以在任何时候写入,但是只有在PWM 使能的情况下读取。寄存器 PWMx_SR 的位 FIFOAV(bit2:0)记录着当前 FIFO 中有多少个数据。从采样寄存器 PWMx_PWMSAR 读取一次数据,FIFO 里面的数据就会减一,每产生一个周期的 PWM 信号,FIFO 里面的数据就会减一,相当于被用掉了。PWM 有个 FIFO 空中断,当FIFO 为空的时候就会触发此中断,可以在此中断处理函数中向 FIFO 写入数据。
PWM1 的输出引脚为GPIO1_IO8,配置步骤如下:
1、配置引脚 GPIO1_IO8
配置 GPIO1_IO08 的复用功能,将其复用为 PWM1_OUT 信号线。
2、初始化 PWM1
初始化 PWM1,初始化寄存器,配置所需的 PWM 信号的频率(往对应寄存器里写值)和默认占空比(读取周期寄存器,根据占空比确定要写入的采样寄存器的值)。
3、设置中断
因为 FIFO 中的采样值每个周期都会少一个,所以需要不断的向 FIFO 中写入采样值,防止其为空。我们可以使能 FIFO 空中断,这样当 FIFO 为空的时候就会触发相应的中断,然后在中断处理函数中当 FIFO 空中断发生以后需要向采样寄存器PWM1_PWMSAR 写入采样数据,也就是占空比值,最后要清除相应的中断标志位。
4、使能 PWM1
配置好 PWM1 以后就可以开启了。

40pin触屏驱动板是一种常见的用于连接触摸屏的硬件接口板,通常应用于嵌入式系统、工业控制设备、智能终端等领域。该驱动板通过40个引脚与主控设备(如单片机嵌入式处理器或开发板)进行通信,实现对触摸屏驱动与控制。 ### 工作原理 40pin触屏驱动板的工作原理主要依赖于其内部的控制芯片与外部主控设备之间的通信协议。通常,这类驱动板支持多种接口协议,例如SPI、I2C、RGB或LVDS等,具体取决于触摸屏的类型(如电阻式、电容式)和显示模块的规格。驱动板的主要功能包括: - 接收主控设备发送的控制信号,如初始化命令、刷新率设置等。 - 将主控设备的显示数据转换为适合显示屏的格式并传输。 - 处理触摸事件,并将触摸坐标反馈给主控设备。 - 提供电源管理功能,如背光控制、休眠模式切换等[^1]。 ### 驱动方法 针对40pin触屏驱动板的驱动方法,通常需要根据具体的硬件平台和操作系统进行适配。以下是常见的驱动步骤: 1. **硬件连接**:按照驱动板的接口定义,正确连接主控设备与驱动板之间的电源、数据线和控制线。通常需要连接的信号包括时钟信号、数据信号、复位信号等。 2. **驱动开发**:在嵌入式系统中,可能需要编写底层驱动程序来初始化显示屏和驱动板。对于Linux系统,可以通过修改设备树(Device Tree)和编写内核模块实现;对于裸机开发,则需要直接操作寄存器配置时序和通信协议。 3. **通信协议配置**:根据驱动板支持的通信协议(如SPI、I2C),配置主控设备的相应外设模块。例如,使用SPI协议时,需要设置SPI的时钟频率、数据位宽和传输模式。 4. **测试与调试**:通过简单的测试程序验证驱动是否正常工作,例如显示静态图像或检测触摸功能是否准确响应。调试过程中可以使用示波器检查信号完整性,或通过日志输出排查软件问题。 ### 接口定义 40pin触屏驱动板的接口定义通常会因具体型号而异,但常见的引脚功能包括: - **电源引脚**:如VCC、GND,用于为驱动板和显示屏供电。 - **通信引脚**:如SPI的SCLK(时钟)、MOSI(主发从收)、MISO(主收从发)、CS(片选),或I2C的SCL(时钟)、SDA(数据)。 - **控制引脚**:如RST(复位)、BL(背光控制)、INT(中断信号)等。 - **显示数据引脚**:如RGB信号线或LVDS差分信号线,用于传输显示数据。 - **其他功能引脚**:如触摸屏的X/Y坐标输入、触摸中断信号等。 在使用过程中,建议查阅具体的驱动板技术手册或数据表,以获取详细的接口定义和时序要求。 ```python # 示例:通过SPI协议初始化40pin触屏驱动板 import spidev # 初始化SPI spi = spidev.SpiDev() spi.open(0, 0) # 总线0,设备0 spi.max_speed_hz = 1000000 # 设置SPI时钟频率 # 发送初始化命令 def send_command(command): spi.xfer([command]) # 发送显示数据 def send_data(data): spi.xfer(data) # 初始化显示屏 def init_display(): send_command(0x01) # 软件复位 send_command(0x11) # 退出睡眠模式 send_command(0x3A) # 设置像素格式 send_data([0x55]) # 16位RGB格式 send_command(0x29) # 开启显示 init_display() ``` ### 相关问题 1. 如何选择适合40pin触屏驱动板的通信协议? 2. 40pin触屏驱动板的电源管理功能有哪些? 3. 在Linux系统中如何编写40pin触屏驱动板的设备树配置? 4. 如何调试40pin触屏驱动板的触摸功能? 5. 40pin触屏驱动板的常见故障排查方法有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值