原创 【雕爷学编程】Arduino动手做(68)---AT24C256存储模块

2020-11-17 16:18 4400 21 4 分类: MCU/ 嵌入式 文集: 雕爷学编程

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。


【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)实验六十八:AT24C256 I2C接口 EEPROM 存储模块 IIC


AT24C256

是ATMEL公司256kbit串行电可擦的可编程只读存储器,8引脚双排直插式封装,具有结构紧凑、存储容量大等特点,可以在2线总线上并接4片该IC,特别适用于具有高容量数据储存要求的数据采集系统。AT24C256采用SOP-8封装。

芯片参数

芯片有3种工作电压;

  5.0V(VCC=4.5V~5.5V)

  2.7V(VCC=2.7V~5.5V)

  1.8V(VCC=1.8V~3.6V)

特性:

  内部可以组成32k×8存储单元

  2线串行接口

  斯密特触发,滤波输入抑制噪声

  双向数据传送协议

  硬件写保护引脚和软件数据保护功能

  具有64字节页写模式

A0、A1:地址选择输入端。在串行总线结构中,可以连接4个AT24C256IC。用A0、A1来区分各IC。A0、A1悬空时为0。
SCL:串行时钟输入。上升沿将SDA上的数据写入存储器,下降沿从存储器读出数据送SDA上。
SDA:双向串行数据输入输出口。用于存储器与单片机之间的数据交换。
WP:写保护输入。此引脚与地相连时,允许写操作;与VCC相连时,所有的写存储器操作被禁止。如果不连,芯片内部下拉到地。
VCC:电源。
GND:地。
NC:空。

AT24C256的工作原理

AT24C256内部有512页,每一页为64字节,任一单元的地址为15位。地址范围0000H~7FFFH。

芯片工作状态

1)时钟和数据传送

一般情况下,SDA被外部的设备拉到高,只有当SCL为低电平时,SDA上的数据变化,表示要传送数据。SCL为高时SDA变化表示状态变化。

2)开始状态(START)

当SCL为高时,SDA由高到低表示数据传送开始,这一状态必须在所有命令之前。

3)结束状态(STOP)

当SCL为高时,SDA由低到高表示数据传送结束状态。

4)应答状态(ACK) 

所有的地址和数据都是以8位的形式串行传送给存储器或从存储器读出的。存储器在第9个时钟周期SDA发零信号表示已经收到8位数据。见图总线协议图。

AT24C256 I2C接口 EEPROM 存储模块

1.板载芯片AT24C256进口芯片;

2.板载I2C通讯所需的上拉电阻;

3.所有管脚均引出并标注;

4.PCB板子尺寸:1.9(CM)x1.1(CM)

模块电原理图

  1. /*
  2. 【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验六十八:AT24C256 I2C接口 EEPROM 存储模块 IIC
  4. */
  5. #include <Wire.h>
  6. #define ADDRESS_AT24C256 0x50
  7. word wordAddress = 0x0F00;
  8. char str[] = "This is ZLBG.";
  9. byte buffer[30];
  10. int i;
  11. void setup()
  12. {
  13. Wire.begin();
  14. Serial.begin(9600);
  15. //write
  16. Wire.beginTransmission(ADDRESS_AT24C256);
  17. Wire.write(highByte(wordAddress));
  18. Wire.write(lowByte(wordAddress));
  19. for (i = 0; i < sizeof(str); i++)
  20. {
  21. Wire.write(byte(str));
  22. }
  23. Wire.endTransmission();
  24. delay(10);
  25. }
  26. void loop()
  27. {
  28. Wire.beginTransmission(ADDRESS_AT24C256);
  29. Wire.write(highByte(wordAddress));
  30. Wire.write(lowByte(wordAddress));
  31. Wire.endTransmission();
  32. Wire.requestFrom(ADDRESS_AT24C256, sizeof(str));
  33. if(Wire.available() >= sizeof(str))
  34. {
  35. for (i = 0; i < sizeof(str); i++)
  36. {
  37. buffer = Wire.read();
  38. }
  39. }
  40. for(i = 0; i < sizeof(str); i++)
  41. {
  42. Serial.print(char(buffer));
  43. }
  44. Serial.println();
  45. delay(2000);
  46. }


作者: 雕爷学编程, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3894459.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

雕爷学编程 2020-12-14 06:49

开发工匠: 写的很好,学习,参考了
    谢谢开发工匠的鼓励,还在学习中

开发工匠 2020-11-18 10:53

写的很好,学习,参考了
相关推荐阅读
雕爷学编程 2023-06-20 08:52
【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-18 14:52
【雕爷学编程】Arduino动手做(116)---五向导航按键模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-18 13:23
【雕爷学编程】Arduino动手做(115)---HB100多普勒雷达模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-18 11:10
【雕爷学编程】Arduino动手做(114)---US-015高分辨超声波模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-17 09:10
【雕爷学编程】Arduino动手做(113)---5110液晶屏模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
雕爷学编程 2023-06-17 06:36
【雕爷学编程】Arduino动手做(112)---2.4G24L01无线模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为...
EE直播间
更多
我要评论
2
21
关闭 站长推荐上一条 /3 下一条