Работа с EEPROM

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
EmDmAl
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт мар 22, 2012 09:14:18
Откуда: Липецк

Работа с EEPROM

Сообщение EmDmAl »

Здраствуйте. Написал код на Си (AVR Studio 4.19 + AVR Toolchain 3.3.0)для занесения в энергонезависимую память(весь код приводить смысла нет).

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

...
unsigned int  addres[2]={0x80, 0x81};//Aдрес
unsigned char  kodbut[2]={0xF7, 0xEF};//Код
...
int main(void) {
eeprom_write_block(kodbut, addres, 2);
...
}
При запуске в Proteus 7 и пошаговой отладки, по заданным адресам (0x80, 0x81) код (0xF7, 0xEF) не записывается, а записывается по адресу (0x60, 0x61).
Подскажите кто-нибудь сталкивался с подобной проблемой?
Реклама
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Работа с EEPROM

Сообщение Flasher »

Здравствуйте. Учите Си.
Реклама
EmDmAl
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт мар 22, 2012 09:14:18
Откуда: Липецк

Re: Работа с EEPROM

Сообщение EmDmAl »

Flasher писал(а):Здравствуйте. Учите Си.
Согласен, можно конечно написать цикл и использовать код занесения из даташита микроконроллера. Но хочется использовать встроенные ф-ии. Подскажите как надо.
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Работа с EEPROM

Сообщение Flasher »

Чтобы что-то использовать, нужно знать КАК это использовать. Прочитайте про данную встроенную функцию.
Реклама
Эиком - электронные компоненты и радиодетали
EmDmAl
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт мар 22, 2012 09:14:18
Откуда: Липецк

Re: Работа с EEPROM

Сообщение EmDmAl »

Flasher писал(а):Чтобы что-то использовать, нужно знать КАК это использовать. Прочитайте про данную встроенную функцию.
Подробна информация по этой и подобным ф-ям http://avr-libc.narod.ru/group__avr__ee ... 56a1620574 и http://samou4ka.net/page/chtenie-i-zapi ... odolzhenie.
Если я ошибаюсь поправьте меня.
unsigned int addres[2]={0x80, 0x81}; - мы объявляем буфер(массив) из адресов по которым надо записать необходимые биты;
unsigned char kodbut[2]={0xF7, 0xEF}; - объявляем буфер(массив из битов) необходимых данных, эти 2 массива должны по кол-ву элементов соответствовать друг другу.
eeprom_write_block(kodbut, addres, 2); или eeprom_write_block(kodbut, addres, sizeof(kodbut)); - записываем данные массива kodbut по адресу addres размером в 2(sizeof(kodbut)) байта. Вот впринципе как я думаю эту ф-ию использовать.
Реклама
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: Работа с EEPROM

Сообщение a_skr »

Подробна информация по этой и подобным ф-ям http://avr-libc.narod.ru/group__avr__ee ... 56a1620574 и http://samou4ka.net/page/chtenie-i-zapi ... odolzhenie.
Если я ошибаюсь поправьте меня.
unsigned int addres[2]={0x80, 0x81}; - мы объявляем буфер(массив) из адресов по которым надо записать необходимые биты;
unsigned char kodbut[2]={0xF7, 0xEF}; - объявляем буфер(массив из битов) необходимых данных, эти 2 массива должны по кол-ву элементов соответствовать друг другу.
eeprom_write_block(kodbut, addres, 2); или eeprom_write_block(kodbut, addres, sizeof(kodbut)); - записываем данные массива kodbut по адресу addres размером в 2(sizeof(kodbut)) байта. Вот впринципе как я думаю эту ф-ию использовать.
вторым аргументом Вы передаете адрес в ОЗУ массива addres. функция принимает только начальный адрес в EEPROM как значение, а не адрес в ОЗУ на массив с адресами в EEPROM!

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

unsigned char address = 80;
unsigned char  kodbut[2]={0xF7, 0xEF};
eeprom_write_block(kodbut, address, 2);
вроде так. и еще, у Вас EEPROM больше 128 байт?
Реклама
EmDmAl
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт мар 22, 2012 09:14:18
Откуда: Липецк

Re: Работа с EEPROM

Сообщение EmDmAl »

a_skr писал(а): вторым аргументом Вы передаете адрес в ОЗУ массива addres. функция принимает только начальный адрес в EEPROM как значение, а не адрес в ОЗУ на массив с адресами в EEPROM!

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

unsigned char address = 80;
unsigned char  kodbut[2]={0xF7, 0xEF};
eeprom_write_block(kodbut, address, 2);
Спасибо огромное теперь я понял где ошибался :))
a_skr писал(а):вроде так. и еще, у Вас EEPROM больше 128 байт?
Размер у меня EEPROM=1024байт. И еще с какого адреса можно писать в EEPROM?
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»