Страница 1 из 1

Вопрос по EEPROM

Добавлено: Чт мар 05, 2009 18:13:46
Tigra
Привет всем, кто разбирается в программировании AVR и тем ,кто помогает им в этом !!!
Наконец я добрался до EEPROM и у меня возникло несколько вопросов.

1 На макетке я собрал тини2313+клавиатура+7 сегмент индикатр. Кнопки + и - изменяют переменную которая выводится на
7 сегмент индикатр. Кнопка запись- записывает значение переменной в память EEPROM.Соответственно после выключения и включ питания переменная не обнуляется. Всё заработало как задумано, но при компиляции CVavr выкинул вонинг '' uninitialized EEPROM '' .Что нужно добавить в коде , чтобы изчезло предупреждение?

2 Как известно число циклов записи в EEPROM ограничено. Скажите если разместить переменную EEPROM в теле
While (1)
{
peremennaya=a;
if (!PIND==127) a++;
}
то перезаписываться она будет только после нажатия кнопок порта D(с изменением переменной "а") или с каждым тактом контроллера.И нужно-ли после строки peremennaya=a; ставить задержку delay?

вот код пробного проэкта с записью в EEPROM

Добавлено: Чт мар 05, 2009 23:01:58
Sounds
По первому вопросу нечего сказать не могу!
Вот так у тебя записывает по каждому кругу цикла:
While (1)
{
peremennaya=a;
}
Вот так записывает по каждому кругу цикла и при нажатие кнопки:
While (1)
{
peremennaya=a;
if (PIND.1==1) a++;
}
Вот так только при нажатие кнопки:
While (1)
{
if (PIND.1==1) a++;
}
Для чего вы хотите поставить задержку?
А как вы записываете и читаете EPROM?

Добавлено: Чт мар 05, 2009 23:22:38
sachok
Я например по другому сохраняю. У меня есть 5 кнопок. Вот как єто делаю:

Код: Выделить всё

if (PINA.7==1)
              {
                    if (PINA.6==1)
                    {
                        if (PINA.5==1)
                        {
                            if (PINA.4==1)
                            {
                                if (PINA.3==1)
                                {
                                    if (eep==0)
                                    {
                                    max_1=max1;
                                    max_2=max2;
                                    max_3=max3;
                                    eep=1;
                                    }
                                }
                            }
                        }
                    }
                } 

Если все кнопки отжаты, если переменная eep равна 0 то сохраняем. А в проге там где нажимаются кнопки написано, например:

Код: Выделить всё

if (PINA.6==0)
                {
                key=key-1;
                eep=0;                   
                }
То есть после каждого нажатия переменная eep обнуляется и сохраняются данные в eeprom. После сохранения к ней додается 1 и уже не происходит больше сохранение поскольку у нас

Код: Выделить всё

if (eep==0)

Добавлено: Пт мар 06, 2009 00:02:38
Sounds
Если честно то я не совсем понял такой большёй код.
Это что получается что в EEPROM пишет в том случаи если все пять кнопок нажаты и совпадает переменна eep?

Код: Выделить всё

while (1)
      {
if(PINA.1==1 or eep==0){

}

      };
А вот так нельзя?

Добавлено: Пт мар 06, 2009 14:11:23
sachok
Что здесь не понятного. Я проверяю состояние кнопок (всех 5) и если они отжаты то проверяю значение переменной. Ну а там уже или сохраняем или не сохраняем. Я просто привел пример как я это делаю и меня всё в нем устраивает.

Добавлено: Пт мар 06, 2009 16:46:23
Tigra
Sounds писал(а): Для чего вы хотите поставить задержку?
А как вы записываете и читаете EPROM?
Задержку для 100% записи в еепром ( хотя сейчас понимаю что это глупость)
А записываю я так:
в начале программы я пишу

eeprom unsigned char ee;

а потом просто прибавляю к "ее" другую переменную с нужным значением .
А всёже как разобраться с вонингом?

Добавлено: Пт мар 06, 2009 17:44:33
Sounds
У меня ваш код работает без проблем!
Вы какой версией компилятора пользуетесь?

Добавлено: Пт мар 06, 2009 17:46:42
Tigra
Sounds писал(а):Вы какой версией компилятора пользуетесь?
CVavr 1.25.3

Добавлено: Пт мар 06, 2009 17:52:20
Sounds
Попробуйте поставить версию 2.03.4.
Мне кажется в этом вся проблема!
Если не найдёте где скачать пишите в лс, я вам скину.

Добавлено: Пт мар 06, 2009 20:50:00
Sounds
Решили проблему?
Если решили то расскажите как!

Добавлено: Сб мар 07, 2009 00:37:33
Tigra
моросит интернет . четвёртый раз обрывается закачка почти в конце :cry:
сегодня уже наверно не скачаю . :?

попробую завтра после работы, результат обязательно напишу.

Добавлено: Сб мар 07, 2009 17:14:42
Tigra
После установки CV 2.03.4 всё заработало без ошибок и предупреждений !
Огромное спасибо Sounds за помощ и ссылку :)))

Добавлено: Пт мар 20, 2009 11:57:26
Tigra
У меня снова появился вопрос по EEPROM

Кто знает как сделать на си чтобы каждый раз переменная записывалась в следущей ячейке памяти,а после заполнения память стиралась и цикл повторялся? Это мне нужно для увеличения числа циклов перезаписи которых 10 000.

Добавлено: Пт мар 20, 2009 15:51:15
Alexeus
Tigra писал(а):У меня снова появился вопрос по EEPROM

Кто знает как сделать на си чтобы каждый раз переменная записывалась в следущей ячейке памяти,а после заполнения память стиралась и цикл повторялся? Это мне нужно для увеличения числа циклов перезаписи которых 10 000.

Добавлено: Пт мар 20, 2009 15:55:52
Alexeus
В идеале циклов перезаписи заявлено 100 000, если вы про AVR.
если вы научились делать запись в одну ячейку, то ничего сложного :) просто поставьте инкременирование адреса (++) после переменной ЕЕПРОМ. типа *eepr++