реклама на сайте
подробности

 
 
> Tiny24 не пишет в EEPROM, помогите разобраться
smk
сообщение Jan 30 2008, 14:35
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



в даташит есть такие примеры:

unsigned char EEPROM_read_8 (unsigned char Address)
{
while (EECR & (1<<EEPE));
EEARL= Address;
EECR |= (1<<EERE);
return EEDR;
}

void EEPROM_write_8(unsigned char Address, unsigned char Data)
{
while (EECR & (1<<EEPE));
EECR = (0<<EEPM1) | (0>>EEPM0);
EEARL= Address;
EEDR = Data;
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
}


на их основе сделаны функции:

unsigned int EEPROM_read_16 (unsigned char AddressH, unsigned char AddressL )
{
unsigned int Data_eep_16;
Data_eep_16=EEPROM_read_8(AddressH);
Data_eep_16=(Data_eep_16<<8);
Data_eep_16=Data_eep_16+EEPROM_read_8(AddressL);
return Data_eep_16;
}

void EEPROM_write_16 (unsigned char AddressH, unsigned char AddressL, unsigned int Data)
{
unsigned int Data_eep_8;
Data_eep_8=(Data>>8);
EEPROM_write_8(AddressH, Data_eep_8);
Data_eep_8=(char) Data;
EEPROM_write_8(AddressL, Data_eep_8);
}

перед записью всегда запрещаются прерывания:
cli();
фуз EESAVE=1, тактовая - 8 МГц, внутренний RC.
В AVR Studio 4.13 все симулируется правильно, запись происходит. Программатором EEPROM пишется исправно.

Нет записи в EEPROM в ходе выполнения программы, не пойму почему. Прошу помочь разобраться. Заранее благодарен.

Сообщение отредактировал smk - Jan 30 2008, 14:53


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smk
сообщение Jan 30 2008, 21:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
unsigned int Data_eep_8;
и
void EEPROM_write_8(unsigned char Address, unsigned char Data)
не стыкуются по типам данных 16 и 8 бит.

сделал так:
void EEPROM_write_16 (unsigned char AddressH, unsigned char AddressL, unsigned int Data)
{
unsigned char Data_eep_8;
Data_eep_8=(Data>>8);
EEPROM_write_8(AddressH, Data_eep_8);
Data_eep_8=(char) Data;
EEPROM_write_8(AddressL, Data_eep_8);
}
Цитата
Включите ВСЕ предупреждения компилятора и внимательно их проанализируйте.

а как это сделать я не знаю

Вот эта строчка не выполняется. Без видимых причин.
EECR |= (1<<EEPE);
переписал:
EECR |= (1<<1);
не помогло.

был уровень оптимизации -О0. включил -О1. стала выполняться(на симуляторе). Что это было?

Сообщение отредактировал smk - Jan 30 2008, 21:14


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 12:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016