Як зберігати дані в Arduino

У плат сімейства Arduino є кілька видів пам’яті. По-перше, це статичне ОЗП (оперативний запам’ятовуючий пристрій), яке використовується для збереження змінних у процесі виконання програми. По-друге, це флеш-пам’ять, у якій зберігаються написані вами скетчі. І по-третє, це EEPROM, яку можна використовувати для постійного зберігання інформації. Перший тип пам’яті — энергозависимый, він втрачає всю інформацію після перезавантаження Arduino. Другі два типи пам’яті зберігають інформацію, поки вона не буде перезаписано новою, навіть після відключення живлення. Останній тип пам’яті EEPROM — дозволяє записувати дані, зберігати їх і зчитувати при необхідності. Цю пам’ять ми і розглянемо зараз.

Хранение данных в EEPROM Arduino

Вам знадобиться

  • — Arduino;
  • — комп’ютер.

Інструкція

1. EEPROM означає Electrically Erasable Programmable Read-Only Memory, тобто електрично зтирається який можна перепрограмувати постійне запам’ятовуючий пристрій. Дані в цій пам’яті можуть зберігатися десятки років після відключення живлення. Кількість циклів перезапису — порядку декількох мільйонів разів. Кількість EEPROM пам’яті Arduino досить обмежена: для плат, заснованих на мікроконтролері ATmega328 (наприклад, Arduino UNO і Nano), кількість пам’яті становить 1 кБ, для плат на ATmega168 і ATmega8 — 512 байт, на ATmega2560 і ATmega1280 — 4 кБ.

2. Для роботи з EEPROM для Arduino написана спеціальна бібліотека, яка входить в Arduino IDE за замовчуванням. Бібліотека містить наступні можливості.read(address) — зчитує 1 байт з EEPROM; address — адреса, звідки зчитуються дані (комірка, починаючи з 0);write(address, value) — записує в пам’ять значення value (1 байт, число від 0 до 255) за адресою address;update(address, value) — замінює значення value за адресою address, якщо її старе вміст відрізняється від нового;get address, data) — зчитує дані data зазначеного типу з пам’яті за адресою address;put(address, data) — записує дані data зазначеного типу в пам’ять за адресою address;EEPROM[address] — дозволяє використовувати ідентифікатор «EEPROM» як масив, щоб записувати дані в пам’ять і зчитувати їх з пам’яті.Щоб задіяти бібліотеку у скетчі, підключаємо її директивою #include EEPROM.h.

3. Давайте запишемо в пам’ять EEPROM два цілих числа, а потім прочитаємо їх з EEPROM і виведемо в послідовний порт.З числами від 0 до 255 проблем немає, вони займають 1 байт пам’яті і за допомогою функції EEPROM.write() записуються в потрібну комірку.Якщо число більше, ніж 255, то за допомогою операторів highByte() і lowByte() його потрібно ділити на байти і записувати кожен байт у свою комірку. Максимальне число при цьому — 65536 (або 2^16). Дивіться, монітор послідовного порту в клітинку 0 просто виводить число, менше, ніж 255. У клітинках 1 і 2 зберігається велика кількість 789. Клітинка 1 зберігає множник переповнення 3, а клітинка 2 — відсутнє число 21 (тобто 789 = 3*256 + 21). Щоб наново зібрати велике число, розібране на байти, є функція word(): int val = word(hi, low), де hi і low — це значення старшого і молодшого байтів.У всіх інших клітинках, які не були нами жодного разу записані, зберігаються числа 255.

Запись целых чисел в EEPROM Arduino

4. Для запису чисел з плаваючою комою і рядків потрібно використовувати метод EEPROM.put(), а для читання EEPROM.get().У процедурі setup() спочатку запишемо число з плаваючою комою f. Потім зрушимо на кількість комірок пам’яті, що займає тип float, і запишемо рядок символів char ємністю 20 осередків.У процедурі loop() будемо зчитувати всі комірки пам’яті і намагатися розшифрувати їх спочатку як тип «float», а потім як тип «char», і виводити результат в послідовний порт.Видно, що значення в комірках з 0 по 3 правильно визначився як число з плаваючою точкою, а починаючи з 4-ої — як рядок.З’являються значення ovf (переповнення) і nan (не число) говорять про те, що число не може бути коректно перетворено в число з плаваючою точкою. Якщо ви точно знаєте, якого типу дані які комірки пам’яті займають, то у вас не буде виникати проблем.

Запись чисел с плавающей точкой и строк в EEPROM Arduino

5. Дуже зручна можливість — звертання до комірок пам’яті як до елементів масиву EEPROM. В даному скетчі у процедурі setup() ми спочатку запишемо дані в 4 перших байта, а в процедурі loop() щохвилини будемо зчитувати дані з усіх осередків і виводити їх у послідовний порт.

Обращение к ячейкам памяти EEPROM как к элементам массива

 

Related posts

 
 

Leave a Reply

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

http://poradumo.com.ua/166453-iak-zberigati-dani-v-arduino/