Использование энергонезависимой памяти EEPROM в микроконтроллере PIC16F877A


В данной статье мы рассмотрим процесс сохранения данных в энергонезависимую память EEPROM (Electrically (Electrical) Erasable Programmable Read-Only Memory – электрически стираемое программируемое постоянное запоминающее устройство), присутствующую в микроконтроллере PIC16F877A. Сохранение данных в этом виде памяти необходимо в случаях, когда мы хотим обеспечить их сохранность когда питание микроконтроллера будет отключено. На первый взгляд сохранение данных в память EEPROM может показаться достаточно трудоемким процессом, но с помощью компилятора XC8 данный процесс можно значительно упростить. Подробнее об использовании компилятора XC8 для программирования микроконтроллеров PIC можно прочитать в этой статье.

Внешний вид проекта использования памяти EEPROM в микроконтроллере PIC16F877A

В памяти EEPROM микроконтроллера PIC16F877A можно хранить лишь небольшие объемы данных. Когда вам необходимо сохранить большой объем данных (мегабайты и более) в энергонезависимом типе памяти, используйте для этой цели SD карту.

Для лучшего понимания материала данной статьи рекомендуем ознакомиться с проектами по подключению ЖК дисплея к микроконтроллеру PIC и использование в нем модуля АЦП (аналого-цифрового преобразования) поскольку работа с данными элементами будет использоваться в настоящей статье.

Энергонезависимая память EEPROM в микроконтроллере PIC16F877A

Как следует из ее названия память EEPROM представляет собой электрически стираемое программируемое постоянное запоминающее устройство. Данные в данной памяти не уничтожаются после отключения питания микроконтроллера – их можно стереть только соответствующими инструкциями в программе. Объем имеющейся памяти EEPROM зависит от модели микроконтроллера. Как следует из даташита на микроконтроллер PIC16F877A объем памяти EEPROM составляет в нем 256 байт.

Схема проекта

Схема для демонстрации возможностей использования памяти EEPROM в микроконтроллере PIC16F877A представлена на следующем рисунке.

Схема для демонстрации возможностей использования памяти EEPROM в микроконтроллере PIC16F877AЖК дисплей используется для отображения необходимых данных. Потенциометр подключен к контакту AN4 микроконтроллера PIC16F877A – считываемое с него значение мы и будем сохранять в памяти EEPROM. Также в проекте мы подключили кнопку к контакту RB0 микроконтроллера – при ее нажатии данные с выхода АЦП контакта AN4 будут записываться в память EEPROM. Схему можно собрать на перфорированной или макетной плате.

Соединения микроконтроллера PIC16F877A в данной схеме приведены в следующей таблице.

№ п/п № контакта микроконтроллера Наименование контакта микроконтроллера Куда подключен
1 21 RD2 RS of LCD
2 22 RD3 E of LCD
3 27 RD4 D4 of LCD
4 28 RD5 D5 of LCD
5 29 RD6 D6 of LCD
6 30 RD7 D7 of LCD
7 33 RBO/INT кнопка
8 7 AN4 потенциометр

Как видите, соединений сравнительно немного.

Моделирование работы проекта

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

Внешний вид смоделированной в симуляторе Proteus схемы проекта

Во время моделирования работы схемы в симуляторе Proteus вы можете выводить на экран ЖК дисплея измеренное в текущий момент значение с выхода АЦП и хранящееся в памяти EEPROM значение АЦП. Чтобы сохранить текущее значение АЦП в памяти EEPROM нажмите кнопку, подключенную к контакту RB0 микроконтроллера.

Объяснение программы для микроконтроллера PIC

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. В коде нашей программы мы будем считывать значения с модуля АЦП микроконтроллера PIC и при нажатии кнопки сохранять их в память EEPROM микроконтроллера.

В даташите на микроконтроллер PIC16F877A написана следующая фраза: “These devices have 4 or 8K words of program Flash, with an address range from 0000h to 1FFFh for the PIC16F877A”. Это означает что память EEPROM в нашем микроконтроллере занимает адреса с 0000h до 1FFFh. Мы можем непосредственно обратиться к любому из этих адресов. Для сохранения данных по определенному адресу памяти EEPROM используйте следующую команду:

В этой команде “adc” обозначает переменную целого типа, значение которой нужно сохранить в памяти. А “0” – это адрес в памяти EEPROM, по которому необходимо сохранить значение этой переменной. Синтаксис этой команды “eeprom_write” поддерживается нашим компилятором XC8, поэтому при ее выполнении регистры микроконтроллера автоматически будут сконфигурированы необходимым образом.

Для извлечения данных из памяти EEPROM и их записи в необходимую переменную можно использовать следующую команду:

В результате выполнения данной команды считанное из памяти EEPROM значение будет сохранено в переменной “Sadc”. А “0” в этой команде обозначает адрес памяти EEPROM, с которого мы будем считывать данные. Синтаксис команды “eeprom_read” также обеспечивается нашим компилятором XC8, поэтому при ее выполнении регистры микроконтроллера автоматически будут сконфигурированы необходимым образом. Данные в памяти EEPROM хранятся в шестнадцатеричном формате, поэтому после считывания мы конвертируем их в целый тип данных добавляя префикс (int) перед командой.

Тестирование работы проекта

После сборки схемы проекта и загрузки программы в микроконтроллер вы можете приступить к тестированию работы проекта. Если все работает должным образом, на экране ЖК дисплея вы должны увидеть считываемые значения АЦП. Для сохранения текущего значения с АЦП в память EEPROM нажмите кнопку. Проверить, действительно ли ваше значение сохранилось в память EEPROM, можно, отключив питание схемы и затем снова ее включив. При повторном подаче питания на схему вы должны увидеть сохраненное ранее в памяти значение на экране ЖК дисплея.

Тестирование работы проекта

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
913 просмотров

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

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