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

 


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

Автор: Mike(admin) от 3-04-2020, 12:15

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


EEPROM память 24C04

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


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


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


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

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


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


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


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


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


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


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


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

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


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

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


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

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


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

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



#include "Wire.h"

#define EEPROM_I2C_ADDRESS 0x50

void setup()
{
Wire.begin();
Serial.begin(9600);
int address = 0;
byte val = 110;
writeAddress(address, val);
byte readVal = readAddress(address);
Serial.print("The returned value is ");
Serial.println(readVal);
}
void loop()
{

}

void writeAddress(int address, byte val)

{
Wire.beginTransmission(EEPROM_I2C_ADDRESS);
Wire.write((int)(address >> 8)); // MSB
Wire.write((int)(address & 0xFF)); // LSB
Wire.write(val);
Wire.endTransmission();
delay(5);
}

byte readAddress(int address)

{
byte rData = 0xFF;
Wire.beginTransmission(EEPROM_I2C_ADDRESS);
Wire.write((int)(address >> 8)); // MSB
Wire.write((int)(address & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(EEPROM_I2C_ADDRESS, 1);
rData = Wire.read();
return rData;
}



© digitrode.ru


Теги: Arduino, EEPROM, память




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий