基于SPI的MAX7221与MCU连接

[复制链接]
813|14
手机看帖
扫描二维码
随时随地手机跟帖
qwe890asd|  楼主 | 2018-1-15 13:39 | 显示全部楼层 |阅读模式
基于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所示。

2010211105023502.jpg

  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都连接在一起,其片选是通过在要传输的数据前增加空操作指令来实现的。

2010211105023649.jpg

  例如,要向第二级的MAX7221传输数据,应当在时序到来之后首先传输一个空操作指令(0X0000),然后再传输数据。要向第三级的MAX7221传输数据时,要先传输两个空操作指令,以此类推。值得一提的是,如果要用这种级联方式设计个数不是8的整数倍的数码管显示驱动器,必须要为各个MAX7221分配平均的扫描位数。

  例如,如果需要12位数码管显示,那么采用两级级联驱动,每个MAX7221驱动6个数码管;如果需要11位数码管显示,那么一级驱动6个,一级驱动5个,但扫描限位仍然都设定为6,只将其中一个空接。这么做是因为MAX7221对8位数码管的扫描能力是一定的,在相同亮度的等级下需要进行扫描的数码管个数越多,数码管看上去就越暗。如果各级MAX7221设定的扫描限位不一致,尽管设定了相同的亮度等级,实际显示的亮度也会有所差别。

 4 软件设计

  图3是MAX7221的SPI传输时序图。

2010211105023392.jpg

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

2010211105024148.jpg

2010211105024374.jpg

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

2010211105024890.jpg

2010211105024847.jpg

  5 实 验

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

2010211105024109.jpg

  6 结 语

  实验证明,MAX7221仅需3线即可通过SPI与MCU连接。这种SPI通信法不但通信速率高,还可用于级联的MAX7221系统,以驱动更多的数码管。



相关帖子

dirtwillfly| | 2018-1-15 20:37 | 显示全部楼层
感谢分享

使用特权

评论回复
lihuami| | 2018-1-17 20:09 | 显示全部楼层
m​a​x​7​2​2​1​l​e​d​驱​动​c​语​言​程​序​

使用特权

评论回复
xiaoyaozt| | 2018-1-17 20:09 | 显示全部楼层
数码管驱动芯片怎么不使用三极管

使用特权

评论回复
uptown| | 2018-1-17 20:11 | 显示全部楼层
多个MAX7221串联使用怎么使用?

使用特权

评论回复
cehuafan| | 2018-1-17 20:12 | 显示全部楼层
速率测试则么样

使用特权

评论回复
lihuami| | 2018-1-17 20:16 | 显示全部楼层
​实​际​运​用​调​试​不容易。

使用特权

评论回复
xiaoyaozt| | 2018-1-17 20:16 | 显示全部楼层
三极管的驱动也可以。

使用特权

评论回复
cehuafan| | 2018-1-17 20:16 | 显示全部楼层
数码管的亮度能够调节吗?

使用特权

评论回复
uptown| | 2018-1-17 20:16 | 显示全部楼层
一个SPI能够驱动多个吗?

使用特权

评论回复
smilingangel| | 2018-1-17 22:18 | 显示全部楼层
SPI以主从方式工作,这种模式通常有一个主机和一个或多个从机,使用4根信号线:主机输出/从机输入(MOSI)、主机输入/主机输出(MISO)、串行时钟SCLK和外设片选(SS)。

使用特权

评论回复
baimiaocun2015| | 2018-1-20 15:58 | 显示全部楼层
SPI是一种由Motorola公司开发的高速、全双工、同步串行通信接口。MCU通过它可以方便地连接到存储器、A/D转换器、D/A转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至另一个MCU。

使用特权

评论回复
xiaolin4006| | 2018-12-9 22:20 | 显示全部楼层
上电全亮死机是什么原因呢?

使用特权

评论回复
xiaolin4006| | 2018-12-9 22:25 | 显示全部楼层
有没有遇到过的,电源滤波也加了,信号串阻也加了。时而好用时而上电死机。7221就不受控了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

583

帖子

5

粉丝