在本教程中,我们将了解一种称为EEPROM的特殊内存类型。我们还将看到如何使用Arduino的内部EEPROM及其用途。我们将构建一个小电路,并了解如何使用Arduino Eeprom的读写功能。
作为本教程的扩展,我将向您展示如何在下一个教程中与Arduino一起使用AT24C32或AT24C256之类的外部EEPROM。
介绍
计算机中的记忆是一个引人入胜的主题。简而言之,内存是用于存储信息的设备。所有计算机,无论是基于微处理器的大型系统还是基于微控制器的小型嵌入式设备,都需要内存才能永久或临时存储数据。
让我们以Arduino为例。如果您查看此Arduino Uno Pinout教程中提到的Arduino Uno板的规格,您可以发现UNO具有三种内存:
- 32 kb的闪光灯
- 2 kb的公羊
- 1 kb的EEPROM
撇开尺寸值,Flash和Eeprom是永久记忆的类型,RAM是临时内存。这是什么意思?永久内存是一种内存类型,即使断开电源连接后,也可以存储数据 /信息。
另一方面,临时内存用于在程序运行时保存临时数据,并且可以保留这些值,直到连接功率为止。
基于对功率的依赖性,记忆可以分为两种类型:
- 非易失性记忆
- 挥发性记忆
Flash和Eeprom属于非挥发性内存类别,其中使用EEPROM用于存储小型数据(例如传感器数据日志或硬件信息)时,使用Flash来存储程序代码。即使断开电源,这两个记忆都将保留其数据。
来到RAM,这是一个挥发性的内存,即,一旦电源断开,数据就消失了。
什么是eeprom?
现在让我们专注于感兴趣的记忆。eeprom或e2PROM对于可擦除的可编程读取仅是较短的读取内存,这是早期一代ROM(仅读取内存),PROM(仅可编程读取内存)和EPROM(仅可擦除的可编程可编程仅读取内存)的继任者。
在进行进一步之前,让我们在记忆中上一个小的历史课。ROM或仅读取内存是一种非易失性内存,用于永久存储数据,例如嵌入式系统的固件。
最初的ROM是工厂编程的,您无法更改ROM的内容。这些也称为MROM(仅蒙版读取记忆)。
然后是PROM或可编程读取的记忆。最终用户可以对其进行编程(使用称为PROM程序员的特殊设备),但这是一次性作业,即只能对其进行编程一次。
为了克服舞会的“一次性可编程”问题,EPROM得以开发。它代表可擦除的可编程读取仅读取内存。可以通过将其暴露于强紫外线来消除内存,并且可以与PROM相似的编程进行编程。
EPROM的一个问题是,反复接触强光(通常是从汞蒸气灯中)最终将使记忆力限制在擦除周期至1000小于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字节(1 kb) |
ATMEGA2560 | 巨型 | 4096字节(4 kb) |
Atmega168 | 纳米 | 512字节 |
Arduino Eeprom库
EEPROM库是一个特殊的库,使您能够在Arduino Board上的微控制器的内部EEPROM读写。它是IDE的标准配置,您不必下载任何额外的东西。
Arduino Eeprom库为您提供五个非常有用的功能:
- eeprom.read()- 从EEPROM阅读字节。
- eeprom.write()- 将一个字节写入EEPROM。
- eeprom.update()- 仅当当前值与以前的值不同时,将字节写入EEPROM。
- eeprom.get()- 从EEPROM(float或struct或任何数据类型)中读取任何数据类型。
- eeprom.put()- 将任何数据类型写入EEPROM(float或struct或任何数据类型)。
EEPROM库中的Arduino IDE中有一些示例。浏览这些信息以获取更多信息。
测试电路:记住继电器的状态
我们已经看到了很多关于EEPROM的理论,以及Arduino中的Eeprom。只有当我们看到实际实施时,所有这些理论才有意义。因此,让我们构建一个小电路来测试Arduino的EEPROM功能。该应用程序称为“ Arduino可以记住继电器状态吗?”。
在此测试电路中,我将使用按钮打开或关闭继电器。同时,每当按下按钮时,我还将将继电器的状态存储在EEPROM中。因此,如果重新启动了Arduino,它首先检查了EEPROM中继电器的先前状态,并将继电器设置为该位置。
电路原理图
下图显示了测试Arduino EEPROM的电路图。
代码
正如我已经说过的,您不需要任何其他图书馆。您要做的就是将“ EEPROM.H”标头文件包括在代码中。
结论
关于Arduino的EEPROM的初学者指南 /教程。您学会了如何在本教程中使用Arduino的内部EEPROM。在下一个教程中,我将向您展示如何向Arduino添加外部EEPROM IC。
一个回应
很棒的教程!
一件事,如果我的继电器是由移动传感器触发的,如何记住继电器状态,因此当继电器向上然后突出电源时,当电源返回时,它将保持上升。谢谢