|
|||||||
Память EEPROM (ППЗУ) в AVR. Запись и чтение
Время создания: 30.06.2017 08:31
Текстовые метки: eeprom, ЕЕПРОМ, AVR, запись, чтение
Раздел: Компьютер - Аппаратное обеспечение - Arduino / Atmega8
Запись: xintrea/mytetra_syncro/master/base/1498800694fuohxtizp7/text.html на raw.github.com
|
|||||||
|
|||||||
Всем привет. Рассмотрев в прошлой статье взаимодействие кнопок с контроллером, в этой записи разберем память МК AVR EEPROM (электрически стираемая ППЗУ), которая является энергонезависимой и имеет ресурс примерно в 100 000 циклов записи/чтения. Зачем нам нужна такая память с ограниченным числом обращений к ней? Такая память идеально подходит для хранения констант и исходных параметров, которые мы можем задать в начале программы, при помощи тех же кнопок. Следует отметить, что некоторые производители комбинируют память типа EEPROM с SRAM. При прекращении подачи рабочего напряжения содержимое памяти переносится с SRAM в EEPROM, благодаря чему достигают короткого цикла записи не приводящему к износу. Теперь рассмотрим как обращаться к ней. Для программирования памяти EEPROM используются три регистра, расположенные в области ввода/вывода памяти SRAM: восьмиразрядный регистр адреса EEAR или два регистра EEARH и EEARL; восьмиразрядный регистр данных EEDR; восьмиразрядный регистр управления EECR. когда происходит процесс записи, байт данных адресуется регистром адреса и заносится в регистр данных. В процессе чтения из памяти в регистр данных записывается содержимое ячейки EEPROM, адресуемой регистром адреса. В книге Евстифеева, справочнике по микроконтроллерам (литературу я приводил в статье №1), описаны программные примеры для записи/чтения. Давайте разберем программу: Реализация функции записи: void EEPROM_write (unsigned int uiAddress, unsigned char uoData) Разберем программу.
Разряды регистра управления EECR: 3. Загружаем байт данных в регистр данных EEDR. !!!Здесь есть один ньюанс. Если планируется переодическая запись данных в EEPROM во время выполнения программы, при самопрограммировании микроконтроллера, то необходимо знать, что запись в EEPROM не может одновременно выполняться с записью во Flash память , поэтому выше после первого пункта необходимо добавить следующий пункт: — дождаться завершения записи во Flash-память прграмм, т.е. ждать пока не сбпроситься флаг SPMEN регистра SPMCR, тогда после этой строки необходимо добавить еще одно циклическое условие: while (SPMCR &(1<<SPMEN));// Завершение записи во Flash память Теперь разберем функцию чтения: unsigned char EEPROM_write (unsigned int uiAddress) Здесь все почти также, только в функцию передается адресс переменной, инициализируем его и разрешаем чтение по этому адрессу. Возвращаем данные. Но прежде, чем использовать алгоритм записи или чтения EEPROM, необходимо объявить переменную, которая будет распределена в пределах области EEPROM. Для этого в библиотеке eeprom.h программной среды WinAVR определен специальный атрибут EEMEM. Например объявим переменную безнакового целочисленого типа с атрибутом. EEMEM uint8_t eeprom_х ; // объявим переменную. #ifndef EEMEM Для работы с данными в библиотеке уже прописаны функции: Ну что ж все это пережевав на последок программный пример в целом. Передадим в EEPROM данные и считаем. #include <eeprom.h> uint8_t EEMEM eepro_х; /* такая переменная должна быть всегда глобальной и служит для передачи своего адресса в область EEPROM*/ main () Ниже на рисунке представлен результат:
На этом пока все. Здесь дан краткий обзор для работы с такой памятью. Конечно есть куча ньюансов, но это уже тонокости. В следующей статье расмотрим ШИМ (широтно-имульсную модуляцию) и плавно перейдем к следующиму проекту попробуем сконструировать «мозги» для любительского станка ЧПУ. Всем пока. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|