Вопрос по EEPROM

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Встал на лапы
Аватара пользователя
Сообщения: 99
Зарегистрирован: Сб ноя 29, 2008 19:34:25
Откуда: Нальчик

Сообщение 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
Вложения
g.c
(3.39 КБ) 395 скачиваний
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

По первому вопросу нечего сказать не могу!
Вот так у тебя записывает по каждому кругу цикла:
While (1)
{
peremennaya=a;
}
Вот так записывает по каждому кругу цикла и при нажатие кнопки:
While (1)
{
peremennaya=a;
if (PIND.1==1) a++;
}
Вот так только при нажатие кнопки:
While (1)
{
if (PIND.1==1) a++;
}
Для чего вы хотите поставить задержку?
А как вы записываете и читаете EPROM?
Реклама
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение 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)
Я не Сашок!!!
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

Если честно то я не совсем понял такой большёй код.
Это что получается что в EEPROM пишет в том случаи если все пять кнопок нажаты и совпадает переменна eep?

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

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

}

      };
А вот так нельзя?
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Что здесь не понятного. Я проверяю состояние кнопок (всех 5) и если они отжаты то проверяю значение переменной. Ну а там уже или сохраняем или не сохраняем. Я просто привел пример как я это делаю и меня всё в нем устраивает.
Я не Сашок!!!
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 99
Зарегистрирован: Сб ноя 29, 2008 19:34:25
Откуда: Нальчик

Сообщение Tigra »

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

eeprom unsigned char ee;

а потом просто прибавляю к "ее" другую переменную с нужным значением .
А всёже как разобраться с вонингом?
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

У меня ваш код работает без проблем!
Вы какой версией компилятора пользуетесь?
Встал на лапы
Аватара пользователя
Сообщения: 99
Зарегистрирован: Сб ноя 29, 2008 19:34:25
Откуда: Нальчик

Сообщение Tigra »

Sounds писал(а):Вы какой версией компилятора пользуетесь?
CVavr 1.25.3
Прорезались зубы
Аватара пользователя
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

Попробуйте поставить версию 2.03.4.
Мне кажется в этом вся проблема!
Если не найдёте где скачать пишите в лс, я вам скину.
Прорезались зубы
Аватара пользователя
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

Решили проблему?
Если решили то расскажите как!
Встал на лапы
Аватара пользователя
Сообщения: 99
Зарегистрирован: Сб ноя 29, 2008 19:34:25
Откуда: Нальчик

Сообщение Tigra »

моросит интернет . четвёртый раз обрывается закачка почти в конце :cry:
сегодня уже наверно не скачаю . :?

попробую завтра после работы, результат обязательно напишу.
Встал на лапы
Аватара пользователя
Сообщения: 99
Зарегистрирован: Сб ноя 29, 2008 19:34:25
Откуда: Нальчик

Сообщение Tigra »

После установки CV 2.03.4 всё заработало без ошибок и предупреждений !
Огромное спасибо Sounds за помощ и ссылку :)))
Встал на лапы
Аватара пользователя
Сообщения: 99
Зарегистрирован: Сб ноя 29, 2008 19:34:25
Откуда: Нальчик

Сообщение Tigra »

У меня снова появился вопрос по EEPROM

Кто знает как сделать на си чтобы каждый раз переменная записывалась в следущей ячейке памяти,а после заполнения память стиралась и цикл повторялся? Это мне нужно для увеличения числа циклов перезаписи которых 10 000.
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

Tigra писал(а):У меня снова появился вопрос по EEPROM

Кто знает как сделать на си чтобы каждый раз переменная записывалась в следущей ячейке памяти,а после заполнения память стиралась и цикл повторялся? Это мне нужно для увеличения числа циклов перезаписи которых 10 000.
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

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

Вернуться в «Микроконтроллеры и ПЛИС»