роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


 Страниц (3): [1] 2 3 »   

> Без описания
Def1988
Отправлено: 14 Июня, 2009 - 15:42:03
Post Id



Лейтенант


Сообщений всего: 34
Дата рег-ции: Май 2009  





Народ
у МК есть независемая память
я пользуюсь программой WinAVR
можно ли с помощью нее записать данные в независемую память и как это сделать
и потом как к ней обращаться
и можно ли использовать много мерные массивы???
 
 Top
Белый Волк Супермодератор
Отправлено: 14 Июня, 2009 - 17:04:25
Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  





Def1988
В datasheet для Вашего контроллера есть пример кода на C для записи в энергонезависимую память и для чтения из неё.
Да, использование многомерных массивов возможно.
 
 Top
Def1988
Отправлено: 14 Июня, 2009 - 20:38:08
Post Id



Лейтенант


Сообщений всего: 34
Дата рег-ции: Май 2009  





а если не сложно кинте несколько ссылок или название учебников где это можно найти
а то нечего умного найти не могу
 
 Top
Белый Волк Супермодератор
Отправлено: 15 Июня, 2009 - 05:32:15
Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  





Def1988
Какой микроконтроллер Вы используете?
 
 Top
Def1988
Отправлено: 15 Июня, 2009 - 10:43:42
Post Id



Лейтенант


Сообщений всего: 34
Дата рег-ции: Май 2009  





ATmega 8
 
 Top
Белый Волк Супермодератор
Отправлено: 15 Июня, 2009 - 15:03:26
Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  





Для ATmega8
Функция записи в EEPROM:

CODE:

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);
}


Функция чтения данных из EEPROM:
CODE:

unsigned char EEPROM_read(unsigned int uiAddress)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
/* Set up address register */
EEAR = uiAddress;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
/* Return data from data register */
return EEDR;
}
 
 Top
Def1988
Отправлено: 15 Июня, 2009 - 15:14:42
Post Id



Лейтенант


Сообщений всего: 34
Дата рег-ции: Май 2009  





СПС большое
 
 Top
1_ulyanovsk
Отправлено: 12 Марта, 2010 - 21:33:09
Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  





Действительно ли надо EEPROM при каждой записи стирать? Потому что когда я читаю данные из ячейки памяти 0x1E для mega8535 у меня показывает что туда записано 255 вместо записываемой цифры 3 (код не привожу).
Действительно ли надо EEPROM при каждой записи стирать?
 
 Top
nest Администратор
Отправлено: 13 Марта, 2010 - 03:05:03
Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  





1_ulyanovsk пишет:
Действительно ли надо EEPROM при каждой записи стирать?
нет.
Если у вас что то не записывается в eeprom, то что то вы сделали не так.
 
 Top
1_ulyanovsk
Отправлено: 13 Марта, 2010 - 06:47:10
Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  





Я использую функции записи и чтения в еепром прямо как есть из датиша. В датише на 8535 написано что под адреса еепром отводится память от 0х1Е до 0х3Е. Когда я записываю в адрес 0х1Е тройку 3 то следующим шагом (программа читает еепром и выводит это число) я ожидаю увидеть ту же тройку а выскакивает 255 то есть все единицы, и так на всех адресах от 0х1Е до 0х3Е.. (и даже других адресах )))))))) Вот и подумал что раз там все единицы надо очищать.
 
 Top
nest Администратор
Отправлено: 13 Марта, 2010 - 14:18:09
Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  





не надо очищать.
либо у вас туда не пишется, либо оттуда не читается.
Ищите ошибку.
 
 Top
1_ulyanovsk
Отправлено: 14 Марта, 2010 - 17:00:51
Post Id



Маршал


Сообщений всего: 126
Дата рег-ции: Сент. 2009  





nest пишет:
не надо очищать.
либо у вас туда не пишется, либо оттуда не читается.
Ищите ошибку.


Вот нашел и работает :
Для WinAVR язык Си++ там тупо функция eeprom_write_byte(АДРЕС, ДАННЫЕ);
Вставил строчку и он без объяснения причин все сделал как надо, даже предварительно эту функцию объявлять не надо. Не знаете где в WinAVR хранятся описания функций и в частности eeprom_write_byte..? хотелосьбы знать как она работает.

И уж не знаю как тут относятся к рекламе чужих ресурсов поэтому позволю себе цитировать ARV. Вдруг еще кому поможет

eeprom_read_xxxx(uint8_t *adr) - считывает из EEPROM переменную, расположенную по адресу adr. вместо xxxx пишите byte, word или dword соответственно для чтения переменной размером в байт, 2 байта или 4 байта.

аналогично для записи имеются функции eeprom_write_xxxx(uint8_t *adr, ....) - вместо многоточия тип соответствующей переменной.

(Отредактировано автором: 14 Марта, 2010 - 17:15:50)

 
 Top
redcat
Отправлено: 14 Марта, 2010 - 17:29:47
Post Id



Главнокомандующий


Сообщений всего: 387
Дата рег-ции: Янв. 2009  





1_ulyanovsk Отлично! Думаю пригодится.
Так-же от себя добавлю -
функция для чтения содержимого ФЛЕШ памяти
pgm_read_byte(addr); возвращает содержимое ячейки флеш памяти по адресу addr
 
 Top
mogikanin
Отправлено: 13 Февраля, 2011 - 10:41:02
Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  





Аналогичная проблема с записью/чтением EEPROM ATmega16(32). Прочитал этот раздел, попробовал все рекомендации - не получилось. Нельзя ли для чайника поподробнее?
У меня отлично работала программа на Ассемблере. Обстоятельства заставили переложить эту работающую программу на СИ. Все модули получились, а EEPROM упёрся - не поддаётся. Отладчик в Ассемблере пишет, что всё пишется/читается и железо тоже работает. Отладчик СИ выдаёт данные "FF" и железо тоже не работает. И в Ассемблере, и в СИ я использовал стандартные процедуры(функции). Например, void EEPROM_write(unsigned int uiAddress, unsigned char ucData). Пробовал и pgm_read_byte(addr); - её компилятор вообще не берёт. Может я не все модули "#include или #define"?
Всё-таки странно: для всех функций было достаточно "#include <avr/io.h>" и компилятор вытащил всё, что ему надо, а EEPROM - не работает. Использую WinAVR и AVRStudio4.
 
 Top
nest Администратор
Отправлено: 13 Февраля, 2011 - 11:46:19
Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  





mogikanin, дизасемблируйте прошивку и посмотрите, всё ли там верно работает.
 
 Top
Страниц (3): [1] 2 3 »
« Делимся опытом »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown