Пам’ять eeprom (ППЗУ) в avr
Слід зазначити, що деякі виробники комбінують пам'ять типу EEPROM з SRAM. При припиненні подачі робочої напруги вміст пам'яті переноситься з SRAM в EEPROM, завдяки чому досягають короткого циклу записі не приводить до зносу.
У книзі Евстіфеева, довіднику по мікроконтролерів (літературу я приводив в статті №1), описані програмні приклади для запису / читання. Давайте розберемо програму:
Реалізація функції запису:
Розряди регістра управління EECR:
EERIE - дозвіл переривання від EEPROM;
EEMWE - управління дозволом запису в EEPROM;
EEWE - дозвіл запису в EEPROM;
EERE - дозвіл читання з EEPROM.
3. Завантажуємо байт даних в регістр даних EEDR.
4. EEMWE - управління розрядом дозволу записи в EEPROM. Цей прапор відповідає за функціонування розряду разррешенія записи EEWE. При установці в 1запісь дозволяється, якщо 0, то при установці EEWE в 1 запис в пам'ять не відбудеться. Після програмної установки EEMWE скидається через 4 машинних циклу.
5. Записуємо дані в пам'ять.
Тут є один нюанс. Якщо планується переодическая запис даних в EEPROM під час виконання програми, при самопрограмуванням мікроконтролера, то необхідно знати, що запис в EEPROM не може одночасно виконуватися із записом у Flash пам'ять. тому вище після першого пункту необхідно додати наступний пункт:
- дочекатися завершення запису в Flash-пам'ять прграмм, тобто чекати поки не сбпросіться прапор SPMEN регістра SPMCR, тоді після цього рядка необхідно додати ще одне циклічне умова:
while (SPMCR (1< Тепер розберемо функцію читання: Але перш, ніж використовувати алгоритм запису або читання EEPROM, необхідно оголосити змінну, яка буде розподілена в межах області EEPROM. Для цього в бібліотеці eeprom.h програмного середовища WinAVR визначений спеціальний атрибут EEMEM. Наприклад оголосимо змінну безнакового целочисленном типу з атрибутом. EEMEM uint8_t eeprom_х; // оголосимо змінну. #ifndef EEMEM Ну що ж все це пережувавши на останок програмний приклад в цілому. Передамо в EEPROM дані і вважаємо. #include Ніжена малюнку представлений результат На цьому поки все. Тут дано короткий огляд для роботи з такою пам'яттю. Звичайно є купа нюансів, але це вже тонкий. У наступній статті розглянемо ШІМ (широтно-імульсном модуляцію) і плавно перейдемо до следующіму проекту спробуємо сконструювати «мізки» для аматорського станка ЧПУ. Бувайте усі.
х -змінного;
uint8_t - цілочисельний безнаковий тип, мають точно зазначену розрядність, в даному випадку 8 біт і призначений для переносимості програм.
EEMEM - атрибут, що змушує змінну бути розподіленої в межах розділу .eeprom. Даний атрибут визначено в файлі eeprom.h і виглядає він у такий спосіб.
#define EEMEM__attribute__ ((section ( «.eeprom»)))
#endif
#include
#include
#include «lcd.h»
Вище представлений код взятий зі статті №4, в який вставлені вище наведені рядки.
Якщо в програмі спочатку передаються якісь константи для зберігання в пам'яті EEPROM, то при прошивці необхідно залити файл з розширенням .eep, який буде створений компілятоором і розміщений в тій же директорії що і робочі файли.