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

 
 
> Mega48-20 не пишет в EEPROM, Что я забыл?
smk
сообщение Dec 16 2014, 07:47
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Давно уже с АВРками дела не имел может что-то не так. Есть устройство с Mega48-20. Тактовая 4 МГц. Фуз еепрома стоит правильно, запись разрешена. Функции чтения-записи из даташита. Не пишет в еепром, в т.ч. и на симуляторе тоже. Что это может быть, что я забыл? Прерывания запрещаю. Пишется из главного цикла. Читать получается (0хFF).

Код
void EEPROM_write(unsigned int Address, unsigned char Data)
{
  while(EECR & (1<<EEPE)); /* Wait for completion of previous write */
  EEAR = Address; /* Set up address and Data Registers */
  EEDR = Data;
  EECR |= (1<<EEMPE); /* Write logical one to EEMPE */
  EECR |= (1<<EEPE); /* Start eeprom write by setting EEPE */
}

unsigned char EEPROM_read(unsigned int Address)
{
  while(EECR & (1<<EEPE)); /* Wait for completion of previous write */
  EEAR = Address; /* Set up address register */
  EECR |= (1<<EERE); /* Start eeprom read by writing EERE */
  return EEDR; /* Return data from Data Register */
}

    while(1)
    {
    if(mode)
    {
      PORTC = 0b00010000;
      delay(30000);
      PORTC = 0b00000000;
      delay(30000);
    }

    if(mem)
    {
      asm("cli");      
      EEPROM_write(0x0A, mode);
      EEPROM_write(0x0B, output);
      mem = 0;
      asm("sei");
    }
    //проверить питание
    }//while


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smk
сообщение Dec 16 2014, 20:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Ну вот... О1 и уже не работает. прикладываю проект для студии целиком. На самом деле действительно интересно что происходит. С кейлом таких чудес небыло ни разу. Не суть, просто хочу понять что происходит...
Прикрепленный файл  tr.rar ( 21.31 килобайт ) Кол-во скачиваний: 49


Цитата(IgorKossak @ Dec 16 2014, 21:16) *
Присваивание это просто запись, а то, что Вы описали, называется чтение-модификация-запись. Т. е. надо так, как Вам советовали:
Код
  EECR = (1<<EEMPE); /* Write logical one to EEMPE */
  EECR = (1<<EEMPE)|(1<<EEPE); /* Start eeprom write by setting EEPE */

Ну пусть так. Однако серийное изделие (лет более 5-ти) на Тини24 работает и повторяется .... правда перепер на STM8S0003F, но это детали... и на тини отлично все работает. Версия компилятора не изменилась. В чем смысл тогда?

оптимизация Os сильно убыстряет циклы мигания
Код
      PORTC = 0b00010000;
      delay(30000);
      PORTC = 0b00000000;
      delay(30000);


Это почему?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 16 2014, 20:09
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(smk @ Dec 16 2014, 21:14) *
Вот такое предупреждение. Что опять не так? Указатель нужен?
Да, нужен. смотрите еще раз:
Код
    eeprom_write_byte((uint8_t *)0x0A, mode);

А теперь смотрите на свой код:
Код
mode = eeprom_read_byte (0x0A);
Видите разницу около 0x0A?

Цитата(smk @ Dec 16 2014, 21:31) *
Ну вот... О1 и уже не работает.
Естественно. Ваша функция delay не делает с точки зрения компилятора ничего полезного. Наоборот, она делает маленькую быструю программу большой и медленной. Оптимизатор выкинул ее нафиг.

Изучайте <util/delay.h>

Цитата(smk @ Dec 16 2014, 21:14) *
С кейлом таких чудес небыло ни разу.
Там настолько плохой компилятор, что не умеет выкидывать пустые циклы?

Цитата(smk @ Dec 16 2014, 21:14) *
на тини отлично все работает. Версия компилятора не изменилась. В чем смысл тогда?
Откройте листинги, сравните, найдите разницу.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- smk   Mega48-20 не пишет в EEPROM   Dec 16 2014, 07:47
- - Сергей Борщ   Код EECR |= (1<<EEMPE); /* Write l...   Dec 16 2014, 08:00
|- - smk   Цитата(Сергей Борщ @ Dec 16 2014, 10:00) ...   Dec 16 2014, 08:56
|- - Xenia   Цитата(smk @ Dec 16 2014, 11:56) Компилят...   Dec 16 2014, 09:01
||- - smk   Цитата(Xenia @ Dec 16 2014, 11:01) У вас ...   Dec 16 2014, 09:04
|- - Сергей Борщ   Цитата(smk @ Dec 16 2014, 10:56) Компилят...   Dec 16 2014, 09:08
|- - smk   Цитата(Сергей Борщ @ Dec 16 2014, 11:08) ...   Dec 16 2014, 09:11
|- - Сергей Борщ   Цитата(smk @ Dec 16 2014, 11:11) Только я...   Dec 16 2014, 09:54
|- - IgorKossak   Цитата(smk @ Dec 16 2014, 11:11) Спасибо....   Dec 16 2014, 12:17
|- - smk   Цитата(IgorKossak @ Dec 16 2014, 14:17) Э...   Dec 16 2014, 12:40
|- - IgorKossak   Цитата(smk @ Dec 16 2014, 14:40) Ну а как...   Dec 16 2014, 13:43
|- - smk   Цитата(IgorKossak @ Dec 16 2014, 15:43) О...   Dec 16 2014, 14:31
||- - IgorKossak   Цитата(smk @ Dec 16 2014, 16:31) Да, комп...   Dec 16 2014, 19:16
|- - Bear_ku   Цитата(IgorKossak @ Dec 16 2014, 18:43) Н...   Dec 17 2014, 03:54
|- - demiurg1978   Я делал один проект. Сначала взял ATMEGA8535. Прое...   Dec 17 2014, 07:17
|- - Сергей Борщ   Цитата(demiurg1978 @ Dec 17 2014, 09:17) ...   Dec 17 2014, 08:00
|- - demiurg1978   Цитата(Сергей Борщ @ Dec 17 2014, 14:00) ...   Dec 17 2014, 08:18
|- - Xenia   Цитата(Сергей Борщ @ Dec 17 2014, 11:00) ...   Dec 17 2014, 08:22
- - Bear_ku   Нашел старую программу для ATmega128, все было сде...   Dec 16 2014, 12:45
- - Сергей Борщ   Откровенно говоря - не стоит полагаться на компиля...   Dec 16 2014, 14:55
- - smk   Код../trsm_m48.c:21: warning: ...   Dec 16 2014, 19:14
- - smk   так предлагаете unsigned char *0x0A или как? Читае...   Dec 16 2014, 20:19
- - smk   в смысле цикл тот Кодvoid delay (unsigned lon...   Dec 16 2014, 21:47
|- - Сергей Борщ   Цитата(smk @ Dec 16 2014, 23:47) в чем см...   Dec 16 2014, 23:03
- - Xenia   Хочу напомнить, что у IAR EWAVR в хидере intrinsic...   Dec 17 2014, 08:01
- - Сергей Борщ   Цитата(demiurg1978 @ Dec 17 2014, 10:18) ...   Dec 17 2014, 08:39
- - demiurg1978   Цитата(Сергей Борщ @ Dec 17 2014, 14:39) ...   Dec 17 2014, 09:34


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 11:27
Рейтинг@Mail.ru


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