Меню

Как подключить eeprom к ардуино

Теория I2C, EEPROM от Atmel.

Пришла мне посылка из Китая в которой лежит микросхема EEPROM фирмы Atmel. Которую хочется подключить к Arduino. Но совершенно не хочется использовать готовую библиотека, а разобраться самому. По этому статья получиться немного объемной и скучной и разделем ее на три части :

Часть первая, I2C и библиотека «Wire».

Последовательный протокол обмена данными IIC (также называемый I2C — Inter-Integrated Circuits, межмикросхемное соединение). Разработана фирмой Philips Semiconductors в начале 1980-х как простая 8-битная шина внутренней связи для создания управляющей электроники. Так как право на использование его стоит денег фарма Atmel назвала его TWI, но смысл от этого не меняется.

Для передачи данных используются две двунаправленные лини передачи данных. SDA (Serial Data) шина последовательных данных и SCL (Serial Clock) шина тактирования. Обе шины подтянуты резисторами к плюсовой шине питания. Передача/Прием сигналов осуществляется прижиманием линии в 0, в единичку устанавливается сама, за счет подтягивающих резисторов.

Библиотека «Wire».

Для облегчения обмена данными с устройствами по шине I2C для Arduino написана стандартная библиотека Wire которая есть уже в комплекте IDE. Она имеет следующие основные функции:

Wire.begin(Address) вызывается один раз для инициализации и подключения к шини как Ведущий или Ведомое устройство. Если Address не задан подключаемся как Мастер устройство.

Wire.beginTransmission(address) начинает передачу на ведомое I2C устройство с заданным адресом.

Wire.endTransmission() прекращает передачу данных ведомому. Функция возвращает значение типа byte :

Wire.write() запись данных от ведомого устройства в отклик на запрос от ведущего устройства, или ставит в очередь байты для передачи от мастера к ведомому устройству.Фактически записывает данные в буфер. Размер буфера 32 байт а ( минус 2 байта адрес, фактически 30 байт ), а передает буфер функция Wire.endTransmission().

Wire.read() Считывает байт, который был передан от ведомого устройства к ведущему или который был передан от ведущего устройства к ведомому. Возвращаемое значение byte : очередной принятый байт.

Это самые основные функции библиотеке, остальные мы рассмотрим по ходу пьесы ))

Часть вторая, EEPROM.

EEPROM (англ. Electrically Erasable Programmable Read-Only Memory ) — электрически стираемое перепрограммируемое ПЗУ (ЭСППЗУ), один из видов энергонезависимой памяти (таких, как PROM и EPROM). Память такого типа может стираться и заполняться данными до миллиона раз.

Мне прислали уже готовый модуль EEPROM с микросхемой AT24C256 фирмы Atmel объемом 32 кбайт. Что бы разобраться с этим чудом нам придется проштудировать datasheet который очень скучный и на английском. Так что я вам выдам уже готовый результат моих мук.

Читайте также:  Как подключить роуминг билайн за границей если нет сети

Характеристики :

выводы :

Адрес памяти:

То есть если все три вывода прижаты к GND и мы хотим записать в память, адрес устройства будет выглядеть как 10100000 (в библиотеке «Wire» используется 7-ми битный адрес, сдвигаем все в право на один бит 01010000 0x50).

Запись данных в память:

Чтение данных :

С чтением данных все интересней. Память поддерживает три варианта чтения:

Память запоминает последний адрес записи пока не отключено питание, по этому мы можем прочитать последний байт без указания адреса.

Что бы прочитать случайный адрес нам нужно с начало отправить команду на запись и передать адрес который хотим прочитать( не забывайте что адрес состоит из двух 8-ми битных частей ). За тем отправить команду на чтение и получить искомый байт, завершив все командой STOP.

Последовательное чтение может выполняться как с текущего адреса так и со случайного и будет продолжаться пока микроконтроллер не отправит сигнал СТОП. При переполнении адреса память ее сбросить и адресация начнется с начала.

Ну что же пришло время попробовать что нибудь записать:

Ну и пример с записью в память строки «Hello Word» :

Организация памяти:

Для чтения таких ограничений нету, в даташипе написано только то что когда вы достигнете конца адресов вас автоматически перекинет на начало ( адрес 0х00).

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

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

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

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

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

Читайте также:  Как подключить накладки на пороги с подсветкой на киа рио

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

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

Затем отправляем данные. Первым делом отправляем два байта адреса (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

Источник

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Подключаем к Arduino внешнюю EEPROM память 24C04

EEPROM (электрически стираемое программируемое постоянное запоминающее устройство) это модифицируемое пользователем постоянное запоминающее устройство (ПЗУ), которое можно многократно стирать и перепрограммировать, прикладывая более высокое, чем обычно, электрическое напряжение. EEPROM широко используется в микроконтроллерных проектах, в том числе в Arduino.

Впрочем, иногда внутренней EEPROM не хватает, тогда подключают микросхему внешней памяти EEPROM, например, 24C04.

24C04 – это двухпроводная последовательная EEPROM. Объем памяти составляет 512 слов. Каждое слово имеет 8 бит. Память состоит из 32 страниц по 16 байт каждая и использует адрес слова из 9-битных данных для случайной адресации слова из памяти. Модуль использует протокол связи I2C для связи с другими микроконтроллерами или цифровыми устройствами.

Распиновка микросхемы 24C04:

A0, A1, A2 – эти три вывода являются адресными входами. Контакты A2 и A1 предназначены для аппаратной адресации. Вы можете адресовать четыре устройства в одной системе шин, тогда как вывод A0 является выводом без подключения, и обычно мы соединяем этот вывод с землей.

Читайте также:  Как подключить интернет укртелеком через модем

SDA – вывод последовательных данных позволяет реализовать двунаправленную передачу последовательных данных и адресов.

SCL – это входной контакт синхронизации, который вводит данные в каждое устройство EEPROM по положительному фронту тактовой частоты и при отрицательном переходе, он отправляет данные на выходной контакт каждого устройства.

WP – вывод защиты от записи защищает данные аппаратного обеспечения. Он разрешает операции чтения/записи, при подключении его к заземляющему контакту. И только операция записи будет активна при подключении к Vcc.

GND и Vcc – линии заземления и питания (от 1,7 до 5,5 В) соответственно.

Это устройство хорошо подходит для использования в приложениях, требующих низкого напряжения и малого энергопотребления для работы. Многие промышленные и коммерческие приложения используют это устройство, поскольку оно обеспечивает помехоустойчивость, и вы можете расширить его, каскадируя 8 подобных устройств. Компьютеры и другие электронные устройства используют это устройство для хранения данных и предотвращения потери данных при отключении питания.

Как уже упоминалось выше, это устройство использует интерфейс I2C, который состоит из двух проводов с именами SDA и SCL. Поскольку это двунаправленная шина, она может выступать в качестве передатчика или приемника. Данные на выводе SDA изменяются при переходе сигнала SCL с высокого уровня на низкий.

Переход сигнала синхроимпульса с низкого уровня на высокий указывает на состояние пуска или останова. Когда на входном выводе SDA с высоким уровнем SCL происходит положительный переход, это условие запуска. Условие останова возникает, когда на SDA происходит отрицательный переход входного сигнала с высоким уровнем входного сигнала SCL. Это переводит устройство в режим ожидания.

EEPROM отправляет или получает адреса и слова данных последовательно в форме 8-битных слов и отправляет ноль в качестве подтверждения того, что оно получило каждое слово. На рисунке ниже показано влияние на выход при изменении входов SDA и SCL.

Далее представлена схема подключения EEPROM 24C04 к Arduino UNO. Соедините вывод SCL Arduino с выводом SCL EEPROM. Аналогично, вывод SDA (Arduino) с выводом SDA микросхемы EEPROM. Кроме того, подключите подтягивающие резисторы к SDA/SCL.

Скопируйте приведенный далее код и вставьте его в Arduino IDE. Загрузите этот код в Arduino. Этот код будет просто читать значение с адреса 0x00.

Источник