Arduino 大内存开发板四剑客之----32K字节AT24C256

今天我们先介绍四剑客之一的 32KE EEPROM Arduino 开发板


Arduino 由于其最完美的生态环境,成为了学习单片机的最佳途径,其库函数丰富,例程超多,开发效率高,开发产品稳定性好。但是最大的缺点是单片机内置存储空间很小,常用的UNO,NANO,PRO MINI 都是采用了328P单片机,内置的EEPROM用户数据存储空间只有1KB,比如我们如果做个刷卡的门禁系统,每个卡号+用户ID占用10个字节的话,最多也就存储102张卡号。如果做个网络版应用,可能连存储个首页文件都很困难。即便进化到UNO R4版本,高达150元人民币的开发板,其EEPROM容量也仅有8KB.

一、CC_SMINI 开发板简介

好在CC最近推出了多款大容量存储的Arduino 开发板,涵盖了EEPROM FLASH FRAM SD等,今天我来给大家介绍第一款 基于AT24C256的 容量高达32K eeprom开发板。
首先看下板子实物图:

在这里插入图片描述
板子的主芯片采用了328PB-AN,查了下官网,这是其328系列工业级芯片里面最强的一款了。整个板子到手第一感觉真的超级微型。长度仅2.1cm,宽度仅1.8cm。哈哈,这下随便设计个指纹门禁、遥控车啥的,再也不用担心体积重量问题了。
底板采用了CC 自家的SMINI 16M Arduino 开发板,这个个绝妙的设计。这里先来欣赏下:
在这里插入图片描述

2.54排针标准孔引出了D0 D1 D3 D7 D8 D10 D11 D12 D13 A4 A5 多达11个IO口,这11个IO口涵盖了2个硬件串口,1个SPI,1个I2C,2个模拟,4个PWM,中断1 的组合功能,可以满足绝大多数开发应用。更为惊艳的是 328PB芯片的另一面设计了一个8P的贴片扩展口,单独开放了D2 D23 D24 A0 A1 A7 6个IO口,涵盖了第2个独立的硬件SPI接口,第2个独立I2C,中断0,3个模拟的组合功能。也就是说扩展口完全没有占用排针主接口,可用于标准贴片外扩,飞线等使用。
总之一句话,在不到2厘米大小的空间上提供了多达17个IO口,真是最强超微型Arduino 了吧。
大家可能会有个疑问,Arduino 哪里来的第二SPI,第二I2C,第二硬件串口呢?其实这些硬件接口主要与所使用的芯片有关。比如MEGA2560 就有4个硬件串口,分别为Serial,Serial1,Serial2,Serial3 只要你在IDE中选择了2560的板子,就可以编译通过。同样如果选择了328PB的芯片,就可以使用Serial,Serial1,引用 SPI.h, SPI1.h , Wire.h , Wire1.h 这些内置的对象了。
328PB开发板采用的是MiniCore组件,安装方式:请在Arduino IDE 主界面 点击 文件-首选项-其他开发板管理器地址 中添加 https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json,然后打开开发板管理器 搜索MiniCore安装即可

二、AT24C256的使用

安装好了 MiniCore组件 后,我们选择328PB的开发板,如图:
在这里插入图片描述
然后输入以下代码进行下读写速度测试,在32K EEPROM存储空间的加持下,如果存储10字节的门禁卡信息的话,就可以保存3200多个用户了哦。稍微压缩了点的网页文件也没有问题了呢。

#include <Wire1.h> //指定AT24C模块所接的arduino 开发板的 Wire1.h 或者 Wire1.h(仅328PB芯片有Wire1.h)
#define I2C_N Wire1   //指定AT24C模块所接的arduino 开发板的 I2C接口,可选Wire 或者 Wire1(仅328PB芯片有Wire1)

int DeviceAddress=0x50;//AT24C 模块的地址

unsigned long elsp = 0;//用来计算耗时的变量

void setup() {
  I2C_N.begin();  //启动I2C通信
  Serial.begin(115200);

  pinMode(A1, OUTPUT);  //CC_SMINI_EEPROM开发板有一个LED指示灯,接的A1
  digitalWrite(A1, LOW);  //指示灯亮
  byte W_num=0;

  Serial.print("write 1k:");//连续写入1K字节数据
  elsp = millis();
  for (uint16_t i = 0; i < 1024; i++) {
    Write_Byte(i, W_num);  
    W_num++;
    if (W_num == 256) { W_num = 0; }
  }

  Serial.print(millis() - elsp);
  Serial.println(" ms");  //3861ms

  Serial.println();
  Serial.print("read 1k:");//读取1K字节数据
  elsp = millis();
  for (uint16_t i = 0; i < 1024; i++) {
    W_num = Read_Byte(i);
    Serial.print(Read_Byte(i));
    Serial.print(" ");
  }

  Serial.print(millis() - elsp);
  Serial.println(" ms");  //563ms

}

void loop() {
 }
void Write_Byte(int DataAddress, byte Data) {
  int rData = Data;
  I2C_N.beginTransmission(DeviceAddress);
  I2C_N.write((DataAddress >> 8) & 0xff);
  I2C_N.write(DataAddress & 0x00ff);
  I2C_N.write(rData);
  I2C_N.endTransmission();
  delayMicroseconds(3200); //写入一个字节最低需要3.5MS
  while (1) {
    I2C_N.beginTransmission(DeviceAddress);
    if (I2C_N.endTransmission() == 0) {
      return;
    }
    delayMicroseconds(100);
  }
}
byte Read_Byte(int DataAddress) {
  byte data = 0xFF;
  I2C_N.beginTransmission(DeviceAddress);
  I2C_N.write((DataAddress >> 8) & 0xff);
  I2C_N.write(DataAddress & 0xff);
  I2C_N.endTransmission();
  size_t recv = I2C_N.requestFrom(DeviceAddress, 1);
  if (recv != 1) {
    return 0;
  }
  return I2C_N.read();
}

顺便说一句,很多网友都在说Arduino 不支持中文的问题,其实用了这个开发板,就容易解决了,先设计个简单的透传软件,从电脑把中文字符串发送给开发板,开发直接按字节存储到AT24C256芯片中,记好地址规则。然后程序中直接读取输出即可。
更多信息,大家有兴趣可以去了解了解,https://item.taobao.com/item.htm?id=745055383210

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lihaMIMI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值