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

 
 
> Запись данных в EEPROM, не выходит
Motion
сообщение Feb 10 2008, 15:46
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297



Пытаюсь записать пару чисел в EEPROM МК ATmega16.

Взял стандартную функцию записи из документации:

void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}


При компиляции выдаёт ошибки:

undefined symbol 'EEWE'
undefined symbol 'EEMWE'




Попробовал так:

void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EECR.1))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EECR.2);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EECR.1);
}

Ошибки не выдаёт, но ничего не пишет в EEPROM


В основном цикле программы пишу:

EEPROM_write(0x00,0x00);
EEPROM_write(0x01,0xAA);

Для написания программы использую CodeVisionAVR. В стандарный листинг программы дописал лишь описание функции. А в основном цикле - вызов функции с параметрами.

Подскажите, что делаю не так.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Motion
сообщение Feb 10 2008, 21:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297



Спасибо, хорошо расписали. Вроде понял.

Не думал, что так сложно будет записать что-то в EEPROM.

Значит вначале программы мне необходимо добавить 2 строчки для первой версии программы:
#define EEWE 1
#define EEMWE 2

И оптимизировать при компиляции.

То есть текст программы должен принять вид:
Цитата
#define EEWE 1
#define EEMWE 2


// Declare your global variables here


void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = uiAddress;
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}



А основной цикл:
Цитата
while (1)
{
// Place your code here
EEPROM_write(0x00,0x00);
EEPROM_write(0x01,0xAA);
};


При компиляции ошибок не выдаёт. Оптимизировать пока не нашёл как.

А вообще странно. Неужели никто ничего не пишет в EEPROM? CodeVisionAVR вроди бы многие пользуются.

Получилось! smile.gif


Сделал так:
Цитата
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
#asm("sbi EECR,1");


Запустил в отладчике - записало 2 байта в EEPROM

Но всё равно вопрос остался актуальным - как сделать на С. Пример записи взят из документации. Должен работать же.

Сообщение отредактировал Владимир_КПИ - Feb 10 2008, 21:09
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:25
Рейтинг@Mail.ru


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