Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Подключение I2C EEPROM к Arduino

Подключить внешнюю  EEPROM память к Arduino довольно просто, и проще всего сделать это через шину I2C. Есть много EEPROM, но 24LS256 или 24LC256 хороши простотой в использовании и относительной дешевизной (85 евро центов у моего поставщика). Емкость 24LC256 - 256 килобит данных (то есть 32 килобайта). 24LS256 также может работать на 3.3В, что удобно при использовании  Lilypad или Pro Mini 3.3V. В 24LS256 3 вывода используется для выбора его адреса, так что вы можете использовать до восьми микросхем на одной шине.

Схема подключения I2C EEPROM к Arduino

Адрес 24LS256: 1010A2A1A0. Если вы работаете только с 1 EEPROM, проще всего подключить A2-A0 к земле. Это дает адрес 1010000, 0 × 50 Hex. При чтении и записи в EEPROM надо понимать, что его емкость 32 Кб (фактически 32767) и одного байта не достаточно для адресации всей памяти.

Так, когда кто-то хочет послать запросы чтения и/или записи, необходимо отправить два байта - один MSB или верхнюю часть адреса (8 бит слева направо), а следующий LSB или нижнюю часть адреса (последние 8 бит слева направо).

Если, например, кто-то хочет использовать адрес 21000, это делается так: в двоичной системе 21000 это 0101001000001000. Разбейте его на части 01010010 и 00001000, а затем преобразуйте двоичные значения обратно в десятичное для отправки  Wire.send ().

Это звучит сложно, но на самом деле все очень просто. Есть два оператора, чтобы сделать это. Первый >>, также известный как "сдвиг вправо". Эта команда берет высшую (левую) часть байта и убирает нижнюю часть, оставляя только первые 8 бит. Чтобы получить нижний (правый) конец адреса, можно использовать оператор &, также известный как ”побитовое И”. Этот оператор при использовании с 0xFF даст нижний бит.

Печатная плата

Запись данных на 24LS256

Запись данных довольно проста. Для начала инициализируем шину I2C:
Wire.beginTransmission(0x50); // пины A0~A2 сажаем на GND

Затем отправляем данные. Первым делом отправляем  два байта адреса (25000), куда мы хотим записать данные.
Wire.send(21000 >> 8); // посылаем старший байт MSB адреса
Wire.send(21000 & 0xFF); // посылаем младший байт LSB адреса

Затем отправляем байт для хранения по адресу 21000, а затем закрываем соединение:
Wire.send(15); // посылаем число 15
Wire.endTransmission();

Чтение данных из 24LS256

Чтение более менее похоже. Для начала, инициализируйте соединение и укажите адрес данных для чтения:
Wire.beginTransmission(0x50); // выбор адреса
Wire.send(21000 >> 8); // посылаем старший байт MSB адреса
Wire.send(21000 & 0xFF); // посылаем младший байт LSB адреса
Wire.endTransmission();

Затем установите номер байтов данных, для чтения начиная с текущего адреса:
Wire.beginTransmission(0x50); // выбор адреса
Wire.requestFrom(0x50,1); // считываем один байт данных
Wire.receive(inbyte);

Здесь “inbyte” является переменной, выбранной для хранения данных, извлеченных из EEPROM.

Шина I2C подразумевает, что разные устройства могут быть подключены к одной линии. Верхний рисунок показывает это с двумя EEPROM. Ключевую роль играет то, что каждый из них имеет свой собственный адрес. На рисунке я решил использовать адреса 0 × 50 и 0 × 51. Первый получается при подключении A0-A2 одной микросхемы на землю, но при подключении A0 второй микросхемы к Vcc (Высокий) для второго чипа. В результате адрес 1010001 = 0x51

Оригинал статьи

Теги:

Касьянов А. Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (4) | Я собрал (0) | Подписаться

0
Дмитрий128 #
Этот скетч не работает с флэшками 24c01 - 24c16.
Ответить
0
Vladimir #
Конечно работает . Подсовывай адреса с 0 по X , где Х- размер флэшки
Ответить
0
Дмитрий128 #
Нет не работает этот скетчь с 24С01 - 24С16 это 8 битные EEPROM флэшки, даже если быть точнее то 9 битные, адрес памяти задается 8 битами и плюс 1 битом от i2c адреса самой флэшки. Так же заметце что есть EEPROM 24LC256, а есть 24C256 это абсолютно разные флэшки, у 24c256 уже используется 32 битная адресация памяти.
Ответить
0
Sencis #
Если не ошибаюсь у 2КБ и меньше Флешки только 1н адресс в адресной строке.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
Макетная плата для пайки (10 шт) USB-реле (2 канала)
вверх