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);

Використовуємо ми в якості дослідів ту ж саму отладочную плату, взагалі нічого до неї не підключаючи

Avr урок 15

Зберемо проект і перейдемо в програму для прошивки Avrdude.

Виберемо там наш файл прошивки, потім спробуємо вважати контролер, потім все зітремо по кнопці "стерти все"

Avr урок 15

Avr урок 15

Ви можете писати будь-який шлях, аби тільки зазначений в ньому зліва носій з такою буквою існував і був доступний для запису. Також папку краще створити теж заздалегідь.

Знайдемо тепер на диску даний файл і відкриємо його в блокноті

Avr урок 15

Закриваємо файл, намагаємося прошити контролер, потім знову Новомосковськ пам'ять EEPROM в файл і відкриємо файл

Ми бачимо, що в файл записалося число "78", що і означає 120 в десятковому форматі.

Тепер спробуємо натиснути кнопку "Стерти все", в цьому випадку пам'ять EEPROM стетеься не повинна.

Читаємо знову EEPROM в файл, відкриваємо файл і бачимо, що пам'ять стерлася, у нас знову всюди "FF".

Чому так сталося? Тому що потрібно налаштувати фьюз. Новомосковський фьюз

Avr урок 15

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

Прошиваємо фьюз, стираємо контролер, прошиває контролер, знову стираємо, Новомосковський пам'ять EEPROM в файл і відкриваємо його. Тепер ми бачимо, що нічого у нас не стерлося

Тепер спробуємо відключити контролер від харчування і подати через деякий час харчування знову. Знову Новомосковськ EEPROM в файл, у нас все ціле. Відмінно!

В наступній частині уроку ми спробуємо програмно прочитати дані з пам'яті EEPROM.

Купити програматор можна тут (продавець надійний) USBASP USBISP 2.0

Avr урок 15