欢迎访问电子工程网!   登录 | 免费注册 ]   

xydedu的个人空间 http://www.eechina.com/space-uid-99986.html [收藏] [复制] [分享] [RSS]

博客

FPGA入门LED的FPGA控制

已有 636 次阅读2014-3-18 14:43 | 关键词: FPGA, LED

技术交流  找杨工 Q1075349026
项目简介
该项目包括6个部分:
第一部分: LED闪烁
第二部分: LED是怎样工作的(发光二极管的工作原理)
第三部分: 改变发光二极管的亮度
第四部分: 7段数码管显示
第五部分: LED复用
第六部分: LED点阵显示
链接
美信的LED显示技术.
引脚复用 - 减少LED显示时使用的引脚数量.
LED闪烁
你有一个带LED的FPGA板吗?
试试下面这个简单的设计
==========================================================
module LEDglow(clk, LED);
input clk;
output LED;
reg [23:0] cnt;
always @(posedge clk) cnt<=cnt+1;
wire [3:0] PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];
reg [4:0] PWM;
always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];
endmodule
==========================================================
注意:"clk" 时钟信号的频率大约在 20MHz.
否则的话,LED闪烁得可能会太快或太慢。
 
LED是怎样工作的
用FPGA控制LED
理想的发光二极管控制器是一个电流源。
FPGA的输出引脚是电压源,简单的解决办法是添加一个串联电阻到LED,通
常电阻的大小取100到1K欧姆。
 
LED基础
LED (发光二极管) 是一个当有点流流经它时会发光的半导体器件。
其符号看起来像二极管,有一个阴极和一个阳极。

LED允许电流从一个方向导通,另一个方向截至,这点跟二极管是一样的
跟所有二极管一样,LED也有一个导通电压,大约在2.0V左右。
低于 2.0V 时, 不发光(没有电流流过LED).
高于 2.0V 时, LED导通,发光强度随着流经LED电流的大小而变化。
LED有两个极限参数:
最大正向电流(最大发光强度).通常在10 mA量级.
最大反向电压(尽管LED被反向偏置时没有电流流过它,但是也不要
加太大的反向电压).通常反向电压限制在5V,比通常的二极管低得多!
改变发光二极管的亮度
点亮或熄灭LED
下面是如何让LED闪烁的代码(开/关).
====================================================
module LEDblink(clk, LED);
input clk;     // clock tyPICally from 10MHz to 50MHz
output LED;
// create a binary counter
reg [32:0] cnt;
always @(posedge clk) cnt<=cnt+1;
assign LED = cnt[22];   // blink the LED at a few Hz (change                      
 // the bit index to change the blinking rate)
endmodule
====================================================
使LED半亮
一种办法是增大串联在LED的电阻的阻值一倍。
另一种办法是通过FPGA驱动LED一半的时间。如果切换的速度足够快的话,LED看
起来就是半亮的。
====================================================
module LEDhalflit(clk, LED);
input clk;     // clk should be at least 200Hz. Anything above                //is
fine (most FPGA boards have adequate clocks,               // running at a few
10's of MHz)
output LED;
reg toggle;
always @(posedge clk) toggle<=~toggle;     // toggles at half                     
                      //the clk frequency                                         
 // (at least 100Hz)
assign LED = toggle;
endmodule
====================================================
平滑的改变LED的亮度
对于LED亮度控制。PWM信号是一个理想的解决办法。
下面是使用4位数字来控制LED产生16个亮度等级的例子。
====================================================
module LED_PWM(clk, PWM_input, LED);
input clk;
input [3:0] PWM_input;     // 16 intensity levels
output LED;
reg [4:0] PWM;
always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];
endmodule
====================================================
LED呼吸闪烁
通过连续的改变LED的亮度,使得LED看起来像是在呼吸。
====================================================
module LEDglow(clk, LED);
input clk;
output LED;
reg [23:0] cnt;
always @(posedge clk) cnt<=cnt+1;
wire [3:0] PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];                        
// ramp the PWM input up and down
reg [4:0] PWM;
always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];
endmodule
====================================================
这跟我们在第一节展示的例子的HDL代码是一样的.
更多详情请登录WWW.edu118.com
技术咨询:杨老师13724236349  QQ:1075349026 
★这里是【深圳信盈达嵌入式实训学院】,单片机培训、嵌入式ARM培训、linux培训、PCB培训、
FPGA培训,汇编C语言培训、Android培训、数电模电培训
cortex-m3培训!

 

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 xydedu 2014-3-18 14:44
深圳信盈达0元学习C语言编程啦!
活动申请方式:1、编辑手机短信“我要学习”发送至13724236349
              2、添加QQ :1075349026申请
本次活动仅限理工科相关专业的朋友参与,start  here加入到工程师的队伍里来吧!
仅限深圳 广州和郑州三地

facelist

您需要登录后才可以评论 登录 | 立即注册

回顶部