Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CodevisionAVR что-то с eeprom
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Павел_Б
Здравствуйте Уважаемые форумчане.
Нужна помощь, пишу программу в CodeVisionAVR.
Микроконтроллер atmega168
Задал некоторый буффер в память eeprom:
Код
eeprom char buffer[60];

В программе написал следующее:
Код
buffer[0]=0x00;buffer[1]=0x01;buffer[2]=0x02;buffer[3]=0x03;buffer[4]=0x04;buffer[5]=0x05;buffer[6]=0x06;buffer[7]=0x07;buffer[8]=0x08;buffer[9]=0x09;
buffer[10]=0;buffer[11]=0;buffer[12]=0;buffer[13]=0;buffer[14]=0;buffer[15]=0;buffer[16]=0;buffer[17]=0;buffer[18]=0;buffer[19]=0;
buffer[20]=0;buffer[21]=0;buffer[22]=0;buffer[23]=0;buffer[24]=0;buffer[25]=0;buffer[26]=0;buffer[27]=0;buffer[28]=0;buffer[29]=0;
buffer[30]=0;buffer[31]=0;buffer[32]=0;buffer[33]=0;buffer[34]=0;buffer[35]=0;buffer[36]=0;buffer[37]=0;buffer[38]=0;buffer[39]=0;
buffer[40]=0;buffer[41]=0;buffer[42]=0;buffer[43]=0;buffer[44]=0;buffer[45]=0;buffer[46]=0;buffer[47]=0;buffer[48]=0;buffer[49]=0;
buffer[50]=0x50;buffer[51]=0x51;buffer[52]=0x52;buffer[53]=0x53;buffer[54]=0x54;buffer[55]=0x55;buffer[56]=0x56;buffer[57]=0x57;buffer[58]=0x58;buffer[59]=0x59;

for (;;) {Led_R ^= 1; Led_G^= 1; delay_ms(30);}


// Global enable interrupts
#asm("sei")


Читаю eeprom когда программа уже в бесконечном цикле и вижу, что на картинке.
Вопрос - почему нет значений 0x01, 0x02, 0x03?
goodwin
Да вроде как все на месте...
Павел_Б
Цитата(goodwin @ Jun 30 2011, 18:28) *
Да вроде как все на месте...

Паинт рулит rolleyes.gif
Я серьёзно.
goodwin
я тоже...
Павел_Б
Цитата(goodwin @ Jun 30 2011, 18:49) *
я тоже...

Дак у меня при чтении как будьто значения в первые ячейки eeprom не прописались.
А у Вас отредактированная моя картинка.
Палыч
Цитата(Павел_Б @ Jun 30 2011, 18:51) *
значения в первые ячейки eeprom не прописались.

Как предположение: при включении питания на Vcc напряжение нарастает слишком медленно, и в момент записи в EEPROM первых Х значений напряжение ещё недостаточное для осуществления нормальной записи.
Павел_Б
Цитата(Палыч @ Jun 30 2011, 19:51) *
Как предположение: при включении питания на Vcc напряжение нарастает слишком медленно, и в момент записи в EEPROM первых Х значений напряжение ещё недостаточное для осуществления нормальной записи.

Верно. Поставив паузу в 1 секунду все ячейки прописались!
Только вот в чём дело - я питание не снимаю. Прошивку заливаю внутрисхемно и контроллер стартует. Питание остаётся включенным.
Но с паузой работает!
Делааа... есть хоть какое-то разумное объяснение этому феномену?
Палыч
Цитата(Павел_Б @ Jun 30 2011, 20:08) *
есть хоть какое-то разумное объяснение этому феномену?
Чтобы были объяснения, необходимы результаты всяко-разных замеров и экспериментов. Вы же предлагаете гадать на кофейной гуще.
Павел_Б
Цитата(Палыч @ Jun 30 2011, 20:28) *
Чтобы были объяснения, необходимы результаты всяко-разных замеров и экспериментов. Вы же предлагаете гадать на кофейной гуще.

Вы абсолютно правы... тут нужны исследования и эксперименты...
Палыч
Уберите задержку в начале программы. Включите BOD. Сообщите результат выполнения программы.
Павел_Б
Цитата(Палыч @ Jun 30 2011, 22:06) *
Уберите задержку в начале программы. Включите BOD. Сообщите результат выполнения программы.

Перед тем как произвести манипуляции с фьюзами bodlevel, хотел спросить.
По даташиту atmega168 работает от напряжения 2,7-5,5 вольт.
У меня питание 3,6 вольта.
Вопрос. Если я прошью фьюзы VCC=4.3 вольт (BODLEVEL=100) у меня МК вообще не запустится. Смогу ли я перепрошить внутрисхемно микроконтроллер при таких фьюзах и напряжении 3,6 вольта? Или придётся поднимать напряжение чтобы тактовый генератор запустился у мк и уж только потом перепрошивать.
Спасибо.
Палыч
Цитата(Павел_Б @ Jul 1 2011, 21:58) *
Если я прошью фьюзы VCC=4.3 вольт (BODLEVEL=100) у меня МК вообще не запустится. Смогу ли я перепрошить внутрисхемно микроконтроллер при таких фьюзах и напряжении 3,6 вольта?
Это было бы критично, если бы Вы заливали программу через Bootloader.
Павел_Б
Выбрал наконец-то время и произвёл эксперименты с фьюзами BODLEVEL.
Задержку в начале программы убрал.
1. Выставил фьюзы BODLEVEL=100 (VCC=4.3 V). МК не запустился.
2. Выставил фьюзы BODLEVEL=101 (VCC=2.7 V). МК запустился как обычно будь-то фьюзы не трогал. EEPROM записался опять только наполовину.
3. С VCC=1.8 V работает аналогично что и с VCC=2.7 V
На закуску провл другой эксперимент.
У меня была строка:
Код
buffer[0]=0x00;buffer[1]=0x01;buffer[2]=0x02;buffer[3]=0x03;buffer[4]=0x04;buffer[5]=0x05;buffer[6]=0x06;buffer[7]=0x07;buffer[8]=0x08;buffer[9]=0x09;

Заменил на:
Код
buffer[5]=0x05;buffer[6]=0x06;buffer[7]=0x07;buffer[8]=0x08;buffer[9]=0x09;buffer[0]=0x00;buffer[1]=0x01;buffer[2]=0x02;buffer[3]=0x03;buffer[4]=0x04;

Результат не изменился. Первые ячейки опять не прописались sad.gif
Что скажете smile3046.gif
Палыч
Вижу только два момента, которые могут препятствовать занасению значений в EEPROM:
1. Напряжение питания. При низком напряжении нормальная запись в EEPROM не гарантируется. В DS при описании записи в EEPROM напряжение питания, при котором гарантируется нормальная работа, ловко обходится, указано только, что необходим внешний супервизор питания при ненормальной работе EEPROM. В Errata описана проблема с EEPROM при напряжении ниже 2.7 вольт. Однако, установка BODLEVEL=101 (VCC=2.7 V) проблему не решила. Хорошо бы посмотреть на значение напряжения в момент пуска МК.
2. Внутренний RC-генератор. Он использется для тактирования автомата стирания/записи в EEPROM. Можно попробовать "поиграться" с его частотой.

Р.S. Кстати, Вы в курсе того, что этот МК уже более двух лет не рекомендуется к применению в новых разработках? Или использование этого МК - "поиграться для себя"?
Павел_Б
Цитата(Палыч @ Jul 3 2011, 21:04) *
Р.S. Кстати, Вы в курсе того, что этот МК уже более двух лет не рекомендуется к применению в новых разработках? Или использование этого МК - "поиграться для себя"?

Нет sad.gif
Первый раз слышу об этом. Случайно не знаете в связи с чем? Их скоро перестанут выпускать?
Я писал сначала на atmega8, но памяти не хватило, "пересел" на atmega168 - это самое дешёвое что нашёл у atmel с объёмом в 16 кБ. И корпус TQFP32 pin-to-pin оказался у этих двух МК.
Чем грозит дальнейшее применение этих мк, так как в идеальном случае хотелось бы не только для себя...?
Палыч
Цитата(Павел_Б @ Jul 4 2011, 04:52) *
Их скоро перестанут выпускать?
Да, их перестанут выпускать
Genadi Zawidowski
Цитата(Павел_Б @ Jun 30 2011, 18:03) *
Здравствуйте Уважаемые форумчане.
Нужна помощь, пишу программу в CodeVisionAVR.
Микроконтроллер atmega168
Задал некоторый буффер в память eeprom:
Код
eeprom char buffer[60];

В программе написал следующее:

....


Читаю eeprom когда программа уже в бесконечном цикле и вижу, что на картинке.
Вопрос - почему нет значений 0x01, 0x02, 0x03?


Проверяйте готовность eeprom к записи.
Не начинайте запись, пока готовность н наступит.
Павел_Б
Цитата(Палыч @ Jul 4 2011, 07:14) *
Да, их перестанут выпускать

Очень плохая новость!
Что порекомендуете от атмела на 16 кБ? Очень было бы замечательно из бюджетного и Pin-to-pin с Atmega8.
Может знаете когда точно прекратится выпуск atmega168? Какая-то проверенная информация есть?
Палыч
Цитата(Genadi Zawidowski @ Jul 4 2011, 09:34) *
Проверяйте готовность eeprom к записи.
Не начинайте запись, пока готовность н наступит.
Вы что, считаете/знаете, что CV это не делает (сам я CV не использую и, поэтому, сказать что-то точно не могу)? Почему, тогда через секунду проходят несколько записей нормально?
Палыч
Цитата(Genadi Zawidowski @ Jul 4 2011, 09:34) *
Проверяйте готовность eeprom к записи.
Поставил CV и проверил: перед записью в EEPROM CV первым делом проверяет готовность EEPROM к записи. Так что, это - не поможет решить проблему...
Палыч
Цитата(Павел_Б @ Jul 4 2011, 09:39) *
Может знаете когда точно прекратится выпуск atmega168? Какая-то проверенная информация есть?
Не стоит так переживать - на смену ей вышла Atmega168A rolleyes.gif
Про снятие с производства я упомянул, имея в виду, что в новом МК, возможно, этих проблем может и не быть...
defunct
Цитата(Палыч @ Jul 4 2011, 17:25) *
Про снятие с производства я упомянул, имея в виду, что в новом МК, возможно, этих проблем может и не быть...

Да и в оригинальном 168-м не было никаких проблем с EEPROM'ом. По крайней мере партия девайсов на 168-х (используется почти весь eeprom) работает уже лет пять, отказов и возвратов нет. Справедливости ради девайсы у меня стартуют с задержой в три секунды (3 секунды бутлоадер ждет команд от Хоста, потом запускает программу).

По теме автору - на практике не нужно чтобы при каждом включении в eeprom записывался какой-то буфер...) Так вы убиваете не только ресурс eeprom но и данные записанные до сброса. Правильно будет сразу проинициализировать eeprom буфер значениями какими надо и зашить вместе с прошивкой. А уж в процессе работы обновление некоторых значений будет гораздо позже одной секунды после старта. Ну и еще хранить 2 копии одних и тех же данных в eeprom никто не запрещает.
ArtemKAD
Цитата
Не стоит так переживать - на смену ей вышла Atmega168A

Скорее даже Atmega168РА...

Цитата
Справедливости ради девайсы у меня стартуют с задержой в три секунды

Без задержек (почти - кроме иннициализации) так-же за последние 5 лет на нескольких тысячах автомобильных устройств проблем не обнаружено...
ЗЫ. Правда все-же по моим наблюдениям этот камень менее надежен чем остальные Атмелы. На те несколько тысяч было штук пять померших без каких либо видимых причин. К примеру для моих любимых 48-х я такого ни разу не наблюдал хотя прошло их через нас раз в пять больше.

Цитата
Правильно будет сразу проинициализировать eeprom буфер значениями какими надо и зашить вместе с прошивкой.

Или как вариант иннициализировать заводскими значениями только тогда, когда невозможно восстановление по контрольной сумме. Что в частности совпадает со случаем чистой EEPROM-ки.
Павел_Б
Цитата(ArtemKAD @ Jul 4 2011, 19:30) *
Скорее даже Atmega168РА...

Обычно комплектующие в Платане заказываю, там нет ни Atmega168A, ни Atmega168РА sad.gif
EEPROM использую для отладки. В рабочей версии EEPROM не будет задействована, вернее будет, но там, как бы это "громко не звучало" будет храниться "служебная информация" rolleyes.gif
goodwin
Чудес не бывает...

Посмотреть:
1. С какой скоростью нарастает напряжение питания.
2. Подключена ли нога аналогового питания и все GND (частая ошибка начинающих).

Если все это в норме, то виноват Платан sm.gif
Павел_Б
Цитата(goodwin @ Jul 5 2011, 08:26) *
Чудес не бывает...

Посмотреть:
1. С какой скоростью нарастает напряжение питания.
2. Подключена ли нога аналогового питания и все GND (частая ошибка начинающих).

Если все это в норме, то виноват Платан sm.gif

Платан не при чём rolleyes.gif
По поводу скорости - меняю последовательность записи в eeprom, те регистры которые были не прописаны, опять не прописались sad.gif
Разводка сделано верно. GND - 3, 5, 21. VCC - 4, 6, 18.
777777
Цитата(Палыч @ Jul 4 2011, 18:25) *
Не стоит так переживать - на смену ей вышла Atmega168A rolleyes.gif

Это не совсем смена, это просто модифицированный кристалл. У Atmega168 есть другие фичи - ее температурный диапазон 125 градусов, а у Atmega168-15AD - 150. Поскольку альтернативы им нет, вряд ли их снимут с производства.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.