跳过主要内容

an -1134在Android应用程序上绘制字符并在LED矩阵上显示

内容

参考文献

有关文件及软件,请浏览:

//www.xmece.com/亚博电竞菠菜products/greenpak

下载我们的免费GreenPAK Designer软件[1]以打开.gp文件[2],并使用GreenPAK开发工具[3]在几分钟内将设计冻结到您自己的定制IC中。

yabo国际娱乐Dialog Semiconductor提供了一个完整的应用说明库[4],其中包括设计示例以及Dialog IC内功能和模块的说明。

  1. GreenPAK设计软件,软件下载,用户指南,对话框yabo国际娱乐
  2. an -1134在Android应用程序上绘制字符并在LED matrix上显示,绿派克设计文件,Dialog半导体yabo国际娱乐
  3. GreenPAK开发工具,GreenPAK开发工具网页,对话框yabo国际娱乐
  4. GreenPAK应用笔记,绿派克应用笔记网页,对话半导体yabo国际娱乐
  5. SLG46537数据表,对话框半导体yabo国际娱乐

介绍

本应用说明描述了从在Android应用程序上绘制字符,通过蓝牙将其发送到Arduino UNO,然后发送到GreenPAK的电路™ 通过I2C适配数据以在LED矩阵上显示字符。使用GreenPAK5可释放必要的Arduino GPIO,以便使用蓝牙,同时使GPIO可用于其他用途。GreenPAK的其他好处包括I2C协议只需2根导线即可控制,一台I2C主机最多可控制16个GreenPAK5。因此,如果我们想将多个LED矩阵连接到Arduino UNO,使用多个GreenPAK是一种更经济的设计。一旦GreenPAK加载了一个字符,即使I2C连接断开,它也可以独立工作。

工程设计方法

本项目使用的是android应用程序,该应用程序使用虚拟LED矩阵。因此,您可以直接从移动设备上更新在LED矩阵上看到的字符。

本项目分为三个阶段:

  1. 构建Android应用程序
  2. GreenPAK设计
  3. 阿杜伊诺代码
图1所示。本应用程序中使用的组件说明

LED矩阵的工作原理

LED点阵非常受欢迎,因为它们在各种环境条件下都非常明显。

在点阵显示器中,多个led按行和列连接在一起,以减少所需的引脚数量。例如,一个8×8的led矩阵(图2)将阴极排成一行(R1到R8),阳极排成一列(C1到C8)。每个LED通过其行号和列号进行寻址。在这个例子中,我们使用的是所谓的普通行阴极LED矩阵。

为了免疫矩阵中的LED像素,在阳极(列)上施加高信号,并向阴极(行)发送低信号。当我们想要显示字符或符号时,通常需要照亮许多像素。在这种情况下,我们将图片分成若干部分,并分别在快速循环中照亮每一行。

图2。LED矩阵图

人眼可以检测到LED在低频率下闪烁,但在超过20Hz时,将显示完整字符,且闪烁较少。在本设计中,我们将控制8x7 LED矩阵,因为由于IO引脚的限制,最后一列C8将被省略。

Android应用程序

对于第一阶段,将构建一个android设备应用程序,用于向蓝牙模块发送数据。该应用程序将为用户提供图形界面。

应用程序界面有56个按钮。每个按钮代表LED矩阵中的一个像素,因此,每个按钮都将由两个状态(on=1, off=0)的二进制变量表示。

每一行led都由一个字节(位代表像素)表示。为了找到字节的值,我们将每个按钮状态乘以有效位,然后取乘积的和。亚博电竞菠菜

p1 . . p64是二进制变量保持按钮状态(= 1,关闭= 0)。

B1 = (P1 X 1) + (P2 X 2) + (P3 X 4) + (P4 X 8) + (P5) + (P6 X 32) + (P7 X 64) + (0)

B8 = (P57 X 1) + (P58 X 2) + (P59 X 4) + (P60 X 8) + (P61) + (P62 X 32) + (P63 X 64) + (0)

在此计算之后,字符将由8个字节表示(B1 . . B8)发送给蓝牙模块。

表1。LED矩阵的控制位

麻省理工学院应用程序发明家

该应用程序可以使用MIT app Inventor轻松制作,无需事先编程经验。Inventor应用程序允许你使用带有编程模块的网页浏览器为Andr亚博国际官网平台网址oid手机开发应用程序。

要创建Android应用程序,必须启动一个新项目,并且需要从设计器屏幕中删除可见组件。然后需要创建58个按钮;56个按键将用于LED矩阵,1个按键将用于蓝牙设备的列表选择(连接),最后一个按键将用于通过蓝牙发送数据(打印)。我们还需要一个蓝牙客户端。下面的图3是我们的Android应用程序用户界面的屏幕截图。

图3。Android应用程序GUI

要开始编程,需要点击“Block”按钮。通过拖放,我们可以从左侧的工具条中添加组件。如图4所示,将添加全局变量,并为每个按钮构建on-click函数,用于更改颜色和/或保存按钮状态(开、关)。

图4。第一矩阵像素的方框图

对于不同的按钮,可以通过每次改变按钮编号和全局变量来重复这个过程。一旦完成,需要建立数学方程,它将在一个字节中收集每一行的位(B1..B8方程)。56个按钮状态将形成8个字节的变量。(图5说明)。

图5。在行字节中收集位

图6。通过蓝牙发送行字节

最后,当点击打印按钮时,应用程序将使用蓝牙以字节列表的形式发送8个字节(图6)。

GreenPAK设计

Android应用程序将数据发送到Arduino,然后通过I2C连接从Arduino发送到GreenPAK。这些细节将在后面的“Arduino代码”部分进行解释。SLG46537V中的I2C接口非常强大,因为它可以读取和写入所有配置位(包括输出状态和ASM RAM)。I2C写入命令以开始位开始,然后是控制字节、字地址字节、数据字节和停止位(如图7所示)。

图7。I2C写作框架

在GreenPAK,我们开始设计I2C模块。从属性栏启用此块,然后选择控件代码。然后两根电线将连接引脚8,9 (SCL, SDA),并从控制代码列表中选择设备地址(从0到15的数字)。在我们的项目中,选择0 (0b0000)。如图8所示。

图8。I2C块连接

需要制作一个在行中显示字节的控制器。为此,必须使用状态机块(ASM)。ASM块是一个8状态异步状态机。有24个状态转换输入、1个nRESET输入和8条输出线。ASM块是使用状态转换和状态输出定义的。每个状态将代表一行,它将显示从Arduino接收的字节。

图9。将ASM模块与脉冲发生器连接

通过在下一状态启用引脚上应用高信号和在当前状态启用引脚上应用低信号,可以实现从当前状态到下一状态的移动。

以状态0为例:它的框中包含一个状态1箭头作为下一个状态。这意味着,为了从状态0转换到1,当ASM处于状态0时,状态1箭头的输入需要是高的。

具有管道延迟的计数器将负责产生脉冲。CNT4用于生成一个0.32ms定时器,用作所有状态的一次脉冲宽度。由于ASM的输入是电平触发而不是边缘触发,CNT4的输出不能简单地用作所有状态转换的触发器(因为它会导致从一个状态到另一个状态的几乎瞬时转换,而不是在转换之间等待0.32毫秒)。

为了解决这个问题,管道延迟宏单元被用来产生两个占空比为50%的互补输出。一个信号用于从偶数状态过渡到奇数状态,另一个信号用于从奇数状态过渡到偶数状态。

可以通过ASM属性栏或ASM编辑器实现此设计,如图9所示。ASM编辑器提供了一个图形按钮面板,用于设置每个状态的ASM输出(连接矩阵输出RAM)。因此,在从移动应用程序更新之前,可以绘制初始字符(将显示在LED矩阵上)。

图10。ASM图编辑器
图11。使用列引脚连接ASM输出

在每个状态下,ASM输出将是我们想要显示的行字节,所以我们将ASM输出直接连接到GreenPAK输出引脚,这些引脚依次连接到LED矩阵列,(引脚14到20)。

对于每一种状态,与该状态相关的一行必须被激活,因为阴极是成行连接在一起的,成行的有源信号是低的;因此,对相关行应用低信号。一系列8 DFF将在一个输出上给出一个低信号(每个CLK),同时为其他输出给出一个高信号。

这个低信号将随着每一个上升边缘的CLK从一行移动到下一行。为了做到这一点,每个DFF的输出被连接到下一个DFF的Dpin。(最后一个反馈给第一个DFF以完成循环)。第一个DFF的初始极性较低,而其他DFF的初始极性较高。

BOM表和工具

本项目使用的组件有:

图12。激活每一种状态的一行

阿杜伊诺代码

在这个阶段,连接蓝牙模块的Arduino将通过UART接口接收到8个字节。它将执行数据拟合,并使用I2C将数据发送到GreenPAK5。已用于蓝牙通信的HC06模块采用UART通信协议,波特率为9600。这个数字将在代码中使用。

Arduino UNO有一个与引脚0,1(RX,TX)连接的串行接口,用于与其他组件进行UART连接。因此,蓝牙模块TX将与Arduino RX(引脚0)连接。蓝牙模块TX>Arduino RX(引脚0)。

在接收到数据字节后,需要Arduino将这些字节(使用i2C协议)发送给GreenPAK。为了方便,我们使用了Dialog的Arduino库。

Dialog的Arduino库是一个自定义库。通过使用它,可以使用I2C轻松地从Arduino读取数据或将数据写入GreenPAK设备。对话框库中有两个可用函数:writeI2C和readI2C。在Arduino草图中调用其中一个函数的语法是silego.function(parameters);在我们的项目中,将使用writeI2C函数,其形式如下:void writeI2C(字节地址,字节数据);

表2。Arduino写函数变量
变量
函数
byte_address
我们要写的GreenPAK注册地址
字节数据
必须写入地址的数据。

字节地址可以在SLG数据表中找到。在我们的项目中,我们将使用的字节地址是RAM 8输出的asm状态的地址,如表3所示。但是,由于Arduino用作I2C master,因此需要使用Arduino的Dialog库来获得静态变量名,而不是如表3第三列所示的Arduino函数中的HEX数字。

表3。ASM输出状态地址
地址字节
信号的函数
Arduino静态变量
D0
RAM 8输出为asm - stat0
ASM_STATE_0
D1
RAM 8输出为ASM-state1
ASM_STATE_1
D2
RAM 8输出为ASM-state2
ASM_STATE_2
D3
RAM 8输出为ASM-state3
ASM_STATE_3
D4
RAM 8输出为asm状态4
ASM_STATE_4
D5
RAM 8输出为asm状态5
ASM_STATE_5
D6
RAM 8输出为asm状态6
ASM_STATE_6
D7
RAM 8输出为asm状态7
ASM_STATE_7

“DialogLibrary.zip”文件夹需要下载。在编程之前,需要将该文件夹解压到Arduino库目录中。文件夹名不能有空格。有关详细信息,您可以查看AN-1107如何使用Dialog的Arduino库GreenPAK.

此库与SLG46531V、SLG46532V、SLG46533V兼容。但是,我们可以将其用于SLG46537V,因为SLG46531V和SLG46537V具有相同的I2C地址。

I2C Arduino UNO引脚:SCL—>A5, SDA—>A4。

最后的代码:

电路原理图

表4。GreenPAK输出引脚连接
GreenPAK销
11
12
13
14
15
16
17
18
19
20
函数
GND
R7
R8
C1
C2
C3
补体第四成份
碳五
C6
C7
GreenPAK销
1.
2.
3.
4.
5.
6.
7.
8.
9
10
函数
VDD
-
R1
R2
R3
R4
R5
R6
R7
R8
图13。LED矩阵引脚图
图14。SLG46537V引出线
图15。顶层电路原理图

结论

在本应用笔记中,已经创建了一个LED矩阵驱动器,可以通过I2C协议从ucontroller控制。一个android应用程序也已经建立了一个虚拟的LED矩阵来绘制字符,并在LED矩阵上显示他们。Dialog的GreenPAK可编程混合信号专用集成电路(ASIC)具有多种数字和模拟组件,便于创建中等复杂的设计。它还具有I2C接口,允许从任何I2C主控制器控制GreenPAK寄存器。