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

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

Добавлено: Пн сен 09, 2013 09:33:35
kilimandgaro
Доброго дня!

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

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

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

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

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

Кто-нибудь сталкивался?

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

Добавлено: Пн сен 09, 2013 09:49:06
vem566
kilimandgaro писал(а):Включён внутренний супервизор(BODLEVEL=2.7V).
А с выключенным?

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

Добавлено: Пн сен 09, 2013 10:15:24
Flasher
Ватчдог включен?

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

Добавлено: Пн сен 09, 2013 10:23:09
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

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

Добавлено: Пн сен 09, 2013 11:06:16
akl
Вы напутали со стеком

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

;// по советам бывалых, установми адрес на неиспользуемый нулевой байт EEPROM и ноль в регистр данных
 clr Temp
 out EEARL, Temp
 out EEDR, Temp
	
	POP Temp2
	POP	Temp
ret

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

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

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

День убил... даже полтора.

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

Добавлено: Пн сен 09, 2013 15:29:21
Flasher
Надо было сказать что на асме прога.