LED模式生成和调光控制
已有 116 次阅读 2019-01-05 09:09在基于单片机的应用中,可轻松生成有趣的发光模式。I/O端口扩展器的输出状态从RAM变量中标记为Bank1n2_pattern和Bank3n4_pattern的2个字节中加载。每个字节的半字节对应一个组。预定义的查找表包含每个组要产生各个模式应点亮和熄灭的LED。
在MCU代码(main子程序的无限while循环)中添加IF THEN语句,以持续监视按钮开关的开/关状态。当短暂按下按钮时,查找表中的一个模式将加载到RAM中标记为Bank1n2_pattern和Bank3n4_pattern的两个字节中。当发生Timer0中断时,新模式发送到I/O扩展器,LED按照该模式点亮。
用户连续短暂按下按钮开关时,main子程序将循环遍历查找表。要显示交替光线,只需发送前一个模式的补码。例如,如果第1组的模式为‘0101’,则补码为‘1010’,如伪代码2所示(伪代码2是伪代码1中的一段)。
伪代码2:模式生成
但是,必须添加延时,视觉上才能感受到模式的交替。延时添加在中断子程序中,在组点亮/熄灭的IF THEN语句之前。为此,需添加Delay_ON标志,以便在接下来的中断中,只有延时计数器递减以倒计数延时的中断数目。
延时值也可以是用户使用电位器选择的值,电位器的中间抽头连接到MCU的片上模数转换器(ADC)的输入。最小到最大延时均可换算成ADC的数字数据,只需检测前四位(提供16个级别)。检测前五位(或32个级别)可设置更精细的比例。延时最大时,LED闪烁最慢,延时最小时,看上去所有LED均完全点亮。图3中的时序图显示了延时长度tDELAY。
伪代码3:用于查看发光模式的延时代码实现
调光控制使用脉宽调制(PWM)来控制每个组的时间间隔持续时间。在本例中,Timer0中断持续时间有两个值,一个表示高电平持续时间,一个表示低电平持续时间,与PWM百分比成正比。比率通过拨轮电位器设置,电位器的中间抽头连接到ADC输入。通过选择ADC输出的前4位或前5位可调整分辨率级别。
Timer0计数器位置可按照换算后的ADC数据按比例调整,其中100% PWM等于最大计数器位置(完全点亮),0%等于最小或最暗级别。伪代码4显示了16个级别的PWM换算公式,图3显示了PWM持续时间tPWM_LOW和tPWM_HIGH的时序图。
伪代码4:用于计算PWM比的子程序
图3:PWM输出和延时的时序图
在本例中,中断服务程序必须为下一个中断更新Timer0计数器位置。还必须检测持续时间是PWM高时间还是低时间。
因此,除了检测LED组状态,必须添加几条指令来检测用于调光控制的电位器电平,并且如伪代码4所示根据PWM_High和PWM_low值按比例调整Timer0计数器位置。伪代码5显示了用于调整PWM的代码,IF THEN语句用于检测PWM状态。
伪代码5:PWM比例设置的代码流
此方法也可以在具有额外程序存储器的中档8位单片机(如Microchip的PIC16F系列)上实现。这种升级使main子程序能够处理复杂的发光模式,如追光。该MCU的Timer1模块可用来改变针对追光模式更新2个RAM字节的持续时间。
总之,尽管有多种方法可有效驱动LCD背光或发光模式应用中的各组LCD,但设计人员一直在寻找新方法以在不影响性能的情况下消减成本。在低功耗应用中,可通过管理每组LED点亮的时间间隔来控制LED,从而实现高效照明。
此外,低引脚数单片机和I/O端口扩展器提供了低成本且具有高度设计灵活性的替代照明解决方案。
富昌电子[Future Electronics]提供富昌官方[电子元器件价格], 授权代理[wago]等数百家全球知名半导体供应商,覆盖[薄膜电容]等众多产品线,热门料号包括[GRM32ER61E226KE15L]。
发表评论 评论 (0 个评论)