- EEPROM в PIC16F877A:
- Принципиальная схема и пояснения:
- Моделирование использования PIC EEPROM:
- Программирование PIC для EEPROM:
- За работой:
В этом руководстве мы узнаем, насколько легко сохранить данные с помощью EEPROM, присутствующего в микроконтроллере PIC16F877A. В большинстве проектов в реальном времени нам может потребоваться сохранить некоторые данные, которые не должны стираться даже при выключении питания. Это может показаться сложным процессом, но с помощью XC8 Compiler эту задачу можно решить, просто используя одну строку кода. Если объем данных велик в мегабайтах, мы можем связать устройство хранения, такое как SD-карта, и хранить эти данные на них. Но мы можем избежать этого утомительного процесса, если данных мало, мы можем просто использовать EEPROM, присутствующий в микроконтроллере PIC, чтобы сохранить наши данные и получить их в любое время, когда мы захотим.
Это руководство по PIC EEPROM является частью серии руководств по микроконтроллерам PIC, в которых мы начали с самого базового уровня. Если вы не изучили предыдущие руководства, то было бы лучше взглянуть на них сейчас, потому что в этом руководстве предполагается, что вы знакомы с интерфейсами ЖК-дисплея с микроконтроллером PIC и использованием АЦП с микроконтроллером PIC.
EEPROM в PIC16F877A:
EEPROM расшифровывается как «Электронно стираемая и программируемая постоянная память». Как следует из названия, это память, присутствующая внутри микроконтроллера PIC, в которой мы можем записывать / читать данные, запрограммировав их для этого. Сохраненные в нем данные будут стерты только в том случае, если это будет указано в программе. Объем памяти, доступный в EEPROM, зависит от каждого микроконтроллера; детали будут представлены в Таблице данных, как обычно. В нашем случае для PIC16F877A доступное пространство составляет 256 байтов, как указано в его спецификации. Теперь давайте посмотрим, как мы можем использовать эти 256 байтов для чтения / записи данных с помощью простой экспериментальной установки.
Принципиальная схема и пояснения:
Принципиальная схема проекта показана выше. Мы подключили ЖК-дисплей для визуализации сохранения и извлечения данных. Обычный потенциометр подключен к аналоговому каналу AN4, поэтому подайте переменное напряжение, это переменное напряжение будет использоваться в качестве данных, которые будут сохранены в EEPROM. Мы также использовали кнопку на RB0, при нажатии этой кнопки данные из аналогового канала будут сохранены в EEPROM.
Это соединение может быть выполнено на макетной плате. В распиновки ПОС микроконтроллера показано в таблице ниже.
S.No: |
Пин код |
Имя контакта |
Соединен с |
1 |
21 год |
RD2 |
RS LCD |
2 |
22 |
RD3 |
E LCD |
3 |
27 |
RD4 |
D4 ЖК-дисплея |
4 |
28 |
RD5 |
D5 ЖК-дисплея |
5 |
29 |
RD6 |
D6 ЖК-дисплея |
6 |
30 |
RD7 |
D7 ЖК-дисплея |
7 |
33 |
RBO / INT |
Нажать кнопку |
8 |
7 |
AN4 |
Потенциометр |
Моделирование использования PIC EEPROM:
Этот проект также включает моделирование, разработанное с помощью Proteus, с помощью которого мы можем моделировать работу проекта без какого-либо оборудования. Программа для этого моделирования приведена в конце этого руководства. Вы можете просто использовать здесь шестнадцатеричный файл и смоделировать весь процесс.
Во время моделирования вы можете визуализировать текущее значение АЦП и данные, сохраненные в EEPROM, на ЖК-экране. Чтобы сохранить текущее значение АЦП в EEPROM, просто нажмите переключатель, подключенный к RB0, и оно будет сохранено. Снимок симуляции показан ниже.
Программирование PIC для EEPROM:
Полный код этого руководства приведен в конце этого руководства. В нашей программе мы должны прочитать значения из модуля ADC, и при нажатии кнопки мы должны сохранить это значение в нашей EEPROM. Поскольку мы уже узнали об интерфейсах АЦП и ЖК-дисплея, я дополнительно объясню код для сохранения и извлечения данных из EEPROM.
Согласно Datasheet, «эти устройства имеют 4 или 8K слов программы Flash с диапазоном адресов от 0000h до 1FFFh для PIC16F877A». Это означает, что каждое пространство хранения EEPROM имеет адрес, по которому к нему можно получить доступ, а в нашем MCU адрес начинается с 0000h до 1FFFh.
Чтобы сохранить данные внутри определенного адреса EEPROM, просто используйте строку ниже.
eeprom_write (0, adc);
Здесь «adc» - это переменная целочисленного типа, в которой присутствуют данные для сохранения. А «0» - это адрес EEPROM, в котором хранятся наши данные. Синтаксис «eeprom_write» предоставляется нашим компилятором XC8, поэтому компилятор автоматически позаботится о регистрах.
Чтобы извлечь данные, которые уже хранятся в EEPROM, и сохранить их в переменной, можно использовать следующую строку кода.
Sadc = (int) eeprom_read (0);
Здесь «Sadc» - это переменная, в которой будут сохранены данные из EEPROM. А «0» - это адрес EEPROM, из которого мы получаем данные. Синтаксис «eeprom_read» предоставляется нашим компилятором XC8, поэтому компилятор автоматически позаботится о регистрах. Данные, сохраненные в EEPROM, будут в шестнадцатеричном формате. Следовательно, мы преобразуем их в целочисленный тип, добавляя перед синтаксисом префикс (int).
За работой:
Как только мы поймем, как работает код, и подготовим оборудование, мы сможем протестировать код. Загрузите код в свой микроконтроллер PIC и включите установку. Если все работает, как ожидалось, вы должны увидеть текущие значения АЦП, отображаемые на ЖК-дисплее. Теперь вы можете нажать кнопку, чтобы сохранить значение АЦП в EEPROM. Теперь вы проверяете, сохранено ли значение, выключив всю систему и снова включив ее. При включении вы должны увидеть ранее сохраненное значение на ЖК-экране.
Полная работа этого проекта с использованием EEPROM микроконтроллера PIC показана на видео ниже. Надеюсь, вы поняли руководство и вам понравилось. Если у вас есть сомнения, вы можете написать их в разделе комментариев ниже или разместить на нашем форуме.