rebar 发表于 2013-12-14 22:53:41

AVR缺货涨价,有个板子打算转向ST家,有个问题请教大家....

原来单片机用的ATmega48PA,最便宜的那种,现在要4.5元.
如果换STM8S103F3P61.75元.
要驱动个2位共阳7段数码管,

48PA引脚加220ohm限流直接驱动,共阳脚直接接IO,长期工作无任何问题,
由于需要在阳光下也要有较好的亮度,故需较大电流驱动LED,这样一来共阳
脚接的IO直接负载8个LED的电流之和就很可观. 但是AVR的工作没问题.

现在问题是:
STM8S103F3P6能胜任吗? 最小改动方案怎么样才合理?







wajlh 发表于 2013-12-14 23:14:43

硬件不用动,软件改下扫描方式就可以了。原来按位扫描,改成按段扫描。这样可以保证同时最多只有2段LED点亮。电流肯定没问题了。

fengxin32 发表于 2013-12-14 23:15:04

不是有LGT么?8F88貌似直代吧

delazio 发表于 2013-12-14 23:27:56

(5-2)/220也不过十来毫安……

rebar 发表于 2013-12-14 23:29:01

wajlh 发表于 2013-12-14 23:14
硬件不用动,软件改下扫描方式就可以了。原来按位扫描,改成按段扫描。这样可以保证同时最多只有2段LED点亮 ...

谢谢, 值得一试..........

rebar 发表于 2013-12-14 23:30:29

delazio 发表于 2013-12-14 23:27
(5-2)/220也不过十来毫安……

关键是假如显示88, CA1 CA2的电流, 按照2楼的试一试.

delazio 发表于 2013-12-14 23:37:43

rebar 发表于 2013-12-14 23:30
关键是假如显示88, CA1 CA2的电流, 按照2楼的试一试.

刚才倒是没看那两脚
不过如果换主控加两个三极管也不会影响bom成本吧

rebar 发表于 2013-12-14 23:46:14

delazio 发表于 2013-12-14 23:37
刚才倒是没看那两脚
不过如果换主控加两个三极管也不会影响bom成本吧

俩电阻俩PNP, 成本增加不多....
当然最好是一个都不增加, 坛子高人多, 也许就有惊喜{:biggrin:} !!

delazio 发表于 2013-12-14 23:51:43

本帖最后由 delazio 于 2013-12-14 23:59 编辑

rebar 发表于 2013-12-14 23:46
俩电阻俩PNP, 成本增加不多....
当然最好是一个都不增加, 坛子高人多, 也许就有惊喜 !! ...

我看俩PNP和俩电阻加起来的成本都比你原来切换降下来的少少多了

rebar 发表于 2013-12-15 00:15:21

delazio 发表于 2013-12-14 23:51
我看俩PNP和俩电阻加起来的成本都比你原来切换降下来的少少多了

那看来还是值得换的{:biggrin:}

fiddly 发表于 2013-12-15 11:06:20

wajlh 发表于 昨天 23:14 static/image/common/back.gif
硬件不用动,软件改下扫描方式就可以了。原来按位扫描,改成按段扫描。这样可以保证同时最多只有2段LED点亮。电流肯定没问题了。

电流没问题了,亮度是问题吧,

xiaodao35 发表于 2013-12-15 11:34:59

超高亮的管子或者换换颜色!

rebar 发表于 2013-12-15 11:41:12

xiaodao35 发表于 2013-12-15 11:34
超高亮的管子或者换换颜色!

超亮管子是什么工作原理,是不是电流一样,亮度差别?

XIVN1987 发表于 2013-12-15 11:51:38

可以每个数码管的高4位字段和低4位字段分时点亮,这样电流就可以降低一半了

xiaodao35 发表于 2013-12-15 12:04:08

rebar 发表于 2013-12-15 11:41
超亮管子是什么工作原理,是不是电流一样,亮度差别?

是的,同样电流,超高亮要亮一些!

rebar 发表于 2013-12-16 16:56:35

wajlh 发表于 2013-12-14 23:14
硬件不用动,软件改下扫描方式就可以了。原来按位扫描,改成按段扫描。这样可以保证同时最多只有2段LED点亮 ...

按照wailh的建议试验了一下,段扫是可行的,亮度也能接受
就是STM8s103的端口有点拧巴,PD口只有1-6, 数码管的g段放在PC7了
没理会dp

下面是图和不成熟的测试代码
不知道为什么加上asm("sim");编译出错,注释掉就好, 什么东东没有include?




/* MAIN.C file
*
* Copyright (c) 2002-2005 STMicroelectronics
*/

#include "iostm8s103.h"
//显示码
unsigned char leddata[]={
                0xC0,//"0"
                0xF9,//"1"
                0xA4,//"2"
                0xB0,//"3"
                0x99,//"4"
                0x92,//"5"
                0x82,//"6"
                0xF8,//"7"
                0x80,//"8"
                0x90,//"9"
                0x88,//"A"
                0x83,//"B"
                0xC6,//"C"
                0xA1,//"D"
                0x86,//"E"
                0x8E,//"F"
                0x89,//"H"
                0xC7,//"L"
                0xC8,//"n"
                0xC1,//"u"
                0x8C,//"P"
                0xA3,//"o"
                0xBF,//"-"
                0xFF,//熄灭
                0xFF//自定义

                         };
                                                                                               
_Bool CA1   @PC_ODR:5;
_Bool CA2   @PC_ODR:6;
_Bool LED_g @PC_ODR:7;
unsigned char i=0;
unsigned char j=0;
unsigned int k=0;

void GPIO_init(void)
{
        //asm("sim");
        PC_DDR |= 0xE0;
        PC_CR1 |= 0xE0;//推挽输出
        PD_DDR |= 0x7E;
        PD_CR1 |= 0x00;//开漏输出
        //asm("rim");
}

void CLK_init(void)
{
CLK_CKDIVR = 0x08; //16M内部RC经2分频后系统时钟8M
}

void delay(unsigned int count)//不精确延时
{
while(count !=0)
        {
                count--;
        }
}
void Light_segment(unsigned char dsp_data)//段扫函数
{
unsigned char segment;
dsp_data = dsp_data<<1;
        for(segment=0;segment<8;segment++)
        {
                switch(segment)
                {
                        case 1:
                        PD_ODR = dsp_data | 0xFD;//a
                        delay(100);
                        break;
                        case 2:
                        PD_ODR = dsp_data | 0xFB;//b
                        delay(100);
                        break;                       
                        case 3:
                        PD_ODR = dsp_data | 0xF7;//c
                        delay(100);
                        break;
                        case 4:
                        PD_ODR = dsp_data | 0xEF;//d
                        delay(100);
                        break;
                        case 5:
                        PD_ODR = dsp_data | 0xDF;//e
                        delay(100);
                        break;
                        case 6:
                        PD_ODR = dsp_data | 0xBF;//f
                        delay(100);
                        break;
                        case 7:
                        LED_g = dsp_data>>7;//7段数码管的g段接在PC7上,单独处理
                        delay(100);
                        break;                       
                        default:
                        break;
                }
        PD_ODR |= 0xFF;
        LED_g =1;
                delay(10);
        }       
}
main()
{
GPIO_init();
CLK_init();

for(;;){

for(j=0;j<11;j++)//滚动显示0-9
{
        for(k=0;k<1000;k++)//
        {
                if(i==0)
                        {
                                CA1=1;
                                i=1;
                        }
                        else
                        {
                                CA2=1;
                                i=0;
                        }
                Light_segment(leddata);//将显示数据进行段扫
        }
}
}
}



页: [1]
查看完整版本: AVR缺货涨价,有个板子打算转向ST家,有个问题请教大家....