我们创建了一系列Raspberry Pi教程,其中涵盖了Raspberry Pi与LED,LCD,按钮,DC电动机,伺服电动机,步进电动机,ADC,移位寄存器等所有基本组件的接口。 为初学者发布了一些 简单的Raspberry Pi项目,以及一些出色的IoT项目。今天,在继续这些教程的同时,我们将学习Raspberry Pi的Control 8x8 LED Matrix Module。我们将编写一个python程序以在matrix模块上显示字符。
还要检查与Arduino接口的8x8 LED矩阵和与AVR Microcontorller的LED矩阵。
所需组件:
在这里,我们使用 带有Raspbian Jessie OS的Raspberry Pi 2 ModelB。前面已经讨论了所有基本的硬件和软件要求,您可以在Raspberry Pi简介和Raspberry PI LED闪烁中查找它,以开始使用,而我们还不需要:
- 树莓派板
- 电源(5v)
- 1000uF电容器(跨电源连接)
- 1KΩ电阻器(8个)
8x8 LED矩阵模块:
8×8 LED矩阵模块包含以矩阵形式排列的64个LED(发光二极管),因此名称为LED矩阵。这些紧凑的模块具有不同的尺寸和多种颜色。可以方便地选择它们。模块的PIN配置如图所示。请记住,模块的引脚排列不正确,因此PIN的编号应完全与图片中所示的编号相同,以免出现错误。
LED矩阵模块中有8 + 8 = 16个公共端子。在它们的上方,我们有8个公共正极端子和8个公共负极端子(以8行8列的形式),用于以矩阵形式连接64个LED。如果以电路图的形式绘制模块,我们将获得如下图所示:
因此,对于8行,我们有8个公共正极端子(9、14、8、12、17、2、5)。考虑第一行,从D1到D8的LED具有公共正极端子,并且该引脚从LED矩阵模块的PIN9引出。当我们希望一行中的一个或所有LED点亮时,LED模块的相应引脚应采用+ 3.3v供电。
类似于公共正极端子,我们有8个公共负极端子作为列(13、3、4、10、6、11、15、16)。为了使任何列中的任何LED接地,需要将各自的公共负极端子接地。
电路说明:
下表显示了Raspberry Pi与LED矩阵模块之间的连接。
LED矩阵模块引脚号 |
功能 |
Raspberry Pi GPIO引脚号 |
13 |
正面0 |
GPIO12 |
3 |
正面1 |
GPIO22 |
4 |
积极2 |
GPIO27 |
10 |
积极3 |
GPIO25 |
6 |
正面4 |
GPIO17 |
11 |
正面5 |
GPIO24 |
15 |
正面6 |
GPIO23 |
16 |
积极7 |
GPIO18 |
9 |
负0 |
GPIO21 |
14 |
负1 |
GPIO20 |
8 |
负2 |
GPIO26 |
12 |
负3 |
GPIO16 |
1个 |
负4 |
GPIO19 |
7 |
负5 |
GPIO13 |
2 |
负6 |
GPIO6 |
5 |
负7 |
GPIO5 |
这是将8x8 LED矩阵与Raspberry Pi接口的最终电路图:
工作说明:
在这里,我们将使用多路复用技术在8x8 LED矩阵模块上显示字符。因此,让我们详细讨论这种多路复用。假设如果要打开矩阵中的LED D10,则需要给模块的PIN14供电,并将模块的PIN3接地。有了这个LED,D10将如下图所示点亮。还应该首先检查它,以便MATRIX知道一切正常。
现在,假设我们要打开D1,需要给矩阵的PIN9供电并将PIN13接地。这样,LED D1将发光。下图显示了这种情况下的电流方向。
现在,对于棘手的部分,考虑我们要同时打开D1和D10。因此,我们应该同时给PIN9,PIN14和PIN13,PIN3都接地。这将打开LED D1和D10,但与此同时还将打开LED D2和D9。这是因为它们共享公用端子。因此,如果我们想沿对角线方向打开LED,我们将被迫沿途打开所有LED。如下图所示:
为了避免这个问题,我们使用一种称为Multiplexing的技术 。我们还在将8x8 LED矩阵与AVR接口时讨论了这种复用技术,在此我们再次进行说明。Arduino和AVR微控制器在8x8 LED矩阵上的滚动文本中也使用了相同的多路复用技术。
人眼无法捕获超过30 HZ的频率。也就是说,如果LED以30HZ或更高的频率连续打开和关闭。眼睛看到LED持续亮着。但是,事实并非如此,LED实际上会不断地打开和关闭。此技术称为 多路复用。
举例来说,我们只想打开LED D1和LED D10,而不打开D2和D9。诀窍是,我们将首先使用PIN 9和PIN 13仅向LED D1供电,并等待1mSEC,然后将其关闭。然后,我们将使用PIN 14和3为LED D10供电,并等待1mSEC,然后将其关闭。该周期以高频率连续进行,D1和D10将迅速打开和关闭,并且两个LED在我们眼中似乎都一直在打开。意味着我们一次只为一排(LED)供电,消除了打开其他排中其他LED的机会。我们将使用这种技术来显示所有字符。
我们可以通过一个示例进一步了解它,例如是否要在矩阵上显示“ A”,如下所示:
如前所述,我们将立即打开一行,
在t = 0m SEC时,此时PIN09设置为高电平(此时其他ROW引脚为低电平),PIN3,PIN4,PIN10,PIN6,PIN11,PIN15接地(此时其他COLUMN引脚为高电平)
在t = 1m SEC时,此时PIN14设置为HIGH(此时其他ROW引脚为LOW),PIN13,PIN3,PIN4,PIN10,PIN6,PIN11,PIN15,PIN16接地(其他COLUMN引脚此时为HIGH)。 )
在t = 2m SEC时,此时PIN08设置为高(此时其他ROW引脚为LOW),PIN13,PIN3,PIN15,PIN16接地(此时其他COLUMN引脚为HIGH)。
在t = 3m SEC时,此时PIN12设置为HIGH(此时其他ROW引脚为LOW),PIN13,PIN3,PIN15,PIN16接地(此时其他COLUMN引脚为HIGH)。
在t = 4m SEC时,此时PIN01设置为高电平(此时其他ROW引脚为低电平),PIN13,PIN3,PIN4,PIN10,PIN6,PIN11,PIN15,PIN16接地(其他COLUMN引脚此时为高电平) )
在t = 5m SEC时,此时PIN07设置为高电平(此时其他ROW引脚为低电平),PIN13,PIN3,PIN4,PIN10,PIN6,PIN11,PIN15,PIN16接地(其他COLUMN引脚此时为高电平) )
在t = 6m SEC时,此时PIN02设置为高(此时其他ROW引脚为LOW),PIN13,PIN3,PIN15,PIN16接地(此时其他COLUMN引脚为HIGH)。
在t = 7m SEC时,此时PIN05设置为高电平(此时其他ROW引脚为低电平),PIN13,PIN3,PIN15,PIN16接地(此时其他COLUMN引脚为高电平)
以这种速度,显示将被视为连续显示“ A”字符,如图所示。
下面给出了使用Raspberry Pi在LED矩阵上显示字符的Python程序。通过注释可以很好地解释程序。程序中给出了每个字符的端口值。您只需更改给定程序中“ for循环”中的 “ pinp” 值即可显示所需的任何字符。还要查看下面的演示视频。