| Ваш IP: 44.197.197.23 | Online(45) - гости: 10, боты: 35 | Загрузка сервера: 0.87 ::::::::::::

ATmega328 EEPROM

ATmega328


ATmega328 содержит 1024 Байт EEPROM (ППЗУ)-памяти. Эта память организована как отдельное пространство данных, каждый один байт может быть прочитан и записан. EEPROM (ППЗУ) может быть записана и стерта в сумме как минимум 100 000 раз.

Запись и чтение EEPROM осуществляется при помощи следующих регистров:

 

EEARL и EEARH — младший и старший регистры адреса EEPROM

Так адресное пространство EEPROM содержит 1024 адресов (0…1023), то за адреса отвечают два регистра адреса (10 бит)

EEARL 

7 6 5 4 3 2 1 0
EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0

EEARH

7 6 5 4 3 2 1 0
EEAR9 EEAR8

Например если необходимо использовать адрес EEPROM под номером 836 (0B1101000100), то в регистры адреса будут иметь следующие значения:

EEARH = 11

EEARL = 01000100

 

EEDR — регистр данных EEPROM

7 6 5 4 3 2 1 0
EEDR[7:0]

Регистр данных EEDR должен содержать данные, которые будут записываться в EEPROM, по адресу определенному в регистре адреса EEAR.

Пример использования:

EEDR = 123;

 

EEСR — регистр управления EEPROM

7 6 5 4 3 2 1 0
EEPM1 EEPM0 EERIE EEMPE EEPE EERE

Биты  EEPM1 и EEPM0 определяют какое действие выполнит программа, когда в бит EEPE будет загружена 1. Это позволяет программировать данные в автоматическом режиме (стирание старых данных и записывание новых данных) или выполнять от отдельно операции стирания и записи.

EEPM[1:0] Время исполнения Операция
00 3,4 мс стирание и запись за одну операция (автоматический выбор)
01 1,8 мс только стирание
10 1,8 мс только запись
11

Бит EERIE — прерывание EEPROM по состоянию «готово к записи» .  В бит EERIE нужно записать 1, чтобы разрешить прерывание и переход  к вектору EE READY (EE_READY_vect — прерывание по готовности памяти EEPROM).

Бит  EEMPE — разрешение записи данных в EEPROM по заданному адресу.

Бит EEPE  исполнения записи в EEPROM. Бит EEMPE  должен уже содержать единицу еще до того, как единица будет записана в бит EEPE, иначе запись EEPROM не будет осуществлена.

Бит EERE разрешение чтения данных из EEPROM по указанному адресу.

 

Функции записи и чтения EEPROM

unsigned char EEPROM_read(unsigned int uiAddress){
  while(EECR & (1<<EEPE));  // проверка готовности EEPROM 
    EEARH = ((uiAddress & 0xF0) << 2); // регистр адреса H
    EEARL = uiAddress & 0x0F; // регистр адреса L
    EECR |= (1<<EERE);// чтение EEPROM
    return EEDR; // вывод значения
}
 
void EEPROM_write(unsigned int uiAddress, unsigned char ucData){
  while(EECR & (1<<EEPE)); // проверка готовности EEPROM 
    EEARH = ((uiAddress & 0xF0) << 2); // регистр адреса H
    EEARL = uiAddress & 0x0F; // регистр адреса L
    EEDR = ucData; // регистр данных 
    EECR |= (1<<EEMPE);// Разрешение записи в EEPROM
    EECR |= (1<<EEPE); // Запись в EEPROM
} 

Пример:

void setup() {
  Serial.begin(9600);

  EEPROM_write(812,123);// запись число 123 по адресу 812 в EEPROM
}

void loop() {
  Serial.println(EEPROM_read(812));// считываем содержимое адреса EEPROM 812 и выводим в монитор порта
  delay(1000);
}

unsigned char EEPROM_read(unsigned int uiAddress){
  while(EECR & (1<<EEPE));  // проверка готовности EEPROM 
    EEARH = ((uiAddress & 0xF0) << 2); // регистр адреса H
    EEARL = uiAddress & 0x0F; // регистр адреса L
    EECR |= (1<<EERE);// чтение EEPROM
    return EEDR; // вывод значения
}
 
void EEPROM_write(unsigned int uiAddress, unsigned char ucData){
  while(EECR & (1<<EEPE)); // проверка готовности EEPROM 
    EEARH = ((uiAddress & 0xF0) << 2); // регистр адреса H
    EEARL = uiAddress & 0x0F; // регистр адреса L
    EEDR = ucData; // регистр данных 
    EECR |= (1<<EEMPE);// Разрешение записи в EEPROM
    EECR |= (1<<EEPE); // Запись в EEPROM
} 

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Реле времени для фотопечати

    Основные параметры: Диапазон выдержек I — 1…6с II — 5,5…33с III — 31…186с Стабильность выдержки 2% Потребляемая мощность 2,5Вт К сети реле времени подключают тумблером S1. Для смены кадров фотоувеличитель включают выключателем S4. При выключенном положении тумблера S1 его контакты S1.2 шунтирует симистор V16 и напряжение сети поступает непосредственно на …Подробнее...
  • Комбинированный биостимулятор

    На рисунке показана схема простого биостимулятора, он совмещает в себе 2-а уст-ва: прибор для электропунктуры и фотостимулятор биологически активных точек (БАТ) организма. Стимулятор может работать в режиме непрерывной генерации ( используем переключатель SA1). Режимы работы стимулятора можно менять переключателями SA1 SA2. Схема биостимулятора проста и после сборки в налаживании не …Подробнее...
  • Автогенераторы на элементах ТТЛ

    При помощи элементов ТТЛ можно изготовить автогенераторы у которых выходная частота превышает 30 МГц. Для того чтобы автогенератор быстро возбуждался и работал стабильно во всем диапазоне внешних воздействий, усилительная линейка должна быть не инвертирующей с большим коэффициентом усиления Ku, который по возможности следует стабилизировать. Схемы простых автогенераторов показаны на рисунках …Подробнее...
  • К1055ХВ7Р — ИС УПРАВЛЕНИЯ РЕЛЕ ВКЛЮЧЕНИЯ ЛАМП АВТОМОБИЛЯ

    К1055ХВ7Р — ИС УПРАВЛЕНИЯ РЕЛЕ ВКЛЮЧЕНИЯ ЛАМП АВТОМОБИЛЯ

    Микросхема К1055ХВ7Р является интегральной схемой управления реле включения ламп автомобиля. Она изготовлена по уникальной биполярной технологии, разработанной для класса ИС, ориентированных на применение в бортовой сети автомобилей. ИС предназначена для работы в качестве мощного счетного триггера в составе реле включения задних противотуманных огней, реле включения передних противотуманных огней, реле включения / переключения ближнего и дальнего света автомобиля с …Подробнее...
  • Домашняя метеостанция (Arduino)

    Домашняя метеостанция (Arduino)

    В домашней метеостанции будут использоваться следующие компоненты: Arduino Nano модуль DS3231 — часы реального времени модуль BMP280 — датчик атмосферного давления и температуры (измерение атмосферного давления в мм.рт.ст и  температуры в комнате) модуль 18B20 — цифровой датчик температуры (измерение температуры на улице) модуль DHT11 — датчик влажности LCD 1602  на базе …Подробнее...