在本教程中,我们将学习一种叫做EEPROM的特殊类型的内存。我们还将了解如何使用Arduino的内部EEPROM以及它的用途。我们将搭建一个小电路,了解如何使用Arduino EEPROM的READ和WRITE功能。
作为本教程的扩展,我将在下一个教程中向您展示如何使用Arduino使用AT24C32或AT24C256等外部EEPROM。
简介
计算机中的内存是一门迷人的学科。简单地说,内存是用来存储信息的设备。所有的计算机,无论是基于微处理器的大型系统还是基于微控制器的小型嵌入式设备,都需要内存来永久或临时存储数据。
以Arduino为例。如果你看一下本Arduino UNO Pinout教程中提到的Arduino UNO板的规格,你会发现UNO有三种类型的内存:
- 32kb的Flash
- 2 KB内存
- 1 KB EEPROM
撇开大小值不谈,Flash和EEPROM是永久内存,RAM是临时内存。这是什么意思?永久存储器是一种存储器,即使断电也能保存数据/信息。
另一方面,临时内存用于在程序运行时保存临时数据,它可以保存这些值,直到电源接通。
根据对功率的依赖程度,存储器可以分为两种类型:
- 非易失性内存
- 挥发性记忆
Flash和EEPROM属于非易失性存储器类别,其中Flash用于存储程序代码,而EEPROM用于存储小数据(如传感器数据日志或硬件信息)。即使断电,这两种存储器也能保留数据。
谈到RAM,它是一个易失性存储器,即,一旦电源断开,数据就会消失。
什么是EEPROM?
现在让我们关注感兴趣的记忆。EEPROM或E2PROM是电可擦可编程只读存储器的缩写,是上一代ROM(只读存储器)、PROM(可编程可编程只读存储器)和EPROM(可擦可编程只读存储器)的继承者。
在进一步讨论之前,让我们来上一节关于记忆的小历史课。只读存储器是一种非易失性存储器,用于永久存储数据,例如嵌入式系统的固件。
初始ROM是工厂编程的,你没有办法改变ROM的内容。这些也被称为MROM(屏蔽只读存储器)。
后来出现了PROM或可编程只读存储器。它们可以由最终用户编程(使用一种称为PROM程序员的特殊设备),但这是一次性工作,也就是说,它们只能被编程一次。
为了克服PROM“一次性可编程”的问题,开发了EPROM。它代表可擦可编程只读存储器。这种记忆可以通过将其暴露在强烈的紫外线下来擦除,并且可以像PROM一样进行编程。
EPROM的一个问题是,反复暴露在强光下(通常来自汞灯)最终会磨损内存,将擦除周期限制在1000次以内。
最后,EEPROM或电可擦可编程只读存储器被开发出来,因此当内存仍然放在系统中时可以电擦除(这在EPROM中是不可能的)。
注意:现代闪存,用于存储卡,USB闪存驱动器,固态驱动器,微控制器等是EEPROM的一种。
现代微控制器使用闪存存储固件和eeprom存储小数据(如参数,设备ID,历史记录等)。
Arduino中的EEPROM
在我们的Arduino项目中使用EEPROM允许我们存储简单的数据,如默认设置,LED状态或继电器状态,即使电源掉电。
有两个选项使用Arduino EEPROM。第一种简单的方法是使用Arduino内部的EEPROM。第二种选择是添加一个外部EEPROM IC,如著名的ATMEL AT24系列。在本教程中,让我们关注Arduino的内部EEPROM。
由于内部EEPROM是微控制器的一个功能,而不是主板,所有Arduino板,即UNO, Mega和Nano都有一定数量的内部EEPROM。
下表显示了各种Arduino板中使用的一些常见ATMEL微控制器的内部EEPROM的大小。
单片机 | 董事会 | 大小 |
ATmega328P | UNO, Nano, Mini | 1024字节(1kb) |
ATmega2560 | 大型 | 4096字节(4kb) |
ATmega168 | 纳米 | 512个字节 |
Arduino EEPROM库
EEPROM库是一个特殊的库,使您能够读写Arduino板上微控制器的内部EEPROM。它是标准的IDE,你不需要下载任何额外的东西。
Arduino EEPROM库为您提供了五个非常有用的函数:
- EEPROM.read ()—从EEPROM中读取一个字节。
- EEPROM.write ()—写入一个字节到EEPROM。
- EEPROM.update ()—当当前值与前一个值不同时,才写入EEPROM。
- EEPROM.get ()-从EEPROM读取任何数据类型(浮点或结构或任何数据类型)。
- EEPROM.put ()-写入任何数据类型到EEPROM(浮点或结构或任何数据类型)。
在Arduino IDE中有用于EEPROM库的示例。请浏览这些内容以获取更多信息。
测试电路:记住继电器的状态
我们已经在Arduino中看到了很多关于EEPROM的理论。所有这些理论只有在我们看到实际实施时才有意义。因此,让我们构建一个小电路来测试Arduino的EEPROM功能。该应用程序名为“Arduino能记住继电器的状态吗?”
在这个测试电路中,我将使用一个按钮来打开或关闭继电器。同时,我还将在EEPROM中存储继电器的状态,无论何时按下按钮。因此,如果Arduino重新启动,它首先从EEPROM检查继电器的先前状态,并将继电器设置到该位置。
线路图
下图为Arduino EEPROM测试电路图。
代码
正如我已经说过的,您不需要任何额外的库。您所要做的就是在代码中包含“EEPROM.h”头文件。
结论
在Arduino中EEPROM的初学者指南/教程。在本教程中,您学习了如何使用Arduino的内部EEPROM。在下一篇教程中,我将向您展示如何将外部EEPROM IC添加到Arduino。
一个回应
伟大的教程!
一件事,如果我有一个由移动传感器触发的继电器,如何记住继电器的状态,所以当继电器启动,然后电源中断,当电源恢复时它将保持启动。谢谢