Atmega 128: не получается считать EEPROM

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Christ
Родился
Сообщения: 7
Зарегистрирован: Сб окт 24, 2009 16:17:47
Контактная информация:

Atmega 128: не получается считать EEPROM

Сообщение Christ »

Здравствуйте!
Подскажите пожалуйста с такой проблемой
написал функцию для чтения из EEPROM

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

unsigned char EErd (unsigned int addr)
   {
   while(EECR & (1<<EEWE));
        EEAR = addr;
        EECR |= (1<<EERE);
        return EEDR;
}


она работает, но только в диапазоне адресов с 0000 до 00FF а мне необходимо считывать данные с большего количества адресов
в чем может быть проблема?
Аватара пользователя
Sera_232
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пт фев 12, 2010 01:37:03
Откуда: г. Хмельницкий
Контактная информация:

Сообщение Sera_232 »

А если адрес выше FF то что происходит?
Когда власть любви превзойдет лювовь к власти - настанет мир на Земле. / Джимми Хендрикс /
Christ
Родился
Сообщения: 7
Зарегистрирован: Сб окт 24, 2009 16:17:47
Контактная информация:

Сообщение Christ »

Sera_232 писал(а):А если адрес выше FF то что происходит?


происходит чтение из адреса 0000

проверял в Протеусе и на железе

точнее из адреса 00XX где XX младшие разряды addr
Аватара пользователя
Sera_232
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пт фев 12, 2010 01:37:03
Откуда: г. Хмельницкий
Контактная информация:

Сообщение Sera_232 »

Если Вы пишите на Си, почему би не воспользоваться его возможнностями, например инициализация переменных или массивов в иипром:

eeprom char var;
eeprom char var[16];
Когда власть любви превзойдет лювовь к власти - настанет мир на Земле. / Джимми Хендрикс /
Christ
Родился
Сообщения: 7
Зарегистрирован: Сб окт 24, 2009 16:17:47
Контактная информация:

Сообщение Christ »

Sera_232 писал(а):Если Вы пишите на Си, почему би не воспользоваться его возможнностями, например инициализация переменных или массивов в иипром:

eeprom char var;
eeprom char var[16];


объем данных около 3 кБ и считывать их надо либо по одному байту либо по несколько с разных адресов в зависимости от режима работы
поэтому целесообразней написать одну функцию чтения и указывать ей адрес
иначе количество переменных просто получается большое
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

в составе WinAVR имеется модуль eeprom.h, подключив который вы получаете в свое распоряжение готовые функции для чтения/записи из/в EEPROM одного байта, двух, четырех и произвольного количества, причем при желании о конкретных адресах думать не надо:

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

#include {avr/eeprom.h} // скобки заменить на уголки
// распределение ячеек EEPROM с начальными значениями
eeprom uint8_t byte = 12;
eeprom uint16_t word = 0x1234;
eeprom char str[] = "все очень просто!";
// чтение из EEPROM
uint8_t var = eeprom_read_byte(&byte);
int var2 = eeprom_read_word(&word);

char array[100];
eeprom_read_block(str, array, sizeof(str));
и не надо городить огород с самописными функциями :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Christ
Родился
Сообщения: 7
Зарегистрирован: Сб окт 24, 2009 16:17:47
Контактная информация:

Сообщение Christ »

Чет или я торможу
но после того как подключил библиотеку с апноута 104 результат такой же
до адреса 00FF читаются дальше опять по кругу
не могу понять где ошибка
Christ
Родился
Сообщения: 7
Зарегистрирован: Сб окт 24, 2009 16:17:47
Контактная информация:

Re: Atmega 128: не получается считать EEPROM

Сообщение Christ »

Большая просьба закройте тему вопрос решен.
mzspeed
Родился
Сообщения: 1
Зарегистрирован: Пн окт 26, 2009 13:08:38

Re: Atmega 128: не получается считать EEPROM

Сообщение mzspeed »

что за люди... хоть бы написал что ли как вопрос решил...
тоже встала такая проблема ((( кто сталкивался, и знает решение?
Christ
Родился
Сообщения: 7
Зарегистрирован: Сб окт 24, 2009 16:17:47
Контактная информация:

Re: Atmega 128: не получается считать EEPROM

Сообщение Christ »

Решил проблему очень просто
-- когда писал программу проверял в Proteus ,где соответственно ничего не работало
-- когда собрал на железе всё заработало

вот рабочий код для работы с EEPROM

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


// Запись одного байта(data) в EEPROM адресу addr
    void EEwr (unsigned int addr, unsigned char data)
    {   PORTG|=0x08;

        while (EECR.1 != 0);
        EEAR = addr;
        EEDR = data;
        EECR.2 = 1;
        EECR.1 = 1;
        PORTG^=0x08;
    }

    // чтение одного байта из EEPROM по адресу addr
   unsigned char EErd (unsigned int addr)
   {    while(EECR&(1<<EEWE));
        EEAR=addr;
        EECR|=(1<<EERE);
        EEAR|=0x0000;
        return EEDR;
        }   
     

:)
Закрыто

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