Avr урок 15
Я думаю, може не всі, але дуже багато хто знає, що в контролерах AVR крім основної оперативної пам'яті, а також пам'яті для зберігання прошивки існує ще й незалежна пам'ять типу EEPROM. Дана пам'ять зроблена за технологією електричного стирання інформації, що на відміну від її попередника EPROM, в якому стирання вироблялося тільки за допомогою ультрафіолетових променів, дозволило використовувати даний тип пам'яті практично повсюдно. Як ми знаємо, ще існує незалежна пам'ять типу Flesh, яка коштує набагато дешевше, але у якої також є істотний мінус. Там неможливо стерти окремий байт, стирання проводиться тільки блоками, що не зовсім зручно в деяких випадках, особливо коли інформації потрібно зберігати трохи, і інформація дана являє собою невеликі параметри настройки. Тому нам варто також зупинитися на даному типі пам'яті. І причому не тільки через те, що він присутній в контролері, а через те, що це дуже зручно для зберігання деяких величин, які потрібні нам будуть навіть після того, як контролер втратив харчування.
Так як ми працюємо з контролером Atmega8A, технічну документацію даного МК ми і відкриємо і побачимо там, що за все такий пам'яті у нас 512 байт. Це, проте, не так мало. Якщо ми, наприклад будемо який-небудь будильник програмувати, щоб дані установки не загубилися після відключення живлення, ми цілком можемо з вами звернутися до даної пам'яті. Також в документації написано, що дана пам'ять гарантовано переживе 100000 циклів запису / зчитування.
Тепер напрошується питання. Як же організований процес роботи з даної пам'яттю в мікроконтролері AVR. Як завжди, компанія Atmel про це подбала і організувала цей процес на апаратному рівні, що дуже радує тому, що нам постійно доводиться берегти ресурси контролера. Для управління даними апаратним рівнем існують певні регістри.
Наступний - регістр даних EADR
Ну і як водиться, практично жодна периферія і технологія, організована на апаратному рівні, не обходиться без керуючого регістра. У нас керуючим регістром є регістр EECR
Давайте відразу трохи познайомимося з битами даного регістра.
Біт EERE - біт, що змушує почати процес читання з пам'яті EEPROM. І, як тільки дані вважалися і записалися в реєстр даних, цей біт скинеться. Тому ми можемо вважати даннй біт не тільки керуючим, а й статусним або бітом стану.
Біт EEMWE - біт, що дозволяє (не починати) процес запису.
Біт EERIE - біт, що дозволяє переривання.
Ну, тепер перейдемо до проекту. Проект був створений звичайним стандартним чином і названий Test13. Також був підключений файл main.h і створені файли eeprom.h і eeprom.c.
Ось вихідний код створених файлів
void EEPROM_write (unsigned int uiAddress. unsigned char ucData)
while (EECR (1< EEDR = ucData; // Піщем дані в регістр EECR | = (1< EECR | = (1< unsigned char EEPROM_read (unsigned int uiAddress) <> // чекаємо звільнення прапора закінчення останньої операцією з пам'яттю EECR | = (1< return EEDR; // Повертаємо результат Напишемо прототипи на дані функції в файлі eeprom.h void EEPROM_write (unsigned int uiAddress. unsigned char ucData); unsigned char EEPROM_read (unsigned int uiAddress); Використовуємо ми в якості дослідів ту ж саму отладочную плату, взагалі нічого до неї не підключаючи Зберемо проект і перейдемо в програму для прошивки Avrdude. Виберемо там наш файл прошивки, потім спробуємо вважати контролер, потім все зітремо по кнопці "стерти все" Ви можете писати будь-який шлях, аби тільки зазначений в ньому зліва носій з такою буквою існував і був доступний для запису. Також папку краще створити теж заздалегідь. Знайдемо тепер на диску даний файл і відкриємо його в блокноті



Закриваємо файл, намагаємося прошити контролер, потім знову Новомосковськ пам'ять EEPROM в файл і відкриємо файл
Ми бачимо, що в файл записалося число "78", що і означає 120 в десятковому форматі.
Тепер спробуємо натиснути кнопку "Стерти все", в цьому випадку пам'ять EEPROM стетеься не повинна.
Читаємо знову EEPROM в файл, відкриваємо файл і бачимо, що пам'ять стерлася, у нас знову всюди "FF".
Чому так сталося? Тому що потрібно налаштувати фьюз. Новомосковський фьюз

Звернемо увагу на біт EESAVE. Коли даний біт в одиниці (як у нас і є, біти ж з інверсією), то ми змушуємо при відключенні харчування, а також при стирання стирати пам'ять EEPROM. А щоб такого не відбувалося, даний біт потрібно скинути, тобто поставити в нього галку і прошити фьюз.
Прошиваємо фьюз, стираємо контролер, прошиває контролер, знову стираємо, Новомосковський пам'ять EEPROM в файл і відкриваємо його. Тепер ми бачимо, що нічого у нас не стерлося
Тепер спробуємо відключити контролер від харчування і подати через деякий час харчування знову. Знову Новомосковськ EEPROM в файл, у нас все ціле. Відмінно!
В наступній частині уроку ми спробуємо програмно прочитати дані з пам'яті EEPROM.
Купити програматор можна тут (продавець надійний) USBASP USBISP 2.0
