ATmega16: EEPROM
- Piroman17
- Грызет канифоль
- Сообщения: 296
- Зарегистрирован: Пт янв 12, 2007 17:16:35
- Откуда: Дубна
- Контактная информация:
ATmega16: EEPROM
Насколько я понимаю EEPROM не очищается после отключения питания, как в него что-то записать? (Юзаю компилятор CVAVR).
"Всё новое - хорошо забытое старое" - для творцов без творческий мысли.
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Правильно понимаете..
Вот в догонку библиотека для пользования ЕЕПРОМа Атмеловских камней
(писал сам и давно, так что сильно не пинайте, но на всех моих процессорах работает, от AT90S2313 до ATMega128)
Желательно не использовать первую ячейку ЕЕПРОМа, а то бывает, что при проблемах с питанием она слетает (в смысле, содержимое портится).
Вот в догонку библиотека для пользования ЕЕПРОМа Атмеловских камней
(писал сам и давно, так что сильно не пинайте, но на всех моих процессорах работает, от AT90S2313 до ATMega128)
Желательно не использовать первую ячейку ЕЕПРОМа, а то бывает, что при проблемах с питанием она слетает (в смысле, содержимое портится).
- Вложения
-
- avr_eeprom.rar
- (555 байт) 679 скачиваний
Оптимизм х (Опыт + Знания) = const
Re: ATmega16: EEPROM
Piroman17 писал(а):Насколько я понимаю EEPROM не очищается после отключения питания, как в него что-то записать? (Юзаю компилятор CVAVR).
В точном соответствии с примером в CVAVR и с примером кода в даташите (чтоб использовать Си код из даташита в CVAVR нужен мой заголовочный файл m8_128.h - так как в CVAVR не прописаны биты регистров.
Aheir писал(а):Желательно не использовать первую ячейку ЕЕПРОМа
И помнить что счет ячеек начинается с НУЛЯ.
- dx40
- Нашел транзистор. Понюхал.
- Сообщения: 182
- Зарегистрирован: Вт июл 11, 2006 12:39:16
- Откуда: Москва
- Контактная информация:
Люди, какая библиотека???
Это же CVAVR - все делает сам.
Просто объявляешь глобальную переменную (сразу после инклюдов), например так:
eeprom int a,b;
и пользуешься ими как обычными переменными. Но надо помнить, что обращение к ним занимает много времени и требует много программной памяти.
И еще при использовании EEPROM надо обязательно включать BOD (фьюзами) иначе после первого же выключения питания данные попортятся.
Это же CVAVR - все делает сам.
Просто объявляешь глобальную переменную (сразу после инклюдов), например так:
eeprom int a,b;
и пользуешься ими как обычными переменными. Но надо помнить, что обращение к ним занимает много времени и требует много программной памяти.
И еще при использовании EEPROM надо обязательно включать BOD (фьюзами) иначе после первого же выключения питания данные попортятся.
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Фьюз BODEN ставим в 0, т.е. активируем.
А как считать в эту переменную данные из ЕЕПРОМ при повторном включении устройства?
dx40 писал(а):объявляешь глобальную переменную (сразу после инклюдов), например так:
eeprom int a,b;
и пользуешься ими как обычными переменными
А как считать в эту переменную данные из ЕЕПРОМ при повторном включении устройства?
Оптимизм х (Опыт + Знания) = const
Aheir писал(а):Т.е. объявлять их надо
eeprom unsigned char a, b;
если я напишу объявление
eeprom unsigned char a = 0;
то мне в ЕЕПРОМ сразу 0 пропишется?
Странно всё это. У меня написано примерно так:
eeprom int X = 123;
в процессе выполнения программы я иногда туда что-нить пишу, чтобы потом при запуске или перезагрузке оно считывалось в прежнем виде.
Но после выключения/включения питания в X содержится совсем не то, что писалось в процессе работы программы. Такое ощущение, что там содержится 123, (пока точно не проверял) т.е. то, что записано в компиляторе в качестве инициализации. Может такое быть?
P.S. контроллер atmega128, компилятор cvavr
dx40 писал(а):BOD включен?
Вот не помню. по-мойму включал. но точно не скажу.
я просто и хотел узнать может ли быть так что компилятор при включении инициализирует ячейки eeprom если для них прописаны значения при объявлении?
их конечно можно не прописывать, но тогда компилятор ворчит что есть неинициализированные eeprom.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Какой еще компилятор при включении?! Откуда? Компилятор сгенерировал код, который потом зашили в память - и все, компилятор отдыхает. Или как всегда все делается в эмуляторах?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
ИМХО ОЧЕВИДНО что он спросил:
Компилятор создает код который иницирует EEPROM при включении МК ?
Компилятор создает код который иницирует EEPROM при включении МК ?
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
МНЕ НЕ ОЧЕВИДНО.
Чтобы было очевидно, надо использовать ассемблер. Для меня логично было бы, если компилятор для переменных в eeprom формировал бы просто hex-файл для начальной прошивки... То есть аналогично ассемблеру:
А то, что именно он там творит - это на совести реализаций Си, сие мне неведомо
Чтобы было очевидно, надо использовать ассемблер. Для меня логично было бы, если компилятор для переменных в eeprom формировал бы просто hex-файл для начальной прошивки... То есть аналогично ассемблеру:
Код: Выделить всё
.eeseg
var: .byte 123
А то, что именно он там творит - это на совести реализаций Си, сие мне неведомо
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Я ж про ВОПРОС писал. А не про то что реально делает компилятор.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
не ругайтесь господа коты
Я хотел сказать то, что понял товарищ tych.
Я немного в курсе, что компилятор сгенерил код и отдыхает
Вчера проверил - BOD отключен
. Включать пока не пробовал. Но после включения питания в этой ячейке EEPROM лежит приблизительно одно и тоже число. (почему приблизительно, потому как точное значение на ЖК экранчик я не вывожу, а вывожу только результат обработки этого значения некоей функцией с округлением до целого. Результат совпадает).
Если бы можно было повторить эту ситуацию в симуляторе - но ведь нет. в симуляторе EEPROM не сохраняется между симуляциями.
Приходится шить контроллер. В общем - попробую сегодня включить BOD. если не поможет убиру начальные значения. В общем отпишусь.
Я хотел сказать то, что понял товарищ tych.
Я немного в курсе, что компилятор сгенерил код и отдыхает
Вчера проверил - BOD отключен
Если бы можно было повторить эту ситуацию в симуляторе - но ведь нет. в симуляторе EEPROM не сохраняется между симуляциями.
Приходится шить контроллер. В общем - попробую сегодня включить BOD. если не поможет убиру начальные значения. В общем отпишусь.