| Ваш IP: 3.233.219.62 | Online(34) - гости: 15, боты: 19 | Загрузка сервера: 1 ::::::::::::

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
} 

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

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

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

  • Часы на БИС К145ИК1901

    Принципиальная схема часов на БИС К145ИК1901 приведена на рис. Основные функциональные узлы электронных часов объединены в кристалле БИС: генератор, счетчики минут и часов, формирователь семиэлементного кода для управления катод-люминесцентными индикаторами (выводы 13, 14, 16 — 20), формирователь сигналов выборки индикатора (выводы 44 — 47), устройство установки времени (будильник), компаратор, обеспечивающий …Подробнее...
  • FM — приемник на TDA7000

    ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ: Стабилизированное питание: Vcc = 9 ~ 12V Частота приема: 88 ~ 108MHz Ток потребления: 100mA Элементная база: Все сопротивлений — 1/4W. R1 47K R2 22K R3 100K R4 39K R5 10 P1 10K потенциометр логарифмической P2 100K линейный потенциометра C1 39pF керамические C2 47pF керамические C3 2,2 нФ …Подробнее...
  • ФНЧ для сабвуфера

    ФНЧ для сабвуфера

    На рисунке показана простая схема ФНЧ для сабвуфера. В схеме используется ОУ ua741. Схема достаточно проста, имеет низкую стоимость и не нуждается в настройке после сборки. Частота среза ФНЧ 80 Гц. Для работы ФНЧ для сабвуфера необходим двухполярный источник питания ±12 В.Подробнее...
  • Усилитель мощности 6 Вт на TDA7245A

    Усилитель мощности 6 Вт на TDA7245A

    Усилитель мощности на TDA7245A с фиксированным усилением предназначен для использования в бытовой аудиотехнике. Микросхема снабжена функциями STAND-BY и тепловой защитой. Усилитель на базе TDA7245A обладает следующими техническими характеристиками: Номинальное напряжение питания 16,5В Напряжение питания 12…30В Ток покоя 17…25мА в зависимости от напряжения питания Выходная мощность при КНИ=10% 12Вт Выходная мощность …Подробнее...
  • TDA8931 — УМЗЧ 20Вт

    TDA8931 — УМЗЧ 20Вт

    TDA8931 — усилитель мощности звуковой частоты класса D. Выходная мощность усилителя 20 Вт. КПД усилителя более 90%, что позволяет использовать микросхему TDA8931 без внешнего радиатора. Напряжение питания микросхемы TDA8931 может быть в пределах от 12 до 35В, КНИ не более 0,02% при выходной мощности 1Вт (Vp=22В, Rн=4 Ом). Микросхема снабжена защитой от …Подробнее...