相关商品

  • Arduino 8位静态数码管 扫描显示器 SPI LED 数码管 扩展显示模块
  • Arduino 魔法书 实现梦想的工具和技术
  • Arduino UNO R3 控制器 ATmega328P-PU+ATmega16U2 arduino 原装进口
  • 奥松机器人 Arduino UNO R3 V5.0传感器扩展板 电子积木 正品保障 传感器套件专配 单片机开发
  • Arduino Due ARM控制器 Arduino原装进口 32bit CortexM3
  • Arduino Starter Kit Arduino入门套件 意大利中国代理
  • Arduino Yun Arduino官方原装 Arduino Yún WiFi Linux
  • Arduino无线SD扩展板 Arduino原装进口
  • LCD2004字符液晶显示器 2004液晶屏 Arduino力荐显示 超越LCD1602
  • Arduino IIC LCD2004 I2C接口字符液晶显示器 带库文件 电子积木
  • Arduino Ethernet w/o PoE Arduino原装进口 arduino网络扩展板
  • Arduino UNO R3 SMD 控制器 ATmega16U2 开发版 单片机 sparkfun原装进口
  • PicoBoard互动创新板(单板非套件) 传感器互动板 Scratch教学传感板
  • PVCBOT零基础机器人制作配书套件 小学生DIY模型科技小制作套装
  • PVCBOT零基础机器人制作教材  DIY机器人配书套件 科技小制作小发明
  • PVCBOT零基础机器人制作工具包 五金焊接电子模型玩具工具箱套装
  • ArduPilot 固定翼 飞控 多旋翼 Arduino 控制器 Sparkfun原装进口
  • Arduino 双路大功率直流电机驱动扩展板 VNH5019 美国Pololu原装
  • Arduino 直流电机驱动板 MiniMoto DRV8830 IIC/I2C Sparkfun原装
  • Arduino 机器人权威指南 爱上Arduino制作指南
  • Arduino 模拟传感器 Slider Sensor 直滑电位计 位置 滑动传感器
  • Arduino Intel Galileo Gen 2 伽利略开发板 官方授权
  • Arduino 条形LED模块 10段条状数码管 发光模块 梯度显示 短光条
  • Arduino RGB LED 模块 全彩LED灯 LED流水灯模块 机器人配件
  • 当前位置: 首页 > 应用教程 > 【创客学堂】基于Arduino与SPI总线接口的LED显示器

    【创客学堂】基于Arduino与SPI总线接口的LED显示器

    编辑:Techie2013-08-30 13531382@qq.com 浏览次数:4462

    Arduino连接了并行设备后,还剩下什么?

        有没有发现你的Arduino控制器的端口总是不够用?一些并行数据传输的设备总是会占用很多的端口,一大团乱糟糟的连接线,会让你大伤脑筋。如果你想用普通的4位LED数码管显示一个时钟,那么你需要用到8+4=12个端口!这对于Arduino UNO R3这样的,只余12个数字端口的小板子来说,还剩下什么?
    我们当然不会那么做,因为那样做你就像被绑在大树上一般。有更聪明的方法,那就是让数据串行,比较突出的代表是SPI总线串行通信方式,遵守SPI总线协议
    SPI是Motorola公司推出的一种同步串行通讯方式,是一种四线同步总线,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线(SDO、SDI、SCLK、CS),如果你只有一个SPI设备时,那你可以只用两根线(SDO、SCLK),节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议因其硬件功能很强,与SPI总线有关的软件就相当简单,使CPU有更多的时间处理其他事务。


    Arduino连接了SPI接口后,还会剩下很多


        下面就向大家介绍两款国外SPI总线接口Arduino  LED显示器,体会一下SPI的好处。(注:测试环境为:win7下Arduino IDE 1.0.5+奥松机器人Arduino UNO R3+奥松机器人Arduino sensor Shield V5.0


    Arduino UNO R3 与Arduino sensor Shield V5.0 
    图1 Arduino UNO R3 与Arduino sensor Shield V5.0

        第一款,4位LED数码管模块,呵呵,别担心 ,此管非彼管,不是普通的了,是具有SPI接口的4位LED数码管模块,因为现在只用了一个模块,所以,它的连接线可以最简化到除了电源线、地线以外,就只有SDO、SCLK这两条线!是不是so easy?但它可是简约而不简单哦。
     

    SPI接口4位LED数码管正面图     SPI接口4位LED数码管背面图
              图2 SPI接口4位LED数码管正面图                图3 SPI接口4位LED数码管背面图

        它采用了一块TM1637专用LED控制芯片,属于开源硬件,在网上可以找到它的Arduino库。模块采用SPI 串行接口,能够控制6位的8段LED数码管,可以在Arduino程序中设定8级可调的辉度,方便应用于不同明暗程度的场合;与Arduino控制器的连接也很方便,毕竟才两根线嘛,而且还可以在Arduino程序中更改端口号,真是太人性化了!


    我选择,我喜欢


        好吧,那先来看看怎么选择它的辉度的:
     

    Arduino 程序文件中可更改辉度相关数据 
    图4 Arduino 程序文件中可更改辉度相关数据


     
        在Arduino程序文件中,找到tm1637.set(BRIGHT_TYPICAL);其中值就是辉度值,可以设定为0-7的任意整数,0表示最暗。
    下面两图为辉度为0与7时的对比。


     SPI接口Digit Display模块的辉度0与辉度7的对比图

    图5  SPI接口Digit Display模块的辉度0与辉度7的对比图


        再来看看如修改端口
     

     
    Arduino 程序文件中可自定义相关SPI端口号

    图6 Arduino 程序文件中可自定义相关SPI端口号

        第二款,10位LED Bar,它采用了一块YM9221专用LED控制芯片,也属于开源硬件,在网上可以找到它的Arduino库。模块亦采用SPI 串行接口,这款显示器与上面介绍的相比,缺点在于:1.辉度不可自由调节,是通过三个精密电阻给定的;2.SPI端口的修改也不够方便,要到Arduino库LED_Bar.h中修改最多6条语句才行。优点在于:1.其将可控的12段LED分成三部分,也就是说,可以分段给定辉度值;2.它是具有SPI全功能的模块,板上已给出SPI输入输出的口线位置,想级联,那是相当容易。

    SPI接口LED Bar模块正面图        SPI接口LED Bar 模块反面图
     

          图7 SPI接口LED Bar模块正面图                  图8 SPI接口LED Bar 模块反面图

        下面说明一下如何更改LED Bar SPI端口,这里要跟你的Arduino板子对应,参考Arduino原理图与AVR芯片相关的引脚名称。


    Arduino 程序文件中更改SPI总线端口相关数据 
     

    图9 Arduino 程序文件中更改SPI总线端口相关数据
     
     

        悄悄地说一句:与这两款相似功能的产品即将由奥松机器人推出,敬请关注奥松机器人的官网 :)

    SPI在国内


    说了这么多新的SPI总线芯片模块,再来比较一下采用国内较为通用的74HC595芯片的SPI总线接口LED模块吧,就拿现在奥松机器人推出的一款SPI LED  Module V1.0来说,它用了8片SPI芯片,一位LED一个,成本是大了点。但优点是电流足够强大,实际上它用的LED也是个头不小,挺配套,呵呵;芯片自带缓冲,可静态显示 ,无抖动感;3.3V,5V电压通吃;应用起来也挺方便,不用去海搜Arduino库了,清一色的自定义即可,接口也是适配于Arduino 传感器扩展板的。


    SPI LED Module V1.0 
     

    图10 SPI LED Module V1.0

    顺便给出一个它的显示程序,功能是静态显示01234567,供大家参考。
    //Pin connected to ST_CP of 74HC595
    int latchPin = 4;
    //Pin connected to SH_CP of 74HC595
    int clockPin = 3;
    ////Pin connected to DS of 74HC595
    int dataPin = 2;
    int tab[]=
    {
      0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f
    };
    void setup() {
      //set pins to output because they are addressed in the main loop
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      for(int i = 0; i < 8; i++)// shut off all the segments before being displayed
      {
        digitalWrite(latchPin, LOW);
        shiftOut(dataPin, clockPin, LSBFIRST,0xff);  
        digitalWrite(latchPin, HIGH);
        delay(10);
      }   
    }

    void loop()
    {
      for(int i = 0; i < 8; i++)// display 0-7
      {
        digitalWrite(latchPin, LOW);
        shiftOut(dataPin, clockPin, LSBFIRST,tab[7-i]);  
        digitalWrite(latchPin, HIGH);
        delay(1000);
      }  
      while(1)//stop refresh the registers,then the numbers display steady
      {
        digitalWrite(latchPin, HIGH);
      }


    SPI LED Module V1.0显示0-7 
     

    图11 SPI LED Module V1.0显示0-7

    下面是相关链接

    8位静态数码管级联的视频演示   http://v.youku.com/v_show/id_XNDU1MTMyOTA0.html
    8位静态数码管 扩展显示模块   http://www.alsrobot.cn/goods-97.html
    Arduino UNO R3                
    http://www.alsrobot.cn/goods-141.html
    Arduino 传感器扩展板v5.0  
    http://www.alsrobot.cn/goods-147.html
    什么是SPI                    http://baike.baidu.com/view/245026.htm

    • 用户评价

    暂时还没有任何用户评论

    总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
    用户名: 匿名用户
    E-mail:
    评价等级:
    评论内容:
    验证码:
    captcha

    Hi,大家好,我是小奥!

    欢迎来到奥松机器人的世界!

    需要咨询服务请点小奥哦!

    • 销售咨询: 销售咨询
    • 销售咨询: 销售咨询
    • 技术支持: 技术支持
    • 咨询电话:
      0451-86628691
    Top