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

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

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

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

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

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

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

 
Опции темы
Непрочитано 11.11.2015, 13:39  
sanstan
Прописка
 
Регистрация: 06.03.2007
Сообщений: 144
Сказал спасибо: 22
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
sanstan на пути к лучшему
По умолчанию ATMega48 не сохраняется EEPROM

Здравствуйте.
Запрограммировал EEPROM.
Когда включаем устройство при подключенном программаторе EEPROM работает нормально.
Если программатор отсоединить, то Устройство не загружает данные из EEPROM.
Читал EEPROM - данные меняются при работе.
Код:
uint8_t  eepYellow  EEMEM= 4;

ISR(TIMER0_OVF_vect){
	if(fTemp›0){		
		temp++;
		if(temp›58){
			fYellowPrev=fYellow;
			eeprom_write_byte(&eepYellow,fYellow);
			fTemp=0;
			temp=0;
		}
	}else{
		temp=0;
	}
}

int main(void){

	DDRD=0x00;	
	PORTD=0xFF;	

	DDRC=0xFF;	
	PORTC=0xFF;	

	TCNT0 = 1;  // 
	TCCR0A |= (1 ‹‹ WGM01);	
	TCCR0B |= (1 ‹‹ CS00) | (1 ‹‹ CS02);
	TIMSK0 |= (1 ‹‹ TOIE0);

	fYellow=eeprom_read_byte(&eepYellow);
	fYellowPrev=fYellow;

	sei();

	while(1){
		if(fYellowPrev!=fYellow){
			fTemp=1;
		}
	................
		код
	................
	}
}
Реклама:

Последний раз редактировалось sanstan; 11.11.2015 в 13:48.
sanstan вне форума  
Непрочитано 11.11.2015, 18:28  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Дурной тон в прерывании писать в ЕЕПРОМ
Выноси из прерывания
niXto вне форума  
Непрочитано 11.11.2015, 19:50  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
Хорошо Re: ATMega48 не сохраняется EEPROM

Сообщение от niXto Посмотреть сообщение
Дурной тон в прерывании писать в ЕЕПРОМ
гы, обычно АБСОЛЮТНО ВСЁ пишу в прерываниях таймера... главное распределить ресурсы ядра и периферии, что бы гарантировано успевало обработать все события.

А запись EEPROM делать проверкой перед/после записи, с периодом 10 миллисек - гарантировано работает во всех МК .

Код:
ISR_TIM {
counter_restart_interupt=0;

//изменение переменой
if(условия изменения переменой)
{
 ram_variable ++;
 flag_save_eepom=1;//флаг сохранения в EEPROM
}

//счётчик периода записи в EEPROM
if(counter_10ms--==0)
{
 counter_10ms=10ms;
 if(flag_save_eepom›0)
 {
  if(eeprom_variable != ram_variable)
  {
   eeprom_variable = ram_variable;
  }
  else flag_save_eepom=0;
 }
}

void main (void)
{
init_project();
counter_restart_interupt=0-1;
ram_variable = eeprom_variable;

while(1)
 {
 if(++counter_restart_interupt==0)
 start_interupt();
 }
}
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Непрочитано 11.11.2015, 19:58  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,072
Сказал спасибо: 3,054
Сказали Спасибо 3,223 раз(а) в 2,188 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Сообщение от niXto Посмотреть сообщение
Дурной тон в прерывании писать в ЕЕПРОМ
+1

Сообщение от picavr Посмотреть сообщение
АБСОЛЮТНО ВСЁ пишу в прерываниях таймера...
Скорее - "минус 1". Этак можно договориться и до _delay_ms(1000) в прерывании.
ForcePoint вне форума  
Непрочитано 11.11.2015, 23:35  
vynt
Почётный гражданин KAZUS.RU
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Записывать в EEPROM нужно в прерывании EEPROM...
Что за программатор, устройство питается от него когда он подключен?
И для чего в EEPROM постоянно что-то записывать, как долго устройство должно после "окончательной" прошивки проработать, неделю - две?..

Проверьте, как часто возникает прерывание таймера с/без программатора. Запись в EEPROM должна производиться 1 байт в 5мс (это примерно. время зависит от напряжения питания). Есть ли какой либо WDT, и как он настроен? Ну и т.д. и т.п...
vynt вне форума  
Непрочитано 11.11.2015, 23:45  
watchmaker
Частый гость
 
Регистрация: 18.10.2011
Сообщений: 25
Сказал спасибо: 5
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
watchmaker на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Напряжение питания на программаторе и в устройстве какое? Ранние ревизии этого чипа (как и 8/88/16 не хотели писать в ЕЕПРОМ при напряжении питания менее 4.6 В.
watchmaker вне форума  
Непрочитано 12.11.2015, 00:30  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Сообщение от vynt Посмотреть сообщение
Записывать в EEPROM нужно в прерывании EEPROM...
Писать из прерывания можно, но не ждать в нем окончания записи целых 10 мс , когда МК работает на частоте например 20 МГц.
По окончанию записи генерируется прерывание, и вот в нем нужно инициировать следующую запись, проверив, нужно ли и дальше писать еепром.

Сообщение от vynt Посмотреть сообщение
как долго устройство должно после "окончательной" прошивки проработать, неделю - две?
При записи ежедневно 100 раз в день хватит на пару-тройку лет.

Последний раз редактировалось NewWriter; 12.11.2015 в 00:41.
NewWriter вне форума  
Непрочитано 12.11.2015, 02:16  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Запись каждого байта EEPROM занимает 8k циклов встроенного RC генератора(читать документацию).
Отсюда и исходите -можно ли в прерывании организовывать запись в EEPROM, или нет.
(подсказка - нельзя)
omercury вне форума  
Непрочитано 13.11.2015, 10:23  
pinco
Гражданин KAZUS.RU
 
Регистрация: 04.04.2007
Сообщений: 941
Сказал спасибо: 571
Сказали Спасибо 113 раз(а) в 85 сообщении(ях)
pinco на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Нельзя записывать EEPROM еще находясь в предидущем прерывании от этого же EEPROM-а , а во всех остальных прерываниях - можно ,так как запись стартуем битом EEWE(EEPE) (подробности по datasheet-у, после записи он сам сбрасывается аппаратно - тоже по datasheet-у), (при этом еще можно кучу действий делать чтобы не терять 8-10 мс бесполезно пока этот бит сбросится) - так вот - дальше просто ждем пока он сбросится после окончания записи в EEPROM-е, и следовательно само это ожидание (И ВЗВОД ЭТОГО БИТА - что интересно!) можно организовать в любом месте проги, хоть в прерывании, хоть не в прерывании. При этом все равно разрешено само прерывание конкретно от EEPROM-а или нет.

P.S. На время ожидания еще нужно запретить все прерывания так как записываемые данные могут быть искажены в ходе записи в EEPROM если при этом неожиданно возникнут еще какие-либо прерывания, то есть чтобы данные надежно записывались - на это время сбрасывать бит I регистра SREG, ну а после записи - восстанавливать его в исходное. Если в системе по проге точно не ожидается никаких прерываний в это время или хотя бы когда пишем EEPROM - то со сбросом бита I в SREG можно и не заморачиваться.
__________________
Короче асма кода нет !

Последний раз редактировалось pinco; 13.11.2015 в 10:46. Причина: дополнение
pinco вне форума  
Непрочитано 13.11.2015, 11:38  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: ATMega48 не сохраняется EEPROM

Сообщение от pinco Посмотреть сообщение
во всех остальных прерываниях - можно
Сообщение от pinco Посмотреть сообщение
нужно запретить все прерывания так как записываемые данные могут быть искажены в ходе записи в EEPROM если при этом неожиданно возникнут еще какие-либо прерывания
Разрыв шаблона пятой степени!
STM32F0 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из спящего режима по INT0 putmannn AVR 24 07.01.2013 16:47
Протеус и система зажигания после симуляции не сохраняет настройки cfif11 Proteus 23 04.02.2012 01:26
Проблемы с чтением блоков EEPROM MEGA128 под WinAVR maw_1961 Микроконтроллеры, АЦП, память и т.д 7 23.03.2011 21:26
AT89S8253 проблема чтения из внутренней EEPROM thunder367 Микроконтроллеры, АЦП, память и т.д 5 09.08.2007 13:08
Запись трехбайтного чила в EEPROM delay Микроконтроллеры, АЦП, память и т.д 4 30.03.2006 10:41


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


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