"); //-->
基于SPI的MAX7221与MCU连接
0 引 言
在仪器仪表的设计制作中常要用到数码管显示,有时数码管的数量还会很多。如果为每个数码管都单独设计驱动电路,一方面对MCU来说是一个不小的负担,另一方面大幅增加了电路板的面积成本。集成电路MAX7221单片可以驱动8位数码管,并且可以进行级联扩展,对于这个问题是一个较为妥善的解决方案。一般MAX7221与MCU的连接使用两种方法:一是使用MCU的I/O口直接模拟通信所需要的时序,此法操作较为繁琐,易出错;二是使用UART串行口,这种方法的通信速率最高仅为11.52 Kb/s。介绍第三种方法,即MAX7221通过串行外设接口(Serial PeripheralInteRFace,SPI)与MCU连接,此法具有简单和易于使用的特点,其通信速率理论上高达10 Mb/s。
1 SPI原理
SPI是一种由Motorola公司开发的高速、全双工、同步串行通信接口。MCU通过它可以方便地连接到存储器、A/D转换器、D/A转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至另一个MCU。由于SPI的成本低,实用性强,很多新推出的芯片都增加了对它的支持。
SPI以主从方式工作,这种模式通常有一个主机和一个或多个从机,使用4根信号线:主机输出/从机输入(MOSI)、主机输入/主机输出(MISO)、串行时钟SCLK和外设片选(SS)。典型的点对点SPI通信连接如图1所示。

SPI与UART的一个重要的区别就是它是一个同步通信协议。主机中有一个时钟发生器,可以在SCLK引脚上产生时钟信号,所有的数据传输都按照这个同步时钟来进行。主机和从机各有两个移位寄存器分布在各自MOSI及MISO引脚,具体的传输过程就是由这几个移位寄存器来完成的。以SS低电平有效为例,平时,主机维持SS为高电平,SCLK无信号;进行传输时,主机首先将SS引脚拉低作为从机的片选信号,然后在SCLK引脚上产生同步时钟,需要发送或接收的数据就按照这个时钟进入相应的移位寄存器。主机的数据从主机的MOSI引脚移出,移入到从机的MISO引脚;从机的数据从从机的MOSI引脚移出,移人到主机的MI-SO引脚;传输结束后,主机将SS拉高。有多个从机时,主机的SS信号可以与从机的片选逻辑进行组合,没有被选中的从机将不会参与SPI传输。
2 器件介绍
2.1 MAX7221
MAX7221是一款串行接口的数码管显示驱动器,单片最多可驱动8位数码管。它包含有七段译码器、位和段驱动器、多路扫描器、段驱动电流调节器、亮度脉宽调节器及多个特殊功能寄存器。MAX7221不仅可以很方便地与MCU相连接,还可通过级联进行扩展。它的主要功能特点有:
(1)10 MHz的串行接口;
(2)BCD译码/非译码模式选择;
(3)耗电仅150 μA的关断模式;
(4)数字和模拟双重亮度控制;
(5)SPI,QSPI,Microwire等多种串行接口。
2.2 MCU
考虑了实用性、性能价格比等多种因素,实验MCU选用ATmega128,它是一种基于AVR RISC结构的8位低功耗CMOS微处理器,最高工作频率为16 MHz。它采用了先进的指令集,绝大多数指令均为单周期指令,自带128 KB的FLASH,可以通过SPI,JTAG、引导程序等多种方式多次编程,支持系统编程及调试。ATmega128的SPI接口最高工作频率为主频的50%,可达8 MHz(与MAX7221SPI口的速率上限相当)。该接口的工作方式(主/从)、时钟极性、时钟沿及工作频率均可灵活配置。
3 硬件连接
图2所示为4片级联MAX7221通过SPI与ATmega128连接的电路图。该系统最多可以驱动32位数码管。由于数据是单向传输,因此将ATmega128配置为主机,MAX7221配置为从机,可以省略从机向主机传输数据的线路。在这种级联连接方式中,所有MAX7221的CS都连接在一起,其片选是通过在要传输的数据前增加空操作指令来实现的。

例如,要向第二级的MAX7221传输数据,应当在时序到来之后首先传输一个空操作指令(0X0000),然后再传输数据。要向第三级的MAX7221传输数据时,要先传输两个空操作指令,以此类推。值得一提的是,如果要用这种级联方式设计个数不是8的整数倍的数码管显示驱动器,必须要为各个MAX7221分配平均的扫描位数。
例如,如果需要12位数码管显示,那么采用两级级联驱动,每个MAX7221驱动6个数码管;如果需要11位数码管显示,那么一级驱动6个,一级驱动5个,但扫描限位仍然都设定为6,只将其中一个空接。这么做是因为MAX7221对8位数码管的扫描能力是一定的,在相同亮度的等级下需要进行扫描的数码管个数越多,数码管看上去就越暗。如果各级MAX7221设定的扫描限位不一致,尽管设定了相同的亮度等级,实际显示的亮度也会有所差别。
4 软件设计
图3是MAX7221的SPI传输时序图。

根据MAX7221的SPI时序图及寄存器地址表,可以编制出相应的ATmega128 SPI子程序。SPI_init()用于初始化ATmega128的SPI口,设定时钟极性和频率等参数;SPI_transmit()用于在时序到来时连续传输16位数据;MAX7221_transmit()用于总体完成从CS被拉低到数据传输结束的全过程,并将级联情况也考虑了进去。


需要注意的一点是MAX7221一上电就进入到关断模式,所驱动的数码管无任何显示,必须首先退出该模式进入到正常工作模式。相应的子程序如下:


5 实 验
实验中使用上述级联系统的软硬件进行了32位数码管循环显示测试,结果正常。此外,还利用AT-mega128自带的定时器对第一级的MAX7221进行速率测试,流程如图4所示。一共进行20次测试,最终定时器的平均读数为1 430 ms。据此可计算出数据传输的速率
该速率未能达到理论上的8 Mb/s,其原因是进入和退出函数、循环以及对SS的拉低和置高都耗费了MCU的有效时间。可以推断,提高在MCU的频率时MAX7221的SPI传输速率还可进一步提高。

6 结 语
实验证明,MAX7221仅需3线即可通过SPI与MCU连接。这种SPI通信法不但通信速率高,还可用于级联的MAX7221系统,以驱动更多的数码管。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
AI 数据中心加速迭代,催生全新电子硬件回收经济
一种基于新型自动识别芯片的考勤系统 ——识读器的原理与设计
UWB超宽带技术发力,破解车辆无钥匙系统盗抢漏洞
安捷伦全新EMI预兼容测试方案
1200V 碳化硅半桥模块问世,为 IGBT 方案提供简易升级路径
曝iPhone 18标准版屏幕降级
600V 超结 MOSFET 面向电动汽车、开关电源及光伏逆变器应用
dsp系列产品
Exar四通道数字电源解决方案
求教VxWorks串口启动问题
请教一个问题,高手进来看一下,关于平台间移植
绿色能源趋势和对电源转换的影响
一种用单片机实现的实用型温湿度控制仪
一种新型的时钟日历芯片DS12C887
调用ti的库函数TMS320F2812的fft源程序
TDA1011功放电路
USB 设计开发常用资料
特斯拉中国车机牵手豆包、DeepSeek
用于前沿小型太阳能与通信电源系统的高能效方案
一种用于单片机的红外串行通信接口
一种新型彩色图像读取传感器芯片
人工智能研究实验室 NeoCognition 获 4000 万美元种子轮融资,打造类人学习智能体
TDA1015T功放电路
Meta正在员工电脑上部署追踪工具
TDA1015功放电路
TDA1013B功放电路
TBA820M功放电路
太空探索技术公司(SpaceX)与 Cursor 达成合作,并获 600 亿美元收购该初创公司的选择权
针对LED照明应用的安森美半导体电源驱动解决方案
TDK 发布第三代 1500W 宽幅 AC-DC 电源模块,适配工业与楼宇自动化