Четверг, 18.04.2024, 20:09
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Работаем с энергонезависимой памятью микроконтроллера EEPROM.

Как-то на форуме наш пользователь  sp-fly, задал вопрос  об использовании внутренний памяти EEPROM.

EEPROM — (англ. Electrically Erasable Programmable Read-Only Memory, электрически стираемое перепрограммируемое ПЗУ, ЭСППЗУ). Память такого типа может стираться и заполняться данными несколько десятков тысяч раз. Используется в твердотельных накопителях. Одной из разновидностей EEPROM является флеш-память (англ. Flash Memory).

В микроконтроллерах AVR, в разных разный размер EEPROMa.  Например в:

tinyAVR:  512 б;

megaAVR:  4  кб;

XMEGA AVR: 4 кб.

Компания Atmel гарантирует  100 000 циклов перезиписи ЕЕPROM, и 10 000 циклов перезаписи Flash памяти (пам'ять в которой храниться прошивка).

 

Принцып роботы нашего устройства, таков :  у нас в EEPROM’е будут храниться 2 переменных, первая  RUN будет отвечать за количиство запуска устройства, вторая СNT за показания счетчика. Программа будет работать только 20 включений, потом она не запуститься а выдает спецыальное сообщение, я думаю это будет полезно для создания собственны демо прошивок :)

В программе работа с переменной хрянящуюся в ЕЕPROM’е осуществляеться также как робота с простой переменной.

 

Давайте собирем  схему нашего устройства.

А вот и сам код программы:


#include <mega8.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <delay.h>

 eeprom int run=1;       // создание переменной run в EEPROM памяти МК //храниться число запусков устройства
 eeprom int cnt=0;       // создание переменной run в EEPROM памяти МК //храниться число счетчика

void main(void)
{
bit prg=0;       // переменная для работе с меню.


// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;

// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Counter V1.0");
delay_ms(2000);
lcd_clear();

if   (run>20) // если запусков > 20

       while (1)
       { lcd_putsf("Demo ver.");
        
       lcd_clear();
       }


       
else
{

run=run+1;          // прибавляем к переменной хранящейся в EEPROM единицу для потсчета количиства запуска устройства
while (1)
{
  lcd_clear();          // очистка ЛСД
  lcd_gotoxy(0,0);      // установка курсора на 0,0
if (PINC.1==1)         // Выбор режима показание счетчика (данные нажатия на кнопку и количиство запусков устройства/ инфо сайта)
{
prg++;                 // так как у нас всего 2 действия мы используем битовую переменную
delay_ms(250);         // задержка
}

if (prg==0)            // Data from the counter
{
lcd_putsf("Cnt=");
lcd_putchar(cnt/10+0x30);
lcd_putchar(cnt%10+0x30);
lcd_putsf(" ");
lcd_putsf("DevRun=");
lcd_putchar(run/10+0x30);
lcd_putchar(run%10+0x30);
}

if (prg==1)              // info
lcd_putsf("www.my-avr.at.ua");

if (PINC.0==1)   // кнопка ресет обнуляет число нажатий на кнопку но не счетчик включений
{
cnt=0;
delay_ms(250);
}

if (PINC.2==1)    // кнопка счетчика
{
cnt=cnt+1;            // прибавляем единицу к состоянию счетчика
delay_ms(200);    // задержка для избежания дребезга
}

if (cnt>99)      // если переменная счетчика > 99, то обнуляем счетчик.
cnt=0;


};
lcd_putsf("Limit run's- over");
}
}


Все файлы к статье в разделе "Файлы".

Категория: Учимся работать с AVR | Добавил: my-avr (18.07.2009)
Просмотров: 14116 | Комментарии: 6 | Теги: EEPROM | Рейтинг: 0.0/0 |
Всего комментариев: 5
5 Емеля  
0
Да, правописание хромает

3 Евгений  
0
eeprom int run=1; // создание переменной run в EEPROM памяти МК //храниться число запусков устройства
eeprom int cnt=0; // создание переменной run в EEPROM памяти МК //храниться число счетчика

этот участок программы запускаеться при каждом запуске мк, и при каждом старте будет присваивать переменной run 1, а переменной cnt 0, и счетчик ничего считать не будет. Или я чтото не так понял?


4 HiSER  
0
этот участок кода скажет компилятору что эти две переменные находятся в eeprom и создаст файл *.epp для прошивки в eeprom со значениями run=1, cnt=0.

1 usama  
1
Спасибо за статью!
Только не совсем понял, после 20 запусков переменная run обнулится, а при 21 запуске разве не сработает ли строка run=run+1; тогда все по новой начнется...

2 my-avr  
0
Да действительно была ошибка, уже исправил.
Спасибо за наблюдательность wink

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2024
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Какой МК вы используете?
Всего ответов: 3228
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz