Привет.
Бывают ситуации когда нужно добавить дополнительную память в Ардуино, в этом нам поможет микросхема памяти 24LC32 (или подобные с другими размерами памяти). Она используется для хранения данных и программ в различных электронных устройствах, имеет объём памяти 32 килобита (либо другой).
Для подключения внешней памяти EEPROM к Arduino 24LC32 вам потребуется модуль памяти 24LC32 в DIP-корпусе. Схема подключения выглядит следующим образом:
- Подключите пины A0, A1 и A2 к земле.
- Соедините 4-й контакт с минусом и 8-й контакт модуля памяти с плюсом.
- SCL и SDA подключить к соответствующим пинам на плате (на разных платах Arduino пины SCL и SDA могут иметь разные номера, на плате Arduino Nano и lgt8f328p пины SCL и SDA обозначены как A5 и A4 соответственно) подтяните также их к питанию через резистор 1 или 10 кОм.
Теперь вы можете записывать и выводить значения в память EEPROM. Используем информацию из даташита на микросхему 24LC32.
Сначала необходимо отправить контрольный байт указывающий микросхему памяти и её адрес 1010000. Далее необходимо отправить High байт указывая на адрес ячейки в памяти микросхемы. В конце отправить Low байт прописывая наше значение в ячейку.
Для микросхемы 24LC32 доступно 32 килобайта (32 768 байта). Читать можем только по 1 байту, а записывать можно больше 1 байта за раз.
У нас имеется число в 2 байта. Для записи разделим его на 2 числа по 1 байту и запишем в ячейки 0 и 1. Далее ячейки 0 и 1 станут ячейкой с адресом 0, ячейки 2 и 3 станут ячейкой с адресом 1 и так далее.
Ячеек для записи значений 2 байта (unsigned int) по логике станет меньше в 2 раза 12 килобайт (12 288 байта).
Напишем код для записи и чтения 2 байтов информации:
#include <Wire.h> //подключение библиотеки Wire, которая используется для работы с EEPROM
#define disk1 0x50 // определение адреса EEPROM (0x50)
void setup() {
Wire.begin(); // инициализация библиотеки Wire для работы с EEPROM
writeEEPROM(0, 12345); // обращение к функции записи значения 12345 в ячейку EEPROM с адресом 0 и 1
Serial.println(readEEPROM(1)); // чтение значения из EEPROM с адресом 0 и 1 вывод его в порт
void loop() {
}
void writeEEPROM(unsigned int eeaddress, unsigned int data) { //введем функцию для записи 2 байт информации
Wire.beginTransmission(disk1);
Wire.write((int)(eeaddress * 2 >> 8));
Wire.write((int)(eeaddress * 2 & 0xFF));
Wire.write(data >> 8);
Wire.write(data);
Wire.endTransmission();
delay(5);
}
unsigned int readEEPROM(unsigned int eeaddress) { //напишем функцию, которая принимает аргументы и возвращает прочтенное число
unsigned int rdata = 0xFFFF;
Wire.beginTransmission(disk1);
Wire.write((int)(eeaddress * 2 >> 8));
Wire.write((int)(eeaddress * 2 & 0xFF));
Wire.endTransmission();
Wire.requestFrom(disk1, 1);
rdata = Wire.read();
Wire.beginTransmission(disk1);
Wire.write((int)(eeaddress * 2 + 1 >> 8));
Wire.write((int)(eeaddress * 2 + 1 & 0xFF));
Wire.endTransmission();
Wire.requestFrom(disk1, 1);
rdata = Wire.read() | (rdata << 8);
return rdata;
}
Отлично! Данный код позволит без труда записывать и читать с микросхемы 24LC32 данные типа unsigned int.