在 Arduino 上调试 16x2 LCD 显示器

电器工程 Arduino 液晶显示器
2022-01-11 13:40:43

我有一个标准的 16x2 LCD 显示器(我相信它与 Hitachi HD44780 兼容 - 请参阅下面的摘要和规范),使用 4 个数据引脚连接到 Arduino Uno,如此所述,尽管我已经并行添加了 2x 220ohm 电阻器(即16 针(背光接地)上的 110ohm 电阻器,并用静态电阻器替换 Pot 以在 Vo 上产生 4V。

简而言之,RW 接地,RS、Enable 和 Data4-7 连接到 Arduino 引脚,而 Data 0-3 悬空。

我还有其他东西(传感器、带有光隔离 SSR 和电源继电器的晶体管、一些按钮)连接到 Arduino 上的不同引脚。我使用的代码每秒多次向显示器写入文本,通常情况下,显示器工作正常。

然而,当继电器闭合时(大约需要 10 毫安,并且由一个晶体管控制,而晶体管又由一个 Arduino 引脚控制),有时 LCD 会出现乱码。它通常会一直保持乱码,直到继电器下一次关闭,但有时当继电器打开时,或者在打开/关闭几个循环后重置。乱码总是在继电器打开或关闭的同时开始和停止。

通过“乱码”,我的意思是每次我在它变得乱码之后写它,而不是写英文字符,我得到一串字符,我通常无法在数据表中识别(尽管有些我可以)。当我在 LCD 上写入新文本时,这串乱码往往会沿着屏幕向左移动。

我相信这不是 Arduino 本身感到困惑,因为我同时将相同的文本写入串行监视器,并且它没有乱码。

从那以后,我尝试将 RW 引脚连接到 Arduino 输出,并将 Data0-3 连接到地,但这无济于事。我用 9V 电池或 USB 为整个设备供电,但没有帮助。我已经更换了电池...没有变化。

似乎唯一可行的是没有负载插入继电器,但这违背了目的:-)

我没有信号分析仪或任何比万用表、笔记本电脑和 arduino 更复杂的东西……有没有人有任何提示可以帮助我调试这个?

LCD 总结表: http: //oomlout.com/LCDD/LCDD-SUMM-BC1602A.pdf

LCD 规格: http: //oomlout.com/LCDD/LCDD-DATA-BC1602A.pdf

乱码文本示例:乱码

4个回答

你的继电器上有二极管吗?如果不是,关闭/打开时的感应尖峰可能会导致问题。

例如,当您停止流过继电器的电流时,它会尝试使其继续运行,如果没有放电路径,它将产生很大的电压(基本上它会一直上升,直到找到路径)。
具体来说,公式是 V = L(dI/dT)。这意味着电感器通过在其上产生与电流变化率成正比的电压来抵抗通过它的电流变化。

尝试在继电器两端放置一个二极管,以防止正常电流流动。

编辑 - 检查产品页面,它似乎是一个“准备好的”继电器,装在一个添加了外围组件的盒子里,所以不太可能是上述情况。即便如此,我还是会尝试将二极管跨接在继电器的电源上。
还要确保您的供应按照评论中的说明进行了良好的过滤。在 IC 和 LCD 旁边放置几个至少 1uF 的电容器,并在某处放置一个 >100uF 的大容量电容(全部从电源到地)

当 Arduino 还控制 SainSmart 光电隔离继电器板时,我在 16x4 LCD 显示器上遇到了同样的问题。继电器触点未连接时一切正常。但是当继电器切换感应负载(24 VAC 功率继电器)时,显示会出现乱码。再多的电源隔离和滤波电容器也无济于事。

解决这个问题的方法是在 SainSmart 继电器触点上设置一个缓冲器(电容器和电阻串联)。为了整洁,我使用了一个预先包装好的 Cornell Dubilier EMI/RFI滤波器,但一个普通的 0.1 ufd 电容器与一个 47 欧姆电阻器串联可能也可以工作。

我在敲我的脑袋为什么我的液晶显示器“乱码”,结果我没有将我的 Arduino GND 连接到面包板(如果这对某人有帮助的话)。问候

在输出端使用屏蔽电缆并将其接地。它为我解决了这个问题。