Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 15.06.2007, 18:58  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию Как в CVAVR записать в EEPROM по определенному адресу?

Нужно переменные записывать по определенным адресам в EEPROM как это сделать в CVAVR?
Реклама:
woroba вне форума  
Непрочитано 15.06.2007, 20:36  
konsvik
Прохожий
 
Регистрация: 05.09.2006
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
konsvik на пути к лучшему
По умолчанию

Использую для этих целей собственные функции:


#pragma warn- // this will prevent warnings

void WriteEeprom(unsigned int addres, unsigned char data) {
#asm
ldd r31,y+2 ;R31=MSB addres
ldd r30,y+1 ;R30=LSB addres
ld r26,y ;R26=data
__EEPROMWRB:
SBIC EECR,EEWE
RJMP __EEPROMWRB
IN r25,SREG
CLI
OUT EEARL,r30
OUT EEARH,r31
SBI EECR,EERE
IN r24,EEDR
CP r30,r24
BREQ __EEPROMWRB0
OUT EEDR,r26
SBI EECR,EEMWE
SBI EECR,EEWE
__EEPROMWRB0:
OUT SREG,r25
RET
#endasm
}


unsigned char ReadEeprom(unsigned int addres) {
#asm
ld r30,y ;R30=LSB addres
ldd r31,y+1 ;R31=MSB addres
__EEPROMRDB:
SBIC EECR,EEWE
RJMP __EEPROMRDB
PUSH r27
IN r27,SREG
CLI
OUT EEARL,r30
OUT EEARH,r31
SBI EECR,EERE
IN R30,EEDR
OUT SREG,r27
POP r27
RET
#endasm
}
#pragma warn+ // enable warnings


Удачи!
konsvik вне форума  
Непрочитано 16.06.2007, 11:45  
AndryG
Вид на жительство
 
Регистрация: 22.06.2006
Адрес: Украина
Сообщений: 308
Сказал спасибо: 19
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
AndryG на пути к лучшему
По умолчанию

Код:
eeprom unsigned char var_name @10
переменная ложится на указанный адрес

99% что верно - почитай справку - там хорошо описано.
AndryG вне форума  
Непрочитано 16.06.2007, 18:54  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию

Уважаемый AndryG

Если бы было так просто я бы не задавал вопрос.
А вы бы сначало попробовали а потом советовали.
А если лень компилировать, я вам отвечу вместо компилятора-" @ operator can be used only SRAM variables"
woroba вне форума  
Непрочитано 17.06.2007, 07:16  
Laksus
Частый гость
 
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Laksus на пути к лучшему
По умолчанию

Может так?
Код:
//CodeVisionAVR 1.24.8e Evaluation
#include ‹mega8.h› 
unsigned int eeprom* peei1=0x10;
//объявили указатель на ячейку eeprom 0x10(младший байт), а старший будет в 0x11
unsigned int i1;    
int main(void)
{
 i1= *peei1;//записали содержимое ячеек 0x10, 0x11 в i1
 i1 *=7;//получили новое значение
 *peei1= i1;//записали по адресу 0x10 новое значение
 while(1); 
 return 0;
}
(Это кстати не Вы?
http://www.fulcrum.ru/cgi-bin/bbs/me...ID=4945&page=1
)
Laksus вне форума  
Непрочитано 18.06.2007, 06:44  
Ivax
Частый гость
 
Регистрация: 21.08.2006
Сообщений: 47
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Ivax на пути к лучшему
По умолчанию

Автору вопроса. А в чём собственно проблема? Если ты хочешь что-бы это были обычные преременные но по определенному адресу - так однозначно не получится и ты об этом знаешь сам.

Если не пугает работа с указателями - то всё просто, пиши куда хочешь и сколько хочешь. Еще можно массив натянуть на весь (не весь) EEPROM и писать в любую нужную ячейку. Тока зачем?

Ты бы задачу конкретнее описал - тогда можно выбрать подходящее решение, теоретически рассуждать не интересно.
Ivax вне форума  
Непрочитано 18.06.2007, 09:27  
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию

Ivax

Задача в следующем в EEPROM хранятся поравочные коэфициеты (изменяемые в конце процесса вычисления).

В зависимости от результата вычисления=адрессу EEPROM выбирается соответствующий коэфициент.
woroba вне форума  
Непрочитано 21.06.2007, 08:23  
Syberian
Прохожий
 
Регистрация: 21.06.2007
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Syberian на пути к лучшему
По умолчанию

Кодевижен имеет native процедюры для записи/чтения еепром, и даже флэш!
Все просто:

Код:
eeprom char a; //переменная в еепром
flash float c; // переменная в флэш-памяти
void main{
...

a=2*c...... ;  // запись в еепром автоматическая! чтение из flash - тоже

tempvar=a*23*sqrt(2); // чтение из еепром
c=(float)(a*24.6); // есть даже запись во флеш(!)
}
если нужно возиться с таблицей - все без изменений, как с обычной в SRAM

Но учти: без фанатизьма! количество записей в одну ячейку EEPROM - 100 000, потом пойдут сбои
запись в пределах одной страницы flash (64-256 байт) - 1000-5000 раз.

И еще. Писать в еепром напрямую (вне переменных) можно, но не рекомендуется, т.к. переменные назначаются при каждой компиляции по-разному. Можешь запороть данные.

Флеш писать можно, дабы сделать внутрисхемную замену ПО. Делается это так:



Код:
flash char progm @0;
char progb[];// буфер записи флеш
... траляля, инит, все дела

main{......}

#org SMALLBOOTSTART
void sysprog(void)


// складываешь новую прошивку(фрагмент) в SRAM progb
// затем берешь по очереди байты и кладешь во флеш

*(progm+смещение)= progb[i];

//и так далее
Syberian вне форума  
Непрочитано 21.06.2007, 08:33  
Syberian
Прохожий
 
Регистрация: 21.06.2007
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Syberian на пути к лучшему
По умолчанию

Цитата:
Задача в следующем в EEPROM хранятся поравочные коэфициеты (изменяемые в конце процесса вычисления).
если каждый раз будешь менять еепром - надолго его не хватит!

делай так:

Код:
char coeff_1[5]; // таблица коэфф-тов в памяти
eeprom char coeff_2[5]; // таблица коэф-тов в ПЗУ


{при включении питания}
coeff_1=coeff_2; //вспомнить коэф-ты

{в процессе работы, скажем каждую минуту}
coeff_2=coeff_1; //периодически сохраняем таблицу в ПЗУ (копирует весь массив целиком)

{процесс работы}
coeff_1[i+3]=#@$#@@~! ; // работаешь ТОЛЬКО с таблицей в SRAM!!!
Syberian вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать mp3/wav файл во флэш? svad0 Микроконтроллеры, АЦП, память и т.д 5 03.09.2008 08:55
как записать строку в массив? dimonbest Микроконтроллеры, АЦП, память и т.д 8 27.02.2008 12:18
Помогите записать EEPROM masterpc Микроконтроллеры, АЦП, память и т.д 4 16.02.2007 02:53
как записать массив 50 на 16 в еепром atmega128& sma-etu Микроконтроллеры, АЦП, память и т.д 0 15.02.2007 16:05
как записать в eeprom atmegi128? sma-etu Микроконтроллеры, АЦП, память и т.д 1 06.12.2006 15:35


Часовой пояс GMT +4, время: 18:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot