搜索
bottom↓
回复: 18

TM1640驱动.还有TM1640真是不好用.

[复制链接]

出0入0汤圆

发表于 2013-10-26 22:30:37 | 显示全部楼层 |阅读模式
今天中午开始调TM1640(一种扫描16个8段数码管的IC)
检查了很多次.终于发现是芯片问题.
1.全亮时死机
2.第三级亮时正常。第四级亮时不正常

还好没批量打板.论坛哪位朋友用过这个芯片?质量如何?

------------------------------------------------------
对于这类数码管/按键扫描其实之前我想用STM8自己做一个来用的.只是觉得太耗时
IIC。从机实现思想:
1.初始化--->main()。状态机=空闲
2.开SDA下降沿中断.(在中断中检测SCL=1---------状态机=开始.    关SDA中断允许,开SCL上升沿中断。然后等待传输数据)
-----------------------------
SCL中断程序中检测SDA状态.并移位.8次中断后接收完一个数据.等开SDA上升沿中断----------检测停止.让状态机进入空闲

以STM8这类内部16M RC的速度一定能采集到数据

其实TM1640也是个带内部振荡器的单片机.模拟IIC从机罢了



-----------------------------------------------------
程序如下:(以下程序已经验证正确)大家使用时只要改头文件中前4行#define即可
-------------------------------------------头文件---------------------------------------------
#define     TM1640DelayTicks()      asm("nop"); asm("nop");
#define     TM1640Port  (GPIOD->ODR)
#define     TMSda       0x04
#define     TMScl       0x08


#define     TM1640_DIS_MODE1    0x88
#define     TM1640_DIS_MODE2    0x89
#define     TM1640_DIS_MODE3    0x8A
#define     TM1640_DIS_MODE4    0x8B
#define     TM1640_DIS_MODE5    0x8C
#define     TM1640_DIS_MODE6    0x8D
#define     TM1640_DIS_MODE7    0x8E
#define     TM1640_DIS_MODE8    0x8F
#define     TM1640_DIS_MODE_ON   0x8f   
#define     TM1640_DIS_MODE_OFF   0x80


#define     TM1640_BUFF_SIZE        16


extern void TM1640_SetDisAddress(unsigned char Address);
extern void TM1640_SetDisplayMode(unsigned char DisMode);
extern void TM1640_SetAutoAddressMode(void);

extern void TM1640Init(void);

-------------------------------------------C文件---------------------------------------------



#include "gobal.h"


void TM1640_Start(void)
{
    TM1640Port |= TMScl;//scl=1
    TM1640DelayTicks();  
    TM1640Port |= TMSda;//sda=1
    TM1640DelayTicks();
    TM1640Port &= ~TMSda;//sda=0
    TM1640DelayTicks();
    TM1640Port &= ~TMScl;//scl=0
    TM1640DelayTicks();
}

void TM1640_Stop(void)
{
    TM1640Port &= ~TMSda;//sda=0
    TM1640DelayTicks();
    TM1640Port &= ~TMScl;//scl=0
    TM1640DelayTicks();
    TM1640Port |= TMScl;//scl=1
    TM1640DelayTicks();
    TM1640Port |= TMSda;//sda=1
    TM1640DelayTicks();
}

void TM1640_SendByte(unsigned char c)
{
    unsigned char i;
    for(i=0;i!=8;i++)
    {
        TM1640Port &= ~TMScl;//scl=0
        TM1640DelayTicks();
        if( ((c&0x01)==0) )
        {
            TM1640Port &= ~TMSda;//sda=0            
        }
        else
        {
            TM1640Port |= TMSda;//sda=1
        }
        TM1640DelayTicks();
        TM1640Port |= TMScl;//scl=1
        TM1640DelayTicks();        
        c>>=1;
    }
}


/*------------API for main---------------------*/
/*------------API for main---------------------*/
/*------------API for main---------------------*/
/*------------API for main---------------------*/
/*------------API for main---------------------*/
//Address=0..0x0F
void TM1640_SetDisAddress(unsigned char Address)
{
    Address&=0x0F;
    Address+=0xC0;
    TM1640_Start();
    TM1640_SendByte(Address);
    TM1640_Stop();        
}
/////////////////
//设置显示模式.亮度DisMode=0---7
void TM1640_SetDisplayMode(unsigned char DisMode)
{
    TM1640_Start();
    TM1640_SendByte(DisMode);
    TM1640_Stop();         
}

//设置地址自动加1
void TM1640_SetAutoAddressMode(void)
{
    TM1640_Start();
    TM1640_SendByte(0x40);
    TM1640_Stop();      
}

void TM1640_SendData(unsigned char Address,unsigned char *p,unsigned char Len)
{
    //TM1640_SetAutoAddressMode();
    Address&=0x0F;
    Address+=0xC0;
    TM1640_Start();
    TM1640_SendByte(Address);   
    for( ;Len!=0;Len--)   
    {
        TM1640_SendByte(*p++);   
    }
    TM1640_Stop();     
}


/*
unsigned char TM1640_Buff[16]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                                0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}
*/

unsigned char const Tab[]={0xED,0x60,0xCE,0xEA,0x63,0xAB,0xAF,0xE0,
                          0xEF,0xEB,0xE7,0x2F,0x8D,0x6E,0x8F,0x87};

unsigned char TM1640_Buff[TM1640_BUFF_SIZE];//={Tab[0],Tab[1],Tab[2],Tab[3],Tab[4],Tab[5],Tab[6],Tab[7],Tab[0],Tab[1],Tab[2],Tab[3],Tab[4],Tab[5],Tab[6],Tab[7],};



void TM1640_BuffInit(void)
{
    unsigned char i;
    for(i=0;i!=TM1640_BUFF_SIZE;i++)
    {
        TM1640_Buff=Tab[i%8];
    }
}

void TM1640Init(void)
{
    TM1640_Stop();   
    TM1640_Stop();      
    TM1640_BuffInit();
   
    //TM1640_SetDisplayMode(TM1640_DIS_MODE3);
    TM1640_SetAutoAddressMode();
    TM1640_SendData(0,TM1640_Buff,TM1640_BUFF_SIZE);   


    TM1640_SetDisplayMode(TM1640_DIS_MODE1);
}


阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-10-26 22:36:53 | 显示全部楼层
顶楼主   

出0入0汤圆

发表于 2013-10-26 23:04:05 来自手机 | 显示全部楼层
不是吧  貌似这个系列没问题

出90入4汤圆

发表于 2013-10-26 23:04:21 | 显示全部楼层
TM1640我们也用,暂时没有法相问题

出0入50汤圆

发表于 2013-10-27 11:20:20 | 显示全部楼层
4年前用过,芯片还是不错的,不过这款芯片的手册和DEMO程序,那是相当的烂,粗糙啊!全是没经过试验的文字。

出0入0汤圆

发表于 2013-10-27 13:00:06 | 显示全部楼层
我一年要用几十K,这个东西还没有出个问题,有问题先找自已的问题。

出0入8汤圆

发表于 2013-10-27 13:02:44 | 显示全部楼层
估计是供电的问题吧  驱动数码管  电流还是不小的。

出0入0汤圆

 楼主| 发表于 2013-10-27 16:22:01 | 显示全部楼层
attach://148091.jpg

调节到第四级亮度还可以。再到第五级就关显示.
图上这个亮度的时候,芯片发热,不烫手。
能用,就是没长期测试。华强北新亚洲2期拿货0.85元。。。拿了1管

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出5入10汤圆

发表于 2015-10-29 12:55:23 | 显示全部楼层
smartmeter 发表于 2013-10-27 13:00
我一年要用几十K,这个东西还没有出个问题,有问题先找自已的问题。

大哥问一下,TM1640让数码管秒闪是怎么实现的

出0入50汤圆

发表于 2015-10-29 15:14:19 | 显示全部楼层
chen849928055 发表于 2015-10-29 12:55
大哥问一下,TM1640让数码管秒闪是怎么实现的

TM1640只负责将你送过去的128个点的LED数码管数据(16字节)自动帮你扫描刷新,其它的一概不管。
你要实现秒闪,就要用MCU控制送显的数据,0.5秒显示,另外0.5秒把秒闪的笔段数据清零,分别别正常和部分清零后的数据以最低0.5秒的间隔发给TM1640就可以实现秒闪了

出0入0汤圆

发表于 2016-10-8 11:22:09 | 显示全部楼层
这个TM1640芯片, 我折腾几天, 老是不稳定。。
后来, 发现必须在Data, Clk 脚接上100pf 的电容, 问题就解决了。
那个电容是大概100pf, 试验了1000pf (102), 不能。
在5V 那边, 0.1uF 也是非常必要的, 那么就可以稳定工作了。。
另外, 在亮度 level 8 时, 也没有问题了。。之前, 在没有放电容之前, level 5的亮度就会非常不稳定。。
我一直以为是软件问题, 实际是硬件外围零件缺少造成的低级错误!
TM1640 太敏感了。。

出0入0汤圆

发表于 2017-3-22 10:45:49 | 显示全部楼层
谢谢LZ           

出0入0汤圆

发表于 2017-3-22 15:56:12 | 显示全部楼层
我记着1638特好用,这个mark

出0入0汤圆

发表于 2019-1-29 12:15:56 | 显示全部楼层
M1640芯片,这个mark,正在用学习一下

出0入0汤圆

发表于 2019-2-14 13:57:35 | 显示全部楼层
TM1640一直用的挺好,没啥问题。之前用TM1680倒是有发热大,影响电容触摸的情况。

出35入0汤圆

发表于 2019-2-14 17:58:40 来自手机 | 显示全部楼层
以前用过,感觉很好…

出0入0汤圆

发表于 2019-2-14 18:08:35 | 显示全部楼层
MARK.............

出0入0汤圆

发表于 2019-6-14 18:23:31 | 显示全部楼层
Mark,记下,正在用,担心出问题

出0入25汤圆

发表于 2019-6-14 19:35:37 来自手机 | 显示全部楼层
楼主试试用示波器测量一下tm1640的电源引脚波形
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 16:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表