lmt50211 发表于 2013-5-16 21:46:53

数码管公共脚接电阻,如何解决因亮多段而引起的亮度不同

目前公司提出节约成本,故而提出把数码管的8段码的电阻取消,改为在公共脚串接.但在写程序出现开多段和少段时亮度不同的情况.现在我有想到反过来扫描,即扫段码(通常我们是扫描位码).但想了很久也没有想出应该如何编写程序.不知各位有没有更好的程序方法来解决这种问题.

gyzzg2030 发表于 2013-5-16 21:51:13

可以查表,根据笔画多少调整扫描时间,几个电阻都省,这蛋疼的公司产品

sfes 发表于 2013-5-16 21:52:26

就差几个电阻钱?太能搞了吧

lmt50211 发表于 2013-5-16 21:54:18

gyzzg2030 发表于 2013-5-16 21:51 static/image/common/back.gif
可以查表,根据笔画多少调整扫描时间,几个电阻都省,这蛋疼的公司产品

这个没办法呀,上面一句话,下面就得跑断腿了.
你的意思还是扫描位码?

.titrwh 发表于 2013-5-16 21:54:55

如果是共阴极数码管,先给A高电平,然后哪一位数码管A需要亮就给哪个com低电平,不需要亮给高电平,再给B高电平...........
这样需要扫描8次才能完成一次显示,这种方法适合数码管大于8位时用。

elec2000 发表于 2013-5-16 21:56:06

可以用二极管降压,这样亮度变化小

turf456 发表于 2013-5-16 21:56:37

原理上行不通

lmt50211 发表于 2013-5-16 22:02:16

.titrwh 发表于 2013-5-16 21:54 static/image/common/back.gif
如果是共阴极数码管,先给A高电平,然后哪一位数码管A需要亮就给哪个com低电平,不需要亮给高电平,再给B高 ...

最开始我也是这样想的,但试了很久也没有想出如何把将段码拆分出来扫描.不知可否讲解下如何送值.比如:有4个dis_buf存放段码,如何才能拆出里面的段码和位码对应?

eduhf_123 发表于 2013-5-16 22:03:23

问题的关键在于,数码管总共有多少位?

lmt50211 发表于 2013-5-16 22:05:27

turf456 发表于 2013-5-16 21:56 static/image/common/back.gif
原理上行不通

不会呀,我有见过别人产品用过这样的原理,但是显示1和显示8的亮度差不多(肉眼很难看出亮度不同)

lmt50211 发表于 2013-5-16 22:10:01

eduhf_123 发表于 2013-5-16 22:03 static/image/common/back.gif
问题的关键在于,数码管总共有多少位?

这个也没有定,2---5位吧,位数再多就没有太多必要了,加个数码管驱动芯片就行了

zhiwei 发表于 2013-5-16 22:11:35

段数多了就扫描时间长一些,反之少一些,使表现出来的亮度相同。
不过这种硬件方式有弊端:8字段LED并联驱动,遇到Vf离散性较大,那就一笔亮,一笔暗,基本上就报废了。。。

lmt50211 发表于 2013-5-16 22:17:49

zhiwei 发表于 2013-5-16 22:11 static/image/common/back.gif
段数多了就扫描时间长一些,反之少一些,使表现出来的亮度相同。
不过这种硬件方式有弊端:8字段LED并联驱 ...

不是并联使用,是几位8字数码管,接法上是公共脚接限流电阻.

bigeblis 发表于 2013-5-16 22:29:01

5楼的思路很好,学习了!
其实就是把段控制作为位控制、位控制作为段控制来用。是否可以这样:
先给A高电平(设数码管是共阴),然后查询显示缓冲里所有A段是高的位,有高的位输出低,没有的输出高,这样就实现了A段的驱动。后面的依次进行。。
但是5楼说高于8位才适用我不认同。位数多了,还不如用段限流电阻+传统解码驱动的方式来做,这样位数再多也就是7个电阻。如果按楼主的设计,8位显示就是8个电阻,不如不改!

Sullivan 发表于 2013-5-16 22:39:39

很有意思的帖子,我的思路又开阔了。

dashashi 发表于 2013-5-16 23:04:48

5L的方法好
软件的话用位运算很容易实现

hefq 发表于 2013-5-16 23:10:21

我是段码+循环移位的掩码解决,亮度特别纯匀,等于是一次只扫一个灯

ckvlhf 发表于 2013-5-16 23:10:38

换一种扫描方法,每次所有数码管显示同一段,当然,某位数字里没有那一段的就不用显示了。

hefq 发表于 2013-5-16 23:21:02

#define led_dat_len 3
uc data led_dat;
uc code led_seg[]={
0x05,0x7D,0x46,0x54,0x3C,0x94,0x84,0x5D,0x04,0x14,0x0C,0xA4,0x87,0x64,0x86,0x8E};
void kd_scan()
{
        H0=H1=H2=H3=0;//¹ØÊýÂë¹ÜËùÓÐλѡ
        P1=0xff;HA=0;//Êý¾Ý¿Úתµ½ÊäÈë״̬
        seg_mask<<=1;if(seg_mask==0){seg_mask=1;}//Éú³ÉÑ­»·×óÒÆÑÚÂë
        XD0=P1;HA=1;//¶ÁIO״̬
        if(kd_cnt>=led_dat_len)kd_cnt=0;
        P1=(~seg_mask)|led_seg];
        if(kd_cnt==0)H0=1;
        if(kd_cnt==1)H1=1;
        if(kd_cnt==2)H2=1;
        if(kd_cnt==3)H3=1;
        kd_cnt++;
}

hefq 发表于 2013-5-16 23:23:06

zhangyidao 发表于 2013-5-16 23:29:52

贴片电阻一盘5k个,10元钱。我无语了。

hefq 发表于 2013-5-16 23:46:22

zhangyidao 发表于 2013-5-16 23:29 static/image/common/back.gif
贴片电阻一盘5k个,10元钱。我无语了。

不要你自己焊,你当然觉得轻松,我以前自己一个一个焊的,一个板能少5个电阻,我要少好多事{:lol:}

jiwm 发表于 2013-5-16 23:51:35

省这几个电阻得不偿失。我觉得怕是不是你公司提出来的想法,而是你自己的想法吧,一个成熟的公司不会在这种地方提出降低成本的。

huangdog 发表于 2013-5-16 23:53:48

真够抠门的。。。可以一段一段的扫描,保证了亮度一样而且亮度比一位一位扫要高~

gzhuli 发表于 2013-5-17 00:18:17

hefq 发表于 2013-5-16 23:46 static/image/common/back.gif
不要你自己焊,你当然觉得轻松,我以前自己一个一个焊的,一个板能少5个电阻,我要少好多事...

有8位排阻嘛……

hefq 发表于 2013-5-17 00:24:27

gzhuli 发表于 2013-5-17 00:18 static/image/common/back.gif
有8位排阻嘛……

当时没想到,想到的时候已经解决了

chenchaoting 发表于 2013-5-17 01:17:22

告诉你一个方法,在一个数组里查询要显示的数据的段数,再根据这个表做不同的延时,我以前也做了一个这样的,最终这样搞好的

bg6nw 发表于 2013-5-17 04:08:09

两种方法都很好,一是改变扫描时间调节亮度,一是把一个数字拆分成8段单独点亮。学习了。

zhanan 发表于 2013-5-17 07:33:28

bigeblis 发表于 2013-5-16 22:29 static/image/common/back.gif
5楼的思路很好,学习了!
其实就是把段控制作为位控制、位控制作为段控制来用。是否可以这样:
先给A高电平 ...

段扫描比位扫描好不少:限流电阻一个数码管用一个
1. 位数少,省电阻;
2. 不同色、不同大小数码管可以混用,亮度高的电阻大一些,亮度低的电阻小一些。
3. 轻松驱动>16位的数码管不闪烁,程序刷新时间宽裕。
4. 至少8个按键,不像位扫描受位数少限制。

代价只是程序上,把位扫描段码直送改为位组装,增加一个位数for

jiangkexiaozhen 发表于 2013-5-17 07:46:31

曾经尝试过,但是除了那个适当延长时间的那个方法外,亮度还是达不到;

二极管分压的没用过,电阻最好还是不省掉的好

zhiwei 发表于 2013-5-17 08:15:09

lmt50211 发表于 2013-5-16 22:17 static/image/common/back.gif
不是并联使用,是几位8字数码管,接法上是公共脚接限流电阻.

同一个8段里面几个LED不就类似并联了吗?

yuyu87 发表于 2013-5-17 08:28:30

哈,同意,比如有3位LED,同一时刻先点亮3位里边A段有的,再点亮B,C,D,E,F,G,

liulingo1 发表于 2013-5-17 08:37:05

将 要显示 的 数字,分 笔画 来 轮流 显示。即同一时间,只亮A-DP中的一个笔画

lusson 发表于 2013-5-17 08:52:20

我们公司别说8个电阻,一个电阻可以省的都要省掉。。
其实就是这样:A B C D E F G HCOM1 COM2 COM3 COM4

原来的做法是只使能COM1,然后送A-H的数据,接着只使能COM2,送A-H的数据,依次类推。显示缓存表里存的是A-H的数据。

现在是反过来:只使能A,送COM数据,只使能B,送COM数据,依次类推。显示缓存表里存的是COM数据,中间加一层转换就好了

zhugean 发表于 2013-5-17 08:59:45

直接都省掉,你看看那些做点阵LED的哪有加限流电阻的啊
太亮的话可以调一下显示的占空比

fwluck 发表于 2013-5-17 09:01:27

几种方法都是大家的;
一用亮的时间来平衡亮度,数据要多测;
二单段显示这个效果会很好,程序要难好多好多。

三还有一法就是恒压驱动,可以较好解决以上问题。

fwluck 发表于 2013-5-17 09:02:39

当然恒压是每段串电阻的一种变种。

millwood0 发表于 2013-5-17 09:09:36

数码管公共脚接电阻,如何解决因亮多段而引起的亮度不同

Easy:

Optimal solution: don't do it. You can spare a few resistors, cannot you?

Suboptimal solution #1: run the leds hot. leds at 15ma are roughly as bright as leds at 20ma or 25ma, etc.

Suboptinal solution #2: dynamically alter the display duration based on the number of segments lit. If you are lighting up two segments, "1" for example, display it for 1ms; if you are lighting up 5 segments ("5"), you display it for 2ms. This can be easily done with an array and loading up the timer offset / top in the isr.

zjk 发表于 2013-5-17 09:29:42

LZ公司真奇葩,不过对提高技术有好处

benqme 发表于 2013-5-17 09:32:36

这样做肯定不行

xiaobendan001 发表于 2013-5-17 09:57:52

还是都省掉吧,调一下占空比,只要芯片不是很热就行了,那些大屏幕都没有电阻的。

lmt50211 发表于 2013-5-17 21:08:09

zhangyidao 发表于 2013-5-16 23:29 static/image/common/back.gif
贴片电阻一盘5k个,10元钱。我无语了。

其实呢,我个人觉得没必要,但是公司里说机器弄一个电阻比弄8个电阻要快,所以了....

lmt50211 发表于 2013-5-17 21:14:23

jiwm 发表于 2013-5-16 23:51 static/image/common/back.gif
省这几个电阻得不偿失。我觉得怕是不是你公司提出来的想法,而是你自己的想法吧,一个成熟的公司不会在这种 ...

首先不管是不是公司要求,你觉得对开拓思路有没有帮助呢?然后才说是不是我自己的思路.当然,如果能有一种减少生产操作量,那何不是一种改善呢.

lmt50211 发表于 2013-5-17 21:15:47

hefq 发表于 2013-5-16 23:23 static/image/common/back.gif


谢谢!先研究下您的代码.....

lmt50211 发表于 2013-5-17 21:17:35

zhanan 发表于 2013-5-17 07:33 static/image/common/back.gif
段扫描比位扫描好不少:限流电阻一个数码管用一个
1. 位数少,省电阻;
2. 不同色、不同大小数码管可以 ...

说得很有道理.....

lmt50211 发表于 2013-5-17 21:18:59

benqme 发表于 2013-5-17 09:32 static/image/common/back.gif
这样做肯定不行

是电工就得和男人一样别说不行.

kebaojun305 发表于 2013-5-17 21:58:17

sfes 发表于 2013-5-16 21:52 static/image/common/back.gif
就差几个电阻钱?太能搞了吧

说真的加工费比电阻贵多了

zhangyidao 发表于 2013-5-18 08:03:45

lmt50211 发表于 2013-5-17 21:08 static/image/common/back.gif
其实呢,我个人觉得没必要,但是公司里说机器弄一个电阻比弄8个电阻要快,所以了.... ...

想想也确实有道理。省了加工费,还减少了故障隐患。

canback 发表于 2013-5-18 08:17:52

我一般喜欢用两个 4位排阻,加工比较方便。

如果都不加,通过占空比调节,不知道对单片机io口有没有不好的。

lmt50211 发表于 2013-5-18 08:40:29

canback 发表于 2013-5-18 08:17 static/image/common/back.gif
我一般喜欢用两个 4位排阻,加工比较方便。

如果都不加,通过占空比调节,不知道对单片机io口有没有不好的 ...

我试过不加,也没有出现过问题(没有做老化测试的)。不过从原理上说,不加肯定会有影响的。
页: [1]
查看完整版本: 数码管公共脚接电阻,如何解决因亮多段而引起的亮度不同