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

 
 
> 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
сообщение Feb 4 2008, 22:26
Сообщение #2


Гуру
******

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



Цитата
Я тогда специально заглянул на сайт Атмела в даташит на Tiny24, поскольку конкретно её не применял. Там все как у меня

В варианте с Ассемблером - да, а на С - так как у меня.

Цитата
А если все дело в 4-х тактах, то применяйте библиотечные функции.

Я уже столкнулся с тем, что библиотеки WinAVR дают громоздкий код, мало того. При попытке разрешить прерывания глобально - встала вся программа. Так что пытаюсь писать сам. Для начала для маленьких Тини, потом для Мега, опираясь на опыт.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 4 2008, 22:41
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(smk @ Feb 5 2008, 01:26) *
Я уже столкнулся с тем, что библиотеки WinAVR дают громоздкий код, мало того.
Правда ? Ну тогда предлагаю Вам для примера более оптимально написать
CRC16... например...
Цитата
При попытке разрешить прерывания глобально - встала вся программа. Так что пытаюсь писать сам. Для начала для маленьких Тини, потом для Мега, опираясь на опыт.
Вот только давайте без ерунды, WinAVR здесь явно ни при чем...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 13th August 2025 - 14:55
Рейтинг@Mail.ru


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