Страница 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?