Страница 1 из 1

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

Добавлено: Вт мар 04, 2014 10:10:18
zsxdcf
здравсивуйте
задача такая:
есть Atmega 8 ,который связан с EEPROM 24с32 по шине I2C.
необходимо записать байты по мере поступления на 24c32 до заполнения и при необходимости считывать эти байты с любого адреса.
Я могу писать программы только на СИ и умею работать только в CVAVR .
Все попытки найти функции чтения-записи для 24с32 не увенчались успехом.
Коты всегда выручали и надеюсь что на этот раз тоже не оставят в беде.
Буду благодарен за любую информацию.

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

Добавлено: Вт мар 04, 2014 19:30:41
pyzhman
Чем не понравилась библиотека i2c.h?

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

Добавлено: Вт мар 04, 2014 21:12:19
zsxdcf
pyzhman,
это Я видел но так и не понял как байт записать в 24с32 используя I2c.h
Если только подакажете как им пользоваться (там нет никаких коментариев),век не забуду.

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

Добавлено: Ср мар 05, 2014 06:40:47
kotriks
есть пример того что хотите записать?

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

Добавлено: Ср мар 05, 2014 08:13:52
zsxdcf
kotriks,pyzhman,

родные ведь если я мог бы сразу разобратся я бы не обратился на форум а ведь мучился и ничего.
Если бы дали примерчик молюсенького кода как записать в 24с32 хоть один единственный байт (например 0x34),
я дальше сам бы разобрался.

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

Добавлено: Ср мар 05, 2014 08:47:52
pyzhman
Открываем даташит, смотрим:
Изображение
Адресуем микросхему по железу, точно так же адресуем и в программе.

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

Добавлено: Ср мар 05, 2014 09:51:30
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 . Наверно и они существуют и придет конец моим мучениям.

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

Добавлено: Ср мар 05, 2014 10:27:00
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(); 
}

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

Добавлено: Ср мар 05, 2014 12:59:54
zsxdcf
a_skr,

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

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

Добавлено: Пт мар 07, 2014 11:04:02
Eugene.Negrobov
Могу кинуть пример работы с 24LC512, с комментариями.

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

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

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

_external unsigned char A;

void main(void){
unsigned char B;
B = A;
A = B+1;
}
Может быть как то через #define-ы
Или подскажите как в поисковике правильно набрать, ничего путного не нашел, Спасибо заранее.

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

Добавлено: Сб мар 08, 2014 11:17:25
BCluster
В общем случае нет. Да и для чего это нужно? Через дефайн можно сделать только чтение из .

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

Добавлено: Чт мар 20, 2014 00:21:02
zsxdcf
Eugene.Negrobov

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