Бібліотека EEPROM

У мікроконтролері Ардуїно є EEPROM - пам'ять, у якій інформація зберігається навіть після вимкнення пристрою (подібно до маленького жорсткого диска). Ця бібліотека дозволяє записувати та зчитувати інформацію з цієї пам'яті.

Об'єм пам'яті EEPROM різних мікроконтролерів, що входять до складу Ардуїно, може відрізнятися: 1024 байта в ATmega328, 512 байт - в ATmega168 та ATmega8, 4 КБ (4096 байт) - в ATmega1280 та ATmega2560.

Мікроконтролери ATmega мають на борту енергонезалежну пам'ять EEPROM, яка не втратить записані в неї дані навіть після вимкнення живлення. 512 байтів такої пам'яті несуть ATmega8 і ATmega168, 1024 байта - ATmega328, 4096 байтів - Arduino Mega. Пам'ять типу EEPROM допускає кілька десятків тисяч циклів запису та стирання даних. Вона може стати в нагоді для збереження змінних налаштувань при відключенні живлення від пристроїв Arduino. Для роботи з цією пам'яттю у складі Arduino IDE є зручна бібліотека EEPROM.

Функції бібліотек EEPROM

Бібліотека EEPROM містить дві функції: читання та запис у пам'ять даних.

Функція читання EEPROM.read

Функція EEPROM.read зчитує байт із енергонезалежної пам'яті EEPROM. Якщо байт раніше ніколи не перезаписувався — поверне значення 255.

Синтаксис функції EEPROM.read: EEPROM.read(address)

Параметр: address - порядковий номер осередку пам'яті для читання від 0 до 512 (або 1024) (int);

Значення, що повертається - байт, що зберігається в комірці пам'яті.

Приклад зчитування значення всіх байтів енергонезалежної пам'яті EEPROM і виведення в COM-порт представлений у прикладі.

byte value; void setup()

Serial.print(address); Serial.print("\t"); Serial.print(value, DEC); Serial.println();

// встановлюємо наступну комірку пам'яті address= address + 1;

// EEPROM містить лише 512(1024) байт

address = 0; delay(500);

Функція запису EEPROM.write

Функція EEPROM.write записує байт в незалежну пам'ять.

Синтаксис функції EEPROM.write:

address - порядковий номер осередку пам'яті для запису - від 0 до 511 (int);

value – байт для запису – від 0 до 255 (byte). Значення, що повертається, немає.

Можлива кількість циклів перезапису даних (Write/Erase Cycles) у пам'яті обмежена 100 тис. разів – це слід враховувати під час використання даної пам'яті. Час, необхідний завершення циклу запису, становить 3,3 ms. Ця затримка вже враховується бібліотекою EEPROM.

Приклад збереження в незалежній пам'яті EEPROM значень, лічених з аналогового входу analog input 0, представлений у лістингу 8.2. Дані значення залишаться в пам'яті та після відключення живлення від плати та в майбутньому можуть бути доступні для іншого скетчу.

"GECgabCaCg DGECabCDED EFEDGEDC CECaCag gCEDgCEDEFGECDgC ">;

// пробіл - це пауза

// Тривалість кожної ноти і паузи

int addr1 = 0; int addr2 = 10;

void write_melody(int num)

EEPROM.write(addr1, addr2); // покажчик на мелодію EEPROM.write(addr2,tempo[num]>>8); // для tempo – 2 байти addr2++;

// Підключити динамік до pin 8 int speakerPin = 8;

// підключити кнопку до pin 9 int buttonPin = 9;

// темп відтворення, ноти, тривалості int tempo, notes, beats;

int rand1; int count = 0;

void playNote(char note, int duration)

// масив для найменувань нот (до ремі . і т. д. в межах двох октав) char names [] = < 'c', 'd', 'e', ​​'f', 'g', 'a', 'b',

1432, 1276, 1136, 1014;

// програти тон, що відповідає нотідля (int i = 0; i 0)

notes=EEPROM.read(addr1); addr1++; beats=EEPROM.read(addr1); addr1++;

tone(speakerPin,0, beats*tempo*1000L); // пауза else