как записать и считывать байты в EEPROM 24с32

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

здравсивуйте
задача такая:
есть Atmega 8 ,который связан с EEPROM 24с32 по шине I2C.
необходимо записать байты по мере поступления на 24c32 до заполнения и при необходимости считывать эти байты с любого адреса.
Я могу писать программы только на СИ и умею работать только в CVAVR .
Все попытки найти функции чтения-записи для 24с32 не увенчались успехом.
Коты всегда выручали и надеюсь что на этот раз тоже не оставят в беде.
Буду благодарен за любую информацию.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Чем не понравилась библиотека i2c.h?
Docendo discimus
Контактная информация:
Реклама
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

pyzhman,
это Я видел но так и не понял как байт записать в 24с32 используя I2c.h
Если только подакажете как им пользоваться (там нет никаких коментариев),век не забуду.
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

Сообщение kotriks »

есть пример того что хотите записать?
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

kotriks,pyzhman,

родные ведь если я мог бы сразу разобратся я бы не обратился на форум а ведь мучился и ничего.
Если бы дали примерчик молюсенького кода как записать в 24с32 хоть один единственный байт (например 0x34),
я дальше сам бы разобрался.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Открываем даташит, смотрим:
Изображение
Адресуем микросхему по железу, точно так же адресуем и в программе.
Docendo discimus
Контактная информация:
Реклама
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

pyzhman ,

дорогой Я эти даташиты все перерыл и знаю принципы работы ,но как в программе то все это записать?
вот для 24с16 существует набор функции для записи и сшитывания в CVAVR это выглядет так:

unsigned int eep_read(unsigned int address)
{
unsigned char data;
i2c_start();
i2c_write((EEPROM_BUS_ADDRESS | ((address>>7) & 0x0E)));
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}
//-------------------------------------------------------------------------------------------------------------------
void eep_write(unsigned int address, unsigned char data)
{
i2c_start();
i2c_write((EEPROM_BUS_ADDRESS | ((address>>7) & 0x0E)));
i2c_write(address);
i2c_write(data);
i2c_stop();
}
---------------------------------------------
и тут ясно чтобы записать байт по какому то адресу нужно использовать функцию записи

write(0x34,0x23), те по адресу 0x34 запишется 0x23 байт и все дела.
но это для 24c16

тае вот Я хочу найти такие же функции для 24с32 . Наверно и они существуют и придет конец моим мучениям.
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение a_skr »

Там разница в том, что у 24с16 старшие биты адреса входят в контрольный байт, а в 24с32 в контрольный байт входят биты выбора микросхемы, а адрес передается двумя байтами за контрольным. Попробуйте такой вариант (не проверял, но суть должна быть понятна). Ножки A2-A0 микросхемы на корпус.

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

unsigned int eep_read(unsigned int address) 
{
unsigned char data; 
i2c_start(); 
i2c_write(0xA0); 
i2c_write(address>>8); 
i2c_write(address); 
i2c_start(); 
i2c_write(0xA1); 
data=i2c_read(0); 
i2c_stop(); 
return data; 
}

void eep_write(unsigned int address, unsigned char data) 
{ 
i2c_start(); 
i2c_write(0xA0); 
i2c_write(address>>8); 
i2c_write(address); 
i2c_write(data); 
i2c_stop(); 
}
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

a_skr,

вы просто умница!!!!!!!!!!!!!
байты записываются во все ячйки на любой адрес
Слов не нахожу молодцы,вот это помощь. ответ в точку. Чтение еще не проверял но убежден что и там все будет нормально.
В общем я ваш должник.
всем также спосибо ибо не сомневаюсь что от чистого сердца хотели помочь .
Мучитель микросхем
Аватара пользователя
Сообщения: 472
Зарегистрирован: Ср фев 15, 2012 09:00:34
Откуда: Киев

Сообщение Eugene.Negrobov »

Могу кинуть пример работы с 24LC512, с комментариями.
I'm on a huge rock, flying through space!
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский

Сообщение phanis »

Чтобы не создавать темы, пишу сюда.
Возможно ли сделать в СИ доступ к ячейкам внешней памяти (например как здесь внешняя епром, или к внешним регистрам сдвига)как к обычным переменным , объявив их каким хитрым образом.
что то типа этого

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

_external unsigned char A;

void main(void){
unsigned char B;
B = A;
A = B+1;
}
Может быть как то через #define-ы
Или подскажите как в поисковике правильно набрать, ничего путного не нашел, Спасибо заранее.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

В общем случае нет. Да и для чего это нужно? Через дефайн можно сделать только чтение из .
Контактная информация:
Открыл глаза
Сообщения: 61
Зарегистрирован: Вт авг 25, 2009 08:14:38

Сообщение zsxdcf »

Eugene.Negrobov

ваш пример случайно не cvavr?
Ответить

Вернуться в «AVR»