AVR для начинающих. Урок 14. EEPROM.

Автор: | 26.01.2017

Доброго времени суток!

Сегодня мы поговорим о такой важной составляющей микроконтроллера как EEPROM. Очень часто возникает необходимость сохранения данных при отключении питания микроконтроллера. Например, констант, настроек, и так далее. Именно для таких ситуаций микроконтроллеры AVR имеют в своем составе постоянную энергонезависимую память EEPROM, в которой запросто можно разместить необходимые данные. То есть, при отключении питания контроллера или его сбросе, данные записанные в EEPROM не стираются. Объем EEPROM зависит от модели контроллера.

Однако данная память имеет хоть и огромное но, ограниченное количество циклов перезаписи (порядка 100 000), и скорость работы с ней достаточно низкая.

При работе с памятью посредством языка C, можно абстрагироваться от низкоуровневых функций и работы непосредственно с регистрами, так как в стандартной поставке среды Atmel(AVR) Studio уже присутствует библиотека для работы с данным видом памяти. При использовании Assembler, прописать данные функции, путем последовательной работы с регистрами, придется самому. Оставим Assembler на следующий урок, а сейчас поработаем с C.

Для работы с постоянной памятью данных в Atmel(AVR) Studio используются следующие функции стандартной библиотеки eeprom.h:

  • eeprom_read_byte (eeprom_read_word, eeprom_read_dword, eeprom_read_float, eeprom_read_block)Функция чтения данных соответствующего типа из EEPROM.

  • eeprom_write_byte(eeprom_write_word, eeprom_write_dword, eeprom_write_float, eeprom_write_block)Функция записи данных соответствующего типа в EEPROM.

  • eeprom_update_byte(eeprom_ update _word, eeprom_ update _dword, eeprom_ update _float, eeprom_ update _block)Функция обновления данных соответствующего типа в EEPROM.

Давайте в качестве примера создадим счетчик запусков контроллера. То есть, при каждом запуске контроллера, увеличиваем счетчик на единицу.

В Atmel(AVR) Studio напишем следующий код:

Рассмотрим данный код подробнее. Вначале директивой include подключаем заголовочный файл eeprom.h. Затем создаем переменную num, типа uint8_t, и размещаем её в EEPROM, директивой EEMEM.

После объявления необходимых переменных, командой eeprom_read_byte, считываем значение из EEPROM в переменную tmp.

После вывода текущего значения счетчика, увеличиваем переменную на единичку и сохраняем значение в EEPROM, командой eeprom_write_byte, которая запишет значение tmp по адресу num. Надеюсь, что работа программы ясна, если возникнут вопросы — оставляйте их в комментариях.

Atmel(AVR) Studio автоматически сгенерирует файл EEPROM расширения .eep, в папке с проектом. Однако для его использования в ПО Proteus, необходимо преобразовать его в .bin , при помощи утилиты hex2bin, которую вы можете найти в Интернете.

После преобразования файла, необходимо настроить микроконтроллер в среде Proteus. Для этого, поместите соответствующий контроллер на схеме и кликните дважды на нем.

В данном окне, откройте список Advanced Properties, и выберите пункт Initial Contents of Data EEPROM. Нажав на иконку с папкой, укажите путь до файла .bin.

В этом же окне не забудьте указать путь до файла прошивки, в пункте Program File.

После всех описанных выше процедур, Вы можете запустить симуляцию работы схемы в обычном режиме.

Спасибо за внимание!

Если у Вас есть вопросы, оставляйте их в комментариях.

Другие уроки цикла.

Читайте также  Bluetooth модуль HC-05 для AVR.

Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

AVR для начинающих. Урок 14. EEPROM.: 3 комментария

  1. дядя

    Затем создаем переменную OUT. И где эта переменная?

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *