原创 [学习]用595驱动LED实现灰度调节

2008-12-31 10:42 5437 15 16 分类: MCU/ 嵌入式


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

前一段时间在ouravr论坛里闲逛的时候看到一篇关于用595驱动LED现实等级灰度的求助贴,楼主的意思是用595驱动LED,并且每个LED的亮度值可以随意调节,来达到不同的灰度。我感觉挺有意思的,用595驱动LED并不难,整体亮度调节也不难,再用PWM控制所有595OE就可以了,单个LED灰度的调节就比较麻烦了。有一位叫“polarbear 枫叶”回帖提出的思路比较简单新颖,我按照他的思路试验了,感觉效果还不错!硬件是M48+2片595+16个LED,用的硬件ISP主机模式。 


先上图再说:


点击看大图







 


现在来说说实现的方法吧,转载一下枫叶的原话:


16个灰度,也就是 0--15,用4BIT来表示, <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />8-4-2-1

PWM产生4个联系不同占空比的脉冲

T8        8/16                
对应
BIT8        
T4        4/16                
对应
BIT4        
T2        2/16                
对应
BIT2        
T1        1/16                
对应
BIT1        

8/16
表示的是把PWM的周期划分为16份,其中量的周期占8份,其他雷同


当这4个脉冲运行后,由于人的生理特点。也会出现需他的灰度;

同上面的方法比较,它需要4次个周期人眼才能感觉出灰度;

但是对PWM的要求就很低;比如256种灰度,不过送8次,1024也不过要10

大大减低了对硬件的要求,现在基本都是使用这种方法;


在一个595+出现不同的灰度,就必须结合下面说的东东;

把一个灰度分解成4

例如灰度9
 1001
T8        8/16                
对应
BIT8        
T4        
不亮                对应
BIT4        
T2        
不亮                对应
BIT2        
T1        1/16                
对应
BIT1
所以我们的各个灰度分解为4帧,送4次都595,就可以了

例如在1595上出现下面不同灰度的4个点,(就以4个点举例,)

4
个点的灰度

3,12,10,7
转化为BIN

0011  1100  1010 0111
8-4-2-1分割出来,得到独立的4

BIT8
0      1     1   0
BIT4
0       1     0   1
BIT2
1      0      1   1
BIT1
1      0      0    1

步骤:

1.
BIT8的数据送到595,PWM控制OE的脉冲为
T8
2.
BIT4的数据送到595,PWM控制OE的脉冲为
T4
3.
BIT2的数据送到595,PWM控制OE的脉冲为
T2
4.
BIT1的数据送到595,PWM控制OE的脉冲为
T1


经过4帧的时间叠加后,就得到不同的灰度。


 

原帖地址:http://www.ouravr.com/bbs/bbs_content_all.jsp?bbs_sn=985613


我的程序下载(WINAVR GCC + m48Dev)rar


 


 


PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1611865 2015-7-31 09:15

不错,很实用!
相关推荐阅读
用户1079511 2009-07-10 16:08
Mega16读取SD卡内的FAT16文件
最近一直在学习FAT文件系统,在网络上找了一些资料加上参考别人写的程序,现在已经可以读取SD/MMC卡指定的文件,有些东西自己也不是很懂,回头还得慢慢研究。程序比较简单,就是读取SD卡的基本信息和初始...
用户1079511 2009-04-14 08:38
[原创]AVR M16热敏电阻测温LCM12864显示
https://static.assets-stash.eet-china.com/album/old-resources/2009/4/14/d085d878-6d8f-4245-acdb-cf44...
用户1079511 2009-04-08 11:34
Mega16 Bootloader+PC端上位机
AVR的Bootloader功能很方便产品的在线升级,以前参考网上的资料写过下位机的程序,标准的XMODEM协议,用超级终端来升级程序。最近在学习C#,所以用C#写个简单的上位机软件,配合以前的boo...
用户1079511 2009-01-22 16:15
Mega16热敏电阻测温上位机曲线显示
最近在一直学习用C#做上位机,把以前的做的m16热敏电阻测温的程序翻出来,稍加修改通过串口发给PC;PC端用c#2008写程序,接收数据后通过ZedGraph绘图控件实时显示出曲线图。ZedGraph...
用户1079511 2009-01-09 09:25
[原创]c#的Hex转Bin小程序
最近在搞AVR的bootloader,程序已经写好了,参考网上的代码用的是XMODEM协议用XP自带的超级终端。问题是xmodem支持bin格式的文件,一般用编译器生成的是hex文件不用直接使用,需要...
EE直播间
更多
我要评论
1
15
关闭 站长推荐上一条 /3 下一条