查看: 1128|回复: 0

【基于MAX 10 FPGA的开发套件DECA】(2)呼吸灯

[复制链接]
  • TA的每日心情
    慵懒
    2024-5-20 16:09
  • 签到天数: 665 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-8-24 10:42:08 | 显示全部楼层 |阅读模式
    分享到:
    呼吸灯的效果很炫,本文根据官方CD中的例子程序,在DECA开发套件上实现了LED呼吸灯效果。
          首先说说LED,中文全称发光二极管。作为最常见的器件,每个嵌入式工程师都不会陌生,在开发板上点亮LED的过程就好比软件工程师的“Hello World”一样经典。
            更进一步,这LED的亮暗程度还能调节,这个就涉及到一个技术PWM,中文全称脉宽调制。利用PWM产生的输出并不是一个稳态,而是一个周期性的二态输出。如下图所示,PWM波形按照固定周期在高低电平之间来回变化,而高电平持续的时间(也称作占空比)越大,LED就越亮。

          呼吸灯的效果就是LED由暗逐渐变亮,在由最亮逐渐变暗。结合PWM技术,就是高电平占空比由小逐渐变大,再由最大逐渐变小,完成一次“呼吸”。

          
            说完原理,再来看看程序的编写。
    always @(posedge MAX10_CLK1_50 or negedge reset_n)        begin                if(!reset_n)                        begin                                counter <= 0;                                display[0] <= 0;                        end                else begin                                counter   <= counter+1;                                PWM_width <= PWM_width[5:0]+ PWM_adj;                                                                if(counter[26])                                        begin                                                PWM_adj <= counter[25:20];                                        end                                else begin                                                PWM_adj <= ~ counter[25:20];                                         end                                display[0] <= ~PWM_width[6];                                display[1] <= ~PWM_width[6];                                display[2] <= ~PWM_width[6];                                display[3] <= ~PWM_width[6];                                display[4] <= PWM_width[6];                                display[5] <= PWM_width[6];                                display[6] <= PWM_width[6];                                display[7] <= PWM_width[6];                         end        end         
            程序行数不多,核心是这一段:
    PWM_width <= PWM_width[5:0]+ PWM_adj;              PWM_width[6]的输出对应着LED亮暗,而它的变化速率受此段加法控制。PWM_adj数值越大,PWM_width[6]高电平占空比越大,反之越小。因此程序中利用一个27-bit的计数器counter控制PWM_adj线性增加或者线性减少,以实现PWM_width[6]占空比的变化,达到LED“呼吸”效果。
          总结,利用Verilog实现了LED呼吸灯效果。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 12:16 , Processed in 0.117370 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.