0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过使用8位AVR微控制器监控各个控制引脚来读取LCD屏幕数据

454398 来源:网络整理 作者:佚名 2019-11-06 10:53 次阅读

步骤1:零件和工具

零件和工具

带LCD屏幕的东西 - 我将使用亚马逊的这种数字秤

螺丝刀和钳子 - 打开秤

剪线钳和剥线钳 - 剪线和剥线

烙铁 - 将电线连接到屏幕上

连接线 - 对于这种低电流应用,非常小的规格是好的

万用表 - 测量电压/电阻

热胶枪 - 用于涂层连接和固定物

电路组件

ATmega328p - 用于读取LCD屏幕的状态

2 x 0.1uF陶瓷电容 - 去耦帽

1 x 10k ohm电阻 - AVR复位引脚上拉

1 x 22k ohm电阻 - ADC偏置

1 x 100k ohm电阻 - ADC偏置

1 x常开按钮 - AVR重置按钮

1 x电压调节器 - I‘ m使用LD1086 3.3V LDO稳压器

1 x 10uF铝电容 - 稳压器稳定性

1 x 1uF 铝电容器 - 稳压器稳定性

公头连接器 - 将电线连接到面包板

面包板 - 用于原型设计

Perfboard - 如果您正在焊接实际电路

其他项目

AVR程序员 - 我使用Sparkfun的口袋编程

串行启用LCD屏幕 - 重印我们的内容正在阅读(来自Sparkfun)

逻辑分析器 - 要查看w LCD引脚正在做。..。..我使用Link Instruments的这个小工具

第2步:打开它

有没有人打开任何东西?

确保您的设备已拔下/取出所有电池!

寻找将设备固定在一起的螺钉(可能在背面/底部)

拆下任何外壳以露出内部电路

充电电容器可能会造成危险所以一定不要触摸电路板上的任何东西!

在图像中,您可以看到数字秤的内部。有一个覆盖控制器的神秘黑色粘性电路,一些称重传感器,零(触摸传感器)和单元按钮,以及LCD屏幕。不久前,这个电路将装满许多可以产生相关数据的组件。现在,它是一个单独的,无法访问的MCU,带有一个外部EEPROM芯片。这就像设计师不希望我们这样做。..。..即使没有可访问的数据点,我们也可以通过直接读取LCD屏幕获得我们想要的信息

步骤3:LCD连接

LCD屏幕通常以几种可能的方式连接到电路。..。..

插座连接 - 接头引脚插入板上的插座

带状电缆 - 有时插入插座,但并非总是

直接连接 - LCD屏板上的引脚被固定

在厨房秤中,液晶显示屏位于框架内,并用几个螺丝将电路板固定在框架上。这样,电路板上的驱动焊盘与LCD引脚接触。

没有焊接或电缆连接。如果电路没有牢固地固定在外壳上,那么与LCD的连接就会丢失 - 正如缺少的部分或非常昏暗的屏幕所证明的那样。这可能使得难以将任何附加导线连接到LCD。如果即使单个LCD引脚与电路板没有良好接触,部分或全部LCD也无法正常工作。

以下图片不是这个精确的电路板,但它确实展示了电路板上的LCD焊盘。..。..

步骤4:将电线添加到LCD

这是事情变得有点棘手的地方。如上一步所述,LCD引脚仍然需要与驱动板焊盘良好接触。您必须使用最佳判断来确定将电线焊接到电路板的位置。我还建议使用令人难以置信的东西线;我的是30规格。

找到连接到LCD的焊盘

焊接导线连接到每个焊盘(使用细线和少量焊料)

将电线的另一端焊接到插头引脚(保持顺序!)

将电路板重新连接到LCD上。

接通电源以确保LCD仍在工作。

可选 - 用热胶涂抹线头连接以提高耐用性和绝缘性

此时,我们不知道什么线做什么,但没关系。只要你保持它们的顺序(液晶显示屏上的针脚1连接到公头的针脚1等),就可以轻松搞清楚了!在这一点上,我们应该谈谈这些LCD屏幕是如何工作的。

步骤5:直接驱动LCD

大多数人不是因为他们在驾驶它时有兴趣阅读液晶显示屏,所以学习如何阅读屏幕的最佳方法是了解它是如何被驱动的。我发现的最佳解释之一可以在Atmel应用笔记 - AVR340中找到,但我会快速回顾一下这些关键点。

LCD屏幕是一组对存在的交流信号作出反应的段。控制引脚。这些段可能构成类似于七段显示的字母数字数字,或者它们可以用于屏幕上的单个图标,例如时钟上的AM/PM文本。一个屏幕可以有许多段仅由几个引脚驱动 - 这是通过多路复用完成的。

单个引脚实际上用于驱动多个段,具体取决于一组 COM 信号中的哪一个处于活动状态任何给定的时间。如上所述,LCD使用AC信号驱动,通常以二进制方波(OFF或ON)的形式。但是,COM信号将具有三种状态:OFF,1/2 ON和ON,其中ON为源电压。链接的应用笔记给出了以下控制方案的示例。

注意,在任何给定时间只有一个COM信号有效,而LCD段line将控制不同的段,具体取决于三个COM行中的哪一个是活动的。要启用段,段线必须与COM线异相。换句话说,如果COM线为HI,则段线应为LO,反之亦然。

我们的下一步是确定哪些LCD引脚是COM线,哪个驱动器段!

步骤6:查找COM线

在此步骤中,我们使用逻辑分析仪查找COM信号。实际上,可以使用示波器,实际上可以更容易地找到COM线;但是,O-scope的输入通常比LA少得多。即使我们正在寻找交流信号,我们仍然可以通过设置触发阈值电平在LA上读取它。

数字厨房秤的工作电压约为3.3V DC,因此我设置了触发器我的LA输入电压为2.5V DC。这将确保我只看到脉冲的正部分,忽略所有其他未定义的区域。

将输入触发阈值设置为源电压电平的约3/4

将水平时间刻度设置在5ms/格的范围内

将电线连接到电路上的已知接地(或负极电池端子)

接通电源比例,确保屏幕正常工作

单独监控单个引脚以查看脉冲的样子

重复所有引脚,直到找到COM线为止

根据我的经验,COM线通常位于LCD屏幕的末端;因此,它们应该是我们焊接到电路板上的第一批连接线。它们很容易与其他信号区别开来。..。..

如果使用O-Scope,它们可能是唯一具有三种状态而不是两种状态的信号

它们会定期重复(可能是10到50毫秒)

LCD屏幕的状态不会影响脉冲模式

数字厨房秤有四条COM线,周期为32ms。每个脉冲完全关闭或完全打开约4ms。无论在任何给定时间屏幕上显示什么,这四行都具有永不重复的永久重复模式。

步骤7:解码控制信号

这一步是迄今为止最难的,因为它需要您解决各种难题,以便破译控制信号的含义。 LCD屏幕越复杂,这个过程就越困难。

数字刻度LCD有16条控制线--4条是COM信号,另外12条是驱动线段。我们需要监视每个引脚的各种LCD状态,直到我们发现哪个LCD引脚负责哪个段。由于有四条COM线,每条控制线可能驱动四个不同的线段。

确定LCD屏幕的所有可能分段。

这是每个已知的分段厨房秤液晶屏。实际上,只有数字4的 b 和 c 段才有效,但显示的所有其他段都有效。

记录Pin已知LCD屏幕的状态

使用逻辑分析仪(或O-Scope),我们需要记录所有COM状态的每个引脚的状态。只要屏幕没有变化,这些模式就会无限重复;但是,如果一个单独的段发生变化,那个特定的控制信号将会改变其中一个COM线。我已经突出显示了COM信号1和3的几个不同引脚的状态。注意,当一个引脚没有时,一个段是ON的。与COM线相位 - 当COM为HI时,Pin为LO,反之亦然。

创建显示所有引脚的矩阵已知LCD屏幕的状态。

困难的部分是找到模式 - 也就是说,当LCD的单个段变为活动或非活动时,哪些控制线正在改变。最好将所有这些引脚状态写入各种屏幕,并对其中的段处于活动状态进行细微更改。

在此表中,我放了a 1 用于任何COM信号有效(异相)的控制线,如前一个引脚状态图像所示。注意屏幕上的每个活动图标非常重要 - 其中一些可能以随机的方式连接。

找到模式的最佳方法是在细微变化后记录引脚状态。例如,与 AM 然后 PM 显示的完全相同的时间,或显示 0 然后 8 的数字。请记住,LCD中没有芯片或线迹,因此控制线的顺序可能与实际屏幕上的线段顺序相对应。

请注意,引脚11和12的状态看起来非常类似于13和14.鉴于屏幕显示0.0,这是否意味着引脚11和12驱动数字1,而引脚13和14驱动数字0?这是有道理的,因为有六个有效段用于形成0,而引脚11和12中的第七个有效段可能是小数位!使用类似显示器的附加读数将有所帮助。例如,将模式从fl-oz切换为克将使显示从0.0 fl-oz更改为0g。突然,引脚11和12全部关闭,但引脚13和14保持不变。我认为我们找到了一种模式!

填写将控制线连接到LCD段的地图。

在读取足够的读数后,完整的模式将被发现。由于我们不直接驱动屏幕,测试理论连接的唯一方法是记下您认为针对给定显示器的引脚应该是什么,然后使该显示发生 - 在我们的例子中,这是通过切换到特定模式并向比例添加重量,直到显示特定的数字组合。

在厨房秤的情况下,引脚排列在一种实际上有道理的方式!字母数字数字按其显示顺序组合在一起。随机顺序中唯一的行是各种单位图标,但这是可以预料的。此表显示了哪些控制线驱动给定有效COM信号的哪些段。

步骤8:LCD读取器电路设计

带有模式(希望如此)发现,我们可以创建一个电路来读取LCD引脚并对该数据做一些有用的事情。

该电路将在ATmega328p微控制器上构建,使用所有默认的熔丝设置,无需外部时钟源。由于COM线是模拟输入,我们可以使用ADC单独读取每一个,但这是不必要的。通过使用模拟比较器仅读取一条COM线,然后在软件中模拟其他三条COM线,可以实现相同的效果。您可能还注意到我没有为引脚5和6显示连接。原因很简单 - 我不关心这些引脚所代表的任何数据。

模拟比较器非常简单。我们使用R5和R6在AIN1上产生偏置电压。该分压器的输出约为2.7V - 类似于我用于逻辑分析仪输入的2.5V触发阈值! COM1线路馈入AIN0。只要AIN0上的电压上升到高于AIN1或低于AIN1,比较器就会触发。我们将其用作中断源来触发LCD读周期的开始。这也将用于保持我们的模拟COM线同步。

我想指出的最后一件事是与JP2的关系 - 我实际上计划完全控制数字秤。我的电路将能够禁用秤的电源并驱动模式按钮。我选择让PORTC全部开放。这样就可以释放I2C引脚,以便与其他芯片进行通信,以及一些可能在以后使用的模拟输入。您的实现可能会有所不同!

步骤9:固件 - 概述

完整的源代码可以在这个GitHub存储库中找到。

首先,我们的固件将读取LCD屏幕,然后将该信息打印到另一个LCD屏幕进行比较。唯一的问题是我们想要使用的LCD屏幕是串行驱动的,我们的串口发送引脚用于读取其中一个LCD引脚。这不是什么大问题,只是意味着来自该引脚的数据将无法访问。

执行此操作的代码是repo中的main-v1.0.c文件。这段代码用C语言编写。它不使用任何Arudino库,因为那不是我的角色。这些是我们固件的基本构建块。..

在引导时,配置AVR设备

设置IO引脚

关闭未使用的模块(以节省电量)

使用定时器0模拟COM线2,3和4

使用模拟比较器检测Com线1

使用USART0写入本地LCD屏幕

在主要永久循环中

阅读LCD屏幕

将LCD屏幕数据打印到本地LCD屏幕

中断服务程序

计时器0 - 与COM同步1,用于模拟每4ms的其他COM线路动作

模拟比较器 - 当COM 1变为HI时触发,打开定时器0

其他功能我们需要

读取LCD - 启动LCD屏幕读数。..可能启用模拟比较器并等待

LCD打印 - 传输一个字节,字符串等到本地LCD屏幕

步骤10:固件 - Main-v1.0

如上所述,代码的第一个版本将读取刻度LCD屏幕,然后将该数据写入本地LCD屏幕。这仅仅是一个概念证明。..将数据从一个屏幕重写到另一个屏幕是毫无意义的!我相信我已经很好地评论了源代码,如果你对AVR代码都熟悉的话,你可以理解发生了什么,但是我会讨论一些更好的观点。

一些文件是包括:

modules/avr.h - 我将其包含在我工作的每个AVR项目中

modules/lcd/SerLCD_2x16 .h - 用于写入本地LCD屏幕的函数原型和宏

definitions.h - 我们所有的主要宏和定义

util/delay.h - 简单的延迟例程

硬件模块在第486行的 initialize_AVR()函数中配置。

模拟比较器

模拟比较器在COM 1的上升沿触发。然后启用定时器0,模拟COM 1下降沿和其他3个COM线。

定时器0

定时器0设置为每0.2ms触发一次ISR。 ISR中的计数器将导致事件发生很长时间(即,持续4ms),并且switch语句用于对每个活动的模拟COM线执行不同的操作。每个COM线都会记录LCD引脚的状态,并且在周期结束时,定时器0被禁用。

LCD读取

读取周期由线路311上的 readLCD()功能启动。该功能简单地使能模拟比较器并处于while循环中,直到读取周期完成。第321行上的 decodeDigit()函数实际上将所有引脚状态数据转换为每个LCD数字的数字。

LCD写入

从407开始发现的LCD写例程是我刚才写的。它们也可以在modules/lcd文件夹中找到,但我只是将我想要使用的函数复制到主文件中,所以我没有从多个位置编译文件。我认为它们非常自我解释。

Main

在Main函数中,初始化AVR设备,然后进入永久循环。在该循环内,读取LCD屏幕,并将该数据解码并打印到本地LCD屏幕以进行测试。跳过数字4,我不担心刻度的时钟模式,因为我没有监视AM/PM LCD引脚段。

在以前版本的电路中,我监控所有LCD引脚,因此我能够打印时钟模式数据;但是,提供的固件无法执行此操作。另请注意,由于用于打印到此LCD屏幕的串行传输线,数字中的“&”符号阻止我读取一个特定的Scale LCD引脚。

步骤11:固件 - 主要-v2.0

固件的第二个版本几乎与第一个版本相同;但是,我已经删除了所有的LCD打印功能。不再有 LCD_write()功能,USART0也没有使用。另一个主要区别是添加了 updateLevel()函数。这个简单的例程将比例显示的权重打包成两个字节的数据。这些字节将通过TWI总线传输到另一个芯片,但这是另一个项目的一部分,所以我没有在这里包含该代码。您还应该注意到,在main的开头,代码会将比例强制为以克为单位的重量模式。这样做是为了使从这个比例传输到互联网的数据始终保持一致。

主循环现在读取lcd屏幕并在延迟1秒之前创建两个级别的数据字节。 ,没什么。所有的辛勤工作都由模拟比较器和定时器0的中断服务程序处理。

步骤12:结束

我希望通过使用本指南,您可以入侵任何数字设备,以便从LCD屏幕读取数据。
责任编辑:wv

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

    关注

    48

    文章

    6806

    浏览量

    147600
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4275

    浏览量

    164038
收藏 人收藏

    评论

    相关推荐

    CAN如何读取SAF-C515C-8EM微控制器

    您好,请告诉我您 CAN 如何读取 SAF-C515C-8EM 微控制器,然后将您读取的内容写入新的微控制器
    发表于 01-31 07:53

    如何通过为TC332微控制器注入ECC错误测试RAM错误?

    我们使用的是 TC332 微控制器,我们使用了 MBIST 测试和无损测试方法。 这些测试提供了在测试期间没有错误的肯定答案。 根据 fuSA 的指导方针,我们需要通过注入 ECC 错误测试 RAM 错误和 Pflash 错误
    发表于 01-31 06:39

    微控制器基础】——从历史切入,了解微控制器的五个要素(上)

    微控制器基础】——从历史切入,了解微控制器的五个要素(上)
    的头像 发表于 12-07 10:55 197次阅读
    【<b class='flag-5'>微控制器</b>基础】——从历史切入,了解<b class='flag-5'>微控制器</b>的五个要素(上)

    微控制器基础】—— 从历史切入,了解微控制器的五个要素(下)

    微控制器基础】—— 从历史切入,了解微控制器的五个要素(下)
    的头像 发表于 12-06 17:23 270次阅读
    【<b class='flag-5'>微控制器</b>基础】—— 从历史切入,了解<b class='flag-5'>微控制器</b>的五个要素(下)

    单线键盘接口可释放微控制器I / O引脚

    键时,通过产生一个脉冲与微控制器通信。脉冲的宽度与按下的按键数成正比,微控制器通过测量脉冲的宽度来识别按下的按键。   IC 2 ,一种流行的555定时器的CMOS LMC555版本,
    的头像 发表于 11-10 16:51 199次阅读

    国产DSP实验箱_操作教程:2-7 LCD图片显示实验(程序读取图片)

    控制器。 (2)接着,建立映射关系。通过配置将LCD控制器和显存连接起来,构成一个映射关系。一旦这个关系建立之后,LCD
    发表于 10-19 10:54

    如何使用STM8AL3Lxx、STM8L152xx和STM8L162xx LCD控制器

    LCD段驱动固件的简要说明并且还提供STM8L1528-EVAL评估板。有关更多信息,请参阅STM8L05xx、STM8L15xx、ST
    发表于 09-26 07:07

    STM8S微控制器参考手册

    导言本参考手册为应用开发人员提供了关于如何使用STM8S微控制器的存储和外设的完整信息。STM8S是一个拥有不同存储大小,封装和外设的
    发表于 09-25 07:33

    如何使用M031/ M032系列微控制器读取触摸屏信号和分析手指触摸位置

    应用程序 : 此试样代码使用 M031/ M032 系列微控制器读取触摸屏信号和分析手指触摸位置。 此文档将描述如何配置 ADC 以读取信号, 以及如何配置 SPI 将数据传输到主机
    发表于 08-29 07:32

    NuMicro M2351系列微控制器的安全特色与应用

    (Certificate Authority) 数据,系统日志等。此外,M2351SF 在微控制器和安全闪存之间使用独特的绑定方法以及内部连接通过加密的 SPI 界面确保
    发表于 08-28 06:24

    AMBA彩色LCD控制器数据

    配合使用,以足以支持所选显示模式和分辨率的速率向LCD控制器数据路径前端的FIFO提供数据。 面板大小是可编程的,可以是16到1024像素之间的任何宽度(线长),以16像素为增量。 行
    发表于 08-21 07:05

    微控制器的工作原理和基本结构 微控制器引脚功能和应用电路

    微控制器是一种集成电路芯片,内部集成了微处理器、存储器、输入输出接口和各种系统控制逻辑电路。它可以通过编程实现各种控制任务,并通过输入输出接
    发表于 08-16 17:09 3106次阅读

    S3A7 微控制器数据

    S3A7 微控制器数据
    发表于 07-06 20:10 0次下载
    S3A7 <b class='flag-5'>微控制器</b>组<b class='flag-5'>数据</b>表

    什么是微控制器?它是如何工作的?

    微控制器(MCU)普遍存在于电子产品中,如果你的微波炉有LED或LCD屏幕和键盘,则它肯定包含微控制器。汽车也是一样,可以有很多个:发动机由微控制器
    的头像 发表于 07-06 11:12 1207次阅读

    如何在esp8266和avr微控制器之间进行串行通信?

    。如果有人可以解释如何使用 esp8266 进行串行读取,那将对​​我有很大帮助。我附上了我正在处理的小代码。我正在将串行数据写入微控制器,然后需要读取两个字节的传入串行
    发表于 04-27 07:54