USB +串行RGB背光字符LCD背包的制作

电子说

1.3w人已加入

描述

概述

使用新的Adafruit USB或TTL串行背包,向项目或计算机添加字符显示从未如此简单!这种定制设计的PCB位于任何“标准”字符LCD(16x2或20x4尺寸)的背面,可完成您想要的一切:打印文本,自动滚动,设置背光,调整对比度,制作自定义字符,翻动打开或关闭光标等。它甚至可以通过完整的8位PWM控制背光来处理我们的RGB背光LCD。这意味着您可以将背景颜色更改为所需的任何颜色-红色,绿色,蓝色,粉红色,白色,紫色黄色,蓝绿色,鲑鱼色,淡黄色,或者只是将其保留为中性背景。

背包内有一个USB-功能强大的AT90USB162芯片,可侦听mini-B USB端口和TTL串行输入线的命令。 USB接口在Windows/Mac/Linux上显示为COM/串行端口。背包将自动从正在使用的输入中选择数据。对于USB连接,它将以任何波特率工作。对于TTL连接,默认波特率是9600,但是您可以发送命令将波特率设置为2400、4800、9600、19200、28800或57600。 (上电期间,波特率在LCD上闪烁)。诸如波特率,背光颜色,亮度,启动画面等任何自定义内容都将永久存储在EEPROM中。

命令界面与流行的“ Matrix Orbital”规范兼容,因此,该背包可以与期望“ Matrix” LCD的计算机应用程序或库完美配合。我们为RGB背光和设置LCD尺寸添加了一些额外的命令。如果您不想使用这些命令,则只需开始将ASCII发送到LCD上,它就会像键入的那样神奇地显示出来。

立即从Adafruit商店领取一个!

USB或TTL串行

有两个用于将数据传输到背包的接口:USB和串行。 USB是最简单的:只需将mini-B电缆从背包连接到计算机即可供电和连接。该背包将作为Windows,Mac和Linux计算机的“ USB串行端口”出现。 Windows需要INF文件,而Mac或Linux则不需要驱动程序。 Windows计算机将创建 COM 端口,Mac/Linux将在 /dev/cu.usbserialXX 或类似版本下创建设备,运行 dmesg 插入后立即查看该设备的名称。使用USB,可以使用任何终端程序,以任何波特率连接到端口,并发送文本和命令数据。 USB不使用波特率,因此只需连接9600或最简单的那个即可。

您也可以连接TTL串行输入。这是红色/黑色/白色电缆。通过将黑线接地和红线+ 5V供电。白色电缆是5V TTL串行输入。默认情况下,背包配置为9600波特,8位,无奇偶校验,1个停止位。如果您需要更快或更慢的TTL接口,则可以配置波特率。通电后,背包会将波特率闪烁到显示屏上100毫秒,因此,如果您真的很困惑,请在观看显示屏的同时进行连接。您始终可以连接USB(USB不使用波特率)并在其中重置波特率。

要硬接线USB连接,标准的“ 5x1”插脚中有一个USB分支,用于红色,黑色,白色和绿色USB电线。对于TTL连接的硬接线,RX和TX引脚有分线。沿着PCB的边缘。

组装

第一步是将字符LCD显示屏焊接到背包上。请记住,仅支持字符 类型的显示器,它们的大小最大为20x4,但不能更大。 所有Adafruit字符显示都可以使用,但我们不能保证任何其他字符都可以使用!

如果您从adafruit购买套件,则可能会获得额外的蓝色10K电位器。该套件不需要此零件,因此您可以将其用于另一个项目!

背包带有一个标头,您可以使用该标头适合显示屏。方便地使用无焊面包板将接头连接器直接连接。

您的套件中还可能带有蓝色的3针电位器,不需要此部分,您只需将其回收利用到另一个项目中即可。

断开标头,使其与LCD上的引脚数匹配。

将标头的长边朝下放在面包板上。然后将LCD放在顶部。如果您使用的液晶显示器有两行可用,请确保使用与以下图像匹配的行。

用烙铁焊接所有标题。

下一步,对齐背包,使其与LCD的角部匹配,背包中的孔应在相同的位置。

完全背包。

就是这样!

发送文本

要显示文本,只需发送ASCII字符!需要注意一些特殊字符:

换行符(0x0A或‘ n’)将用空格填充当前行的其余部分(将其空白)并移至下一行

未收听回车符(0x0D或‘ r’)

退格键(0x08)会将字符备份一个空格,并将最后一个字符替换为一个空格以擦除它。

还有很多特殊命令,有关如何在下面发送这些命令,请参见下文。

唯一的特殊字符是 0xFE “命令开始”字符。

使用USB进行测试

测试LCD和背包的最简单方法是将其连接到计算机并使用终端程序发送数据。

使用任何mini-B USB电缆连接到背包。如果您使用的是Windows,则需要将其指向INF驱动程序文件。请参阅下面的INF文件下载部分。 Mac和Linux不需要驱动程序。

插入背包后,它将创建一个串行端口。在Windows下,这称为 COM端口。您可以在设备管理器→端口中查看创建的COM端口的名称。连接USB电缆时,您应该会看到一个条目出现/消失。

lcd

对于Mac/Linux,一旦插入电缆,请运行 dmesg 以查看端口的名称,可能类似于 /dev/cu.usbmodem-XXXX 或类似版本。您还可以在 Terminal 窗口中输入 ls/dev/cu。*,以查看出现/消失的项目

lcd

端口已知,您可以使用自己喜欢的终端程序进行连接。对于此示例,我们将使用Arduino内置的基本终端。串行端口监视器的唯一缺点是一次只能发送一个完整的字符串,并且末尾会有新行。如果您使用的是更强大的显示器,例如CoolTerm(mac)或RealTerm(Windows),则可以在输入每个字符时观看

首先选择与背包相同的COM串行端口。

p》

lcd

打开串行端口监视器,然后键入Hello World!

点击发送 后,它将把文本转移到背包中,并出现。就是这样!

有关更多命令,请检查github存储库(请参阅“下载”选项卡)以获取将测试显示屏上所有命令的python脚本。

使用TTL串行进行测试

接下来,我们将演示如何使用Arduino微控制器发送文本和命令。当然,您可以使用任何具有可配置为9600波特率的串行输出的微控制器。该演示将展示如何设置显示尺寸,RGB背光和创建自定义字符。有关更多命令,请参见下面的受支持命令的完整列表

用一个Arduino抓取并按如下所示将JST电缆连接到背包:红线到+ 5V,黑线到地,白色数据线转到数字2。您可以稍后更改数字引脚,但在此示例中坚持使用#2并在以后根据需要进行调整。

您可以从此Github存储库下载此示例。

下载:文件

复制代码

#include “Arduino.h”

#if defined(ARDUINO_ARCH_SAMD) || defined(__SAM3X8E__)

// use pin 18 with Due, pin 1 with Zero or M0 Pro

#define lcd Serial1

#else

#include

// Create a software serial port!

SoftwareSerial lcd = SoftwareSerial(0,2);

#endif

// for ESP8266 use this SoftwareSerial library: https://github.com/plerup/espsoftwareserial

void setup() {

lcd.begin(9600);

// set the size of the display if it isn‘t 16x2 (you only have to do this once)

lcd.write(0xFE);

lcd.write(0xD1);

lcd.write(16); // 16 columns

lcd.write(2); // 2 rows

delay(10);

// we suggest putting delays after each command to make sure the data

// is sent and the LCD is updated.

// set the contrast, 200 is a good place to start, adjust as desired

lcd.write(0xFE);

lcd.write(0x50);

lcd.write(200);

delay(10);

// set the brightness - we’ll max it (255 is max brightness)

lcd.write(0xFE);

lcd.write(0x99);

lcd.write(255);

delay(10);

// turn off cursors

lcd.write(0xFE);

lcd.write(0x4B);

lcd.write(0xFE);

lcd.write(0x54);

// create a custom character

lcd.write(0xFE);

lcd.write(0x4E);

lcd.write((uint8_t)0); // location #0

lcd.write((uint8_t)0x00); // 8 bytes of character data

lcd.write(0x0A);

lcd.write(0x15);

lcd.write(0x11);

lcd.write(0x11);

lcd.write(0x0A);

lcd.write(0x04);

lcd.write((uint8_t)0x00);

delay(10); // we suggest putting delays after each command

// clear screen

lcd.write(0xFE);

lcd.write(0x58);

delay(10); // we suggest putting delays after each command

// go ‘home’

lcd.write(0xFE);

lcd.write(0x48);

delay(10); // we suggest putting delays after each command

lcd.print(“We ”);

lcd.write((uint8_t)0); // to print the custom character, ‘write’ the location

lcd.println(“ Arduino!”);

lcd.print(“ - Adafruit”);

delay(1000);

}

uint8_t red, green, blue;

void loop() {

// adjust colors

for (red = 0; red 《 255; red++) {

lcd.write(0xFE);

lcd.write(0xD0);

lcd.write(red);

lcd.write((uint8_t)0);

lcd.write(255 - red);

delay(10); // give it some time to adjust the backlight!

}

for (green = 0; green 《 255; green++) {

lcd.write(0xFE);

lcd.write(0xD0);

lcd.write(255-green);

lcd.write(green);

lcd.write((uint8_t)0);

delay(10); // give it some time to adjust the backlight!

}

for (blue = 0; blue 《 255; blue++) {

lcd.write(0xFE);

lcd.write(0xD0);

lcd.write((uint8_t)0);

lcd.write(255-blue);

lcd.write(blue);

delay(10); // give it some time to adjust the backlight!

}

} #include “Arduino.h”

#if defined(ARDUINO_ARCH_SAMD) || defined(__SAM3X8E__)

// use pin 18 with Due, pin 1 with Zero or M0 Pro

#define lcd Serial1

#else

#include

// Create a software serial port!

SoftwareSerial lcd = SoftwareSerial(0,2);

#endif

// for ESP8266 use this SoftwareSerial library: https://github.com/plerup/espsoftwareserial

void setup() {

lcd.begin(9600);

// set the size of the display if it isn‘t 16x2 (you only have to do this once)

lcd.write(0xFE);

lcd.write(0xD1);

lcd.write(16); // 16 columns

lcd.write(2); // 2 rows

delay(10);

// we suggest putting delays after each command to make sure the data

// is sent and the LCD is updated.

// set the contrast, 200 is a good place to start, adjust as desired

lcd.write(0xFE);

lcd.write(0x50);

lcd.write(200);

delay(10);

// set the brightness - we’ll max it (255 is max brightness)

lcd.write(0xFE);

lcd.write(0x99);

lcd.write(255);

delay(10);

// turn off cursors

lcd.write(0xFE);

lcd.write(0x4B);

lcd.write(0xFE);

lcd.write(0x54);

// create a custom character

lcd.write(0xFE);

lcd.write(0x4E);

lcd.write((uint8_t)0); // location #0

lcd.write((uint8_t)0x00); // 8 bytes of character data

lcd.write(0x0A);

lcd.write(0x15);

lcd.write(0x11);

lcd.write(0x11);

lcd.write(0x0A);

lcd.write(0x04);

lcd.write((uint8_t)0x00);

delay(10); // we suggest putting delays after each command

// clear screen

lcd.write(0xFE);

lcd.write(0x58);

delay(10); // we suggest putting delays after each command

// go ‘home’

lcd.write(0xFE);

lcd.write(0x48);

delay(10); // we suggest putting delays after each command

lcd.print(“We ”);

lcd.write((uint8_t)0); // to print the custom character, ‘write’ the location

lcd.println(“ Arduino!”);

lcd.print(“ - Adafruit”);

delay(1000);

}

uint8_t red, green, blue;

void loop() {

// adjust colors

for (red = 0; red 《 255; red++) {

lcd.write(0xFE);

lcd.write(0xD0);

lcd.write(red);

lcd.write((uint8_t)0);

lcd.write(255 - red);

delay(10); // give it some time to adjust the backlight!

}

for (green = 0; green 《 255; green++) {

lcd.write(0xFE);

lcd.write(0xD0);

lcd.write(255-green);

lcd.write(green);

lcd.write((uint8_t)0);

delay(10); // give it some time to adjust the backlight!

}

for (blue = 0; blue 《 255; blue++) {

lcd.write(0xFE);

lcd.write(0xD0);

lcd.write((uint8_t)0);

lcd.write(255-blue);

lcd.write(blue);

delay(10); // give it some time to adjust the backlight!

}

}

您应该看到以下内容,并且背景颜色发生了变化:

命令参考

命令集基于矩阵轨道规范。我们添加了一些命令来支持RGB背光和调整显示器的尺寸(因此一个固件可以支持16x2或20x4)。如果您使用的软件支持Matrix Orbital显示器,则此背包的工作原理应相同(如果不行,请让我们知道!)

所有命令都以特殊字符 0xFE (以十六进制表示)开头,告诉背包接下来要注意特殊命令。

基本命令:

Display On-0xFE 0x42-此命令可打开显示屏背光。参数是要保留多少分钟,该命令受支持,但我们不处理超时,因此该数字将被忽略

Display On-0xFE 0x46 -打开显示背光关闭

设置亮度-0xFE 0x99 -设置背光的整体亮度(颜色分量单独设置-亮度设置在设置颜色后生效)。设置保存到EEPROM

设置并保存亮度-0xFE 0x98 -与上面相同

设置对比度-0xFE 0x50 -设置显示对比度。通常,大约在180-220的值才有效。设置保存到EEPROM

设置并保存对比度-0xFE 0x91 -与上面相同

自动滚动-0xFE 0x51 -这样一来,当接收到文本且显示屏上没有更多空间时,文本将自动“滚动”,因此第二行变为第一行,依此类推。新文本始终位于显示屏的底部。

自动滚屏-0xFE 0x52 -这样一来,当收到文本并且显示屏上没有更多空间时,文本将环绕起来以从显示屏顶部开始。

清除屏幕-0xFE 0x58 -这将清除任何文本的屏幕

更改启动初始屏幕-0xFE 0x40 -之后发送此命令时,最多写32个字符(对于16x2)或80个字符(对于20x4),这些字符将在启动过程中显示为初始屏幕。如果您不想启动屏幕,请写一些空格移动和更改光标:

设置光标位置-0xFE 0x47-文本输入光标的位置。列和行的编号从1开始,因此左上角的第一个位置是(1,1)

回家-0xFE 0x48-将光标放在位置(1, 1)

向后光标-0xFE 0x4C-向后移动光标一个空格,如果在位置(1,1),它将“换行”到最后一个位置。

向前移动光标-0xFE 0x4D-将光标向后移动一个空格,如果在最后一个位置,它将“包装”到(1,1)位置。

打开下划线光标-0xFE 0x4A-打开下划线光标

关闭下划线光标-0xFE 0x4B-关闭下划线光标

阻止光标打开-0xFE 0x53-打开闪烁的块光标

关闭阻止光标-0xFE 0x54-关闭闪烁的块光标

RGB背光和LCD尺寸

设置RGB背光颜色-0xFE 0xD0 -将背光设置为红色,绿色和蓝色成分的颜色。的值范围可以从0到255(一个字节)。这将保存到EEPROM。每种颜色R,G和B在命令后均由一个字节表示。颜色值的范围是0到255(十六进制为0xFF)。要将背光设置为红色,命令为 0xFE 0xD0 0xFF 0x0 0x0。 蓝色为 0xFE 0xD0 0x0 0x0 0xFF。 白色是 0xFE 0xD0 0xFF 0xFF 0xFF。

设置LCD尺寸-0xFE 0xD1 -您可以将背包配置为所连接尺寸的显示器。自定义字符

创建自定义字符-0xFE 0x4E -,将在Spot中创建一个自定义角色。可以在0到7之间(8个点)。发送了8个字节,指示字符应如何显示

将自定义字符保存到EEPROM库-0xFE 0xC1-,这会将自定义字符保存到EEPROM库以供以后使用。共有4个存储区,每个存储区有8个位置。

从EEPROM存储区加载自定义字符-0xFE 0xC0-,这会将所有保存到EEPROM存储区的8个字符加载到LCD的内存中。输出

通用输出是背包不使用的4个引脚,您可以将这些引脚设置为高或低。 GPO1 标为PB0, GPO2 标记为PC2, GPO3 标记为PC4, GPO4 标记为PC7

GPO关闭-0xFE 0x56 -将通用引脚设置为LOW(0V)

GPO开启-0xFE 0x57 -将通用引脚设置为高(5V)

GPO起始状态-0xFE 0xC3 -设置GPO引脚“未处理”的初始位置!

设置自动线-wrap on-0xFE 0x43 -和关闭自动换行功能- 0xFE 0x44 -不支持。我们发现自动换行并不是非常有用,因此它可以一直自动运行。

初始化/放置中号和大号,水平条和垂直条-不支持此功能

下载

文件

测试软件和AT90固件@ github。背包使用Teensy v1.0框架,我们没有教程或修改固件的支持,但是如果您要自定义背包固件,它可为您带来黑客乐趣!我们还将未使用的At90USB162引脚分成一个额外的插头-请参见未使用/已使用引脚的示意图。

您可以通过将复位引脚接地来启动引导加载程序(AT90USB162芯片)。它是通过USB与av109兼容的引导程序,avrdude支持它,但目前我们没有arduino IDE支持(并且没有ETA)

GitHub上的EagleCAD PCB文件

LCD Smartie-受欢迎的字符LCD驱动程序

Adafruit Fritzing库中的框对象

驱动程序以下是Windows XP/7/Vista的INF驱动程序。解压缩并导航到“新硬件向导”中的文件夹。

单击此处:

usb_serial_backpack-driver.zip

我们还有Windows 8签名的驱动程序-它们是beta版,因此请尝试!

下载USB串行RGB LCD背包签名驱动程序

示意图和构造打印

lcd

lcd

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分