ATMega48: Срабвтывание BOD после записи в EEPROM

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 8
Зарегистрирован: Пн сен 09, 2013 09:02:32

Сообщение kilimandgaro »

Доброго дня!

Итак, ситуация. Поделка на ATMega48. Питание обеспечивает 78L05. На выходе шунтировано 100uF и 0.1uF керамики. Включён внутренний супервизор(BODLEVEL=2.7V). Редактируемое значение с клавиатуры записывается в EEPROM. Записываю 6 байт. Процедура записи, не в прерываниях, а в оснвном цикле программы, прерывания на момент записи запрещаются. А также на всякий пользую танцы с бубном: не записываю в 0 адрес, после записи и ожидания флага готовности обнуляю EECR.

ЗАПИСЬ ПРОХОДИТ УСПЕШНО. НО!

Каждый раз после записи ПРОИСХОДИТ СБРАСЫВАНИЕ меги. Т.е. срабатывает BOD. Т.е. выходит, просаживается питание? Не могу понять, почему?

Что было сделано.

1) Припаивался дополнительный электролит на 2200uF и керамика 1uF на питание, максимально близко к меге. Нет эффекта.
2) Введены дополнительные паузы в 15 мсек(!!!) после записи каждого байта. Идея в том, чтобы дать время 78L05 подзарядить кондёр на питании меги. Также, перед записью выключаю индикацию, чтобы не потреблять лишний ток. Нет эффекта.

Кто-нибудь сталкивался?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4751
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

kilimandgaro писал(а):Включён внутренний супервизор(BODLEVEL=2.7V).
А с выключенным?
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Сообщение Flasher »

Ватчдог включен?
Родился
Сообщения: 8
Зарегистрирован: Пн сен 09, 2013 09:02:32

Сообщение kilimandgaro »

А кстати. Выключил. И с выключенным также происходит сброс! Кино и немцы.
Причём, теперь иногда не записываются последние 2 байта. Со включенным, вроде, не наблюдается - проверил записью 11 раз.

Поставил для интересу после вызова функции записи в EEPROM уход в бесконечный цикл, но да него не доходит - происходит сброс.

Flasher, нет, WDT отключён.

Привожу ф-ции записи в EEPROM, может я что-то в упор не вижу?

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

// Ф-ция записи байта по адресу. Адрес и байт установлены.
fnPutEEPROMByte: 
push Temp 
PutByteWait:
 sbic EECR, EEPE
 rjmp PutByteWait   
 // Atomic operation - erase and write, without interrupts. 
 sbi EECR, EEMPE
 sbi EECR, EEPE     
 rcall Delay        
// танец с бубном
// ждем окончание записи и обнуляем регистр управления
PutByteWait2:
 sbic EECR, EEPE
 rjmp PutByteWait2   
 clr Temp
 out EECR, Temp

pop Temp
ret

// Запись 3х слов в EEPROM

fnPutTotalEEPROM:
push Temp
push Temp2

//  Umax_hex
 ldi Temp, MaxSet-EEPROM_Begin+1
 out EEARL, Temp
 lds Temp, Umax_hex+1
 out EEDR, Temp
 rcall fnPutEEPROMByte
 ldi Temp, MaxSet-EEPROM_Begin
 out EEARL, Temp
 lds Temp, Umax_hex 
 out EEDR, Temp
 rcall fnPutEEPROMByte

// Umin_hex
 ldi Temp, MinSet-EEPROM_Begin+1
 out EEARL, Temp
 lds Temp, Umin_hex+1 
 out EEDR, Temp
 rcall fnPutEEPROMByte
 ldi Temp, MinSet-EEPROM_Begin
 out EEARL, Temp
 lds Temp, Umin_hex 
 out EEDR, Temp
 rcall fnPutEEPROMByte

// T_hex
 ldi Temp, TSet-EEPROM_Begin+1
 out EEARL, Temp
 lds Temp, T_hex+1 
 out EEDR, Temp
 rcall fnPutEEPROMByte
 ldi Temp, TSet-EEPROM_Begin
 out EEARL, Temp
 lds Temp, T_hex 
 out EEDR, Temp
 rcall fnPutEEPROMByte

// по советам бывалых, установми адрес на неиспользуемый нулевой байт EEPROM и ноль в регистр данных
 clr Temp
 out EEARL, Temp
 out EEDR, Temp
pop Temp
ret
Реклама
Эиком - электронные компоненты и радиодетали
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Вы напутали со стеком

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

;// по советам бывалых, установми адрес на неиспользуемый нулевой байт EEPROM и ноль в регистр данных
 clr Temp
 out EEARL, Temp
 out EEDR, Temp
	
	POP Temp2
	POP	Temp
ret
Реклама
Родился
Сообщения: 8
Зарегистрирован: Пн сен 09, 2013 09:02:32

Сообщение kilimandgaro »

Вах! Большое спасибо, akl! Даже дважды. Т.к. вся память меги(98.7%) заполнена программой и уже не поставить внешнюю флеш - просто не хватит места для её обработчика.

Это же надо.... глупейшую ошибку не заметить! Стыдобище.
Т.е., после выхода из ф-ции записи был просто переход по адресу, скорее всего, выходящему за границы.

День убил... даже полтора.
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Сообщение Flasher »

Надо было сказать что на асме прога.
Ответить

Вернуться в «AVR»