Например TDA7294

Форум РадиоКот • Просмотр темы - Ищу проекты c EEPROM at24cXX
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб дек 20, 2025 08:05:42

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 58 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 23, 2008 00:23:20 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
AlexBoss писал(а):
To diehard
Цитата:
i2c_write(Bank); // Выбор банка в устройстве
i2c_write(ExtEEAdr); // Выбор адреса для работы в банке

Первая команда - передача старшего байта адреса ячейки, а вторая - младшего и ничего более.
А 24cXX.jpg к EEPROM 24cXX не имеет ни какого отношения, т.к. ни какой Protection Bit Memory Area там нет, да и страницы по 32 байта противоречат даже Вашему коду.



http://www.alldatasheet.com/datasheet-p ... 24C64.html Рисунок 14 страница 18

http://www.atmel.com/dyn/resources/prod ... oc3350.pdf На странице 3 как раз о тех самых банках (pages):
AT24C64B, 64K SERIAL EEPROM: The 64K is internally organized as 256 pages of 32 bytes each.

Код можно проверить в протеусе, если есть сомнения в работоспособности.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 24, 2008 18:37:02 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
Так,ну с объемами разобрались,спасибо.
Что косается записи чтения просто ужас,голова уже трещит не чего не могу сооброзить,может ли кто дать отрывок кода, считывающий/записывающий, точно работающий на AT24с16.
Зараннее огромное спасибо!

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 25, 2008 00:07:05 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Это что, прикол?
Я же выложил _рабочий_ исходник.

Из поста выше:
Вот тебе исходник для 24с64. В нем используется несколько банков. все заполняются. Исходник подробно откомментировал.
// Заполнение 0x1F банков 24c64 символами с 0x00 до 0xff

Прогони в симуляторе и посмотри. Протуес на что тебе в руки дан? :shock:


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 25, 2008 15:07:24 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
diehard писал(а):
Это что, прикол?
Я же выложил _рабочий_ исходник.

Из поста выше:
Вот тебе исхо...

Спасибо,буду разбираться дальше :))

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс окт 26, 2008 15:12:33 
Мучитель микросхем
Аватар пользователя

Карма: -14
Рейтинг сообщений: 11
Зарегистрирован: Вс июн 29, 2008 13:53:03
Сообщений: 429
Рейтинг сообщения: 0
У меня CVAVR ругается на return data;

void eeprom_read(unsigned char address)
{
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}
в чем ошибка?


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс окт 26, 2008 16:12:41 
Мучитель микросхем
Аватар пользователя

Карма: -14
Рейтинг сообщений: 11
Зарегистрирован: Вс июн 29, 2008 13:53:03
Сообщений: 429
Рейтинг сообщения: 0
нашел проблему вот так надо:
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 27, 2008 20:27:57 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
не получается так записать несколько банков:

// Заполнение 0x1F банков 24c64 символами с 0x00 до 0xff
for(ExtEEAdr=0;ExtEEAdr<256;ExtEEAdr++)
{
for(Bank=0;Bank<=0x1F;Bank++)
{
i2c_start();
i2c_write(0b10100000); // Выбор устройства EEProm
i2c_write(Bank); // Выбор банка в устройстве
i2c_write(ExtEEAdr); // по этой строчке записывается байт Bank
i2c_write(ExtEEAdr); // а эта строка вообще игнорируется
i2c_stop();
delay_ms(10);
}
}

Так как же быть?

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 27, 2008 21:42:35 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
Это что,поясните,что зачем?


Вложения:
Безымянный.jpg [14.1 KiB]
Скачиваний: 1275

_________________
С уважением,
Radio_Master.
Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 27, 2008 23:49:23 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Картинка про страничную запись. Под ней есть что почитать. Очень занятно и поучительно.

К обоим вопросам один важный ответ из даташита:
During the erase/write cycle the EEPROM will not respond to a new command byte until the internal write procedure is completed. At the end of active programming the chip returns to the standby mode and the last entered EEPROM byte remains addressed by the address counter. To determine the end of the internal erase/write cycle acknowledge polling can be initiated by the master by sending a START condition followed by a command byte CSR or CSW (read with b0 = 1 or write with b0 = 0). If the internal erase/write cycle is not completed, the device will not acknowledge the transmission. If the internal erase/write cycle is сompleted, the device acknowledges the received command byte and the protocol activities can continue.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 29, 2008 10:23:13 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
Чего то я не особо понял смысл,поясните плз.

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 30, 2008 00:09:25 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Переводчик тебе в помощь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 02, 2008 13:15:05 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
Урра... :))) ...с записью я разлбрался, в at24c16 8 блоков по 256 байтов, блок выбирается в байте адресации микросхемы,сразу после старта который:
i2c_start();
i2c_write(0xA0); // Запись первого блока(A2-второго,А4-третьего и т.д.)

Разбираюсь с чтением... :idea:

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 02, 2008 15:25:58 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
Все,всем спасибо,во всем разобрался 8)

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 02, 2008 16:48:31 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Radio_Master писал(а):
Урра... ...с записью я разлбрался, в at24c16 8 блоков по 256 байтов, блок выбирается в байте адресации микросхемы,сразу после старта который:
i2c_start();
i2c_write(0xA0); // Запись первого блока(A2-второго,А4-третьего и т.д.)


Смотрим выше:
DieHard писал(а):
for(ExtEEAdr=0;ExtEEAdr<256;ExtEEAdr++)
{
for(Bank=0;Bank<=0x1F;Bank++)
{
i2c_start();
i2c_write(0b10100000); // Выбор устройства EEProm


i2c_write(0b10100000); НИЧЕМ НЕ ОТЛИЧАЕТСЯ ОТ i2c_write(0xA0);

Хотя, если тебе так проще, пользуйся хексом. Мне проще и понятнее работать с бином :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 02, 2008 21:34:08 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
diehard писал(а):
Radio_Master писал(а):
Урра... ...с записью я разлбрался, в at24c16 8 блоков по 256 байтов, блок выбирается в байте адресации микросхемы,сразу после старта который:
i2c_start();
i2c_write(0xA0); // Запись первого блока(A2-второго,А4-третьего и т.д.)


Смотрим выше:
DieHard писал(а):
for(ExtEEAdr=0;ExtEEAdr<256;ExtEEAdr++)
{
for(Bank=0;Bank<=0x1F;Bank++)
{
i2c_start();
i2c_write(0b10100000); // Выбор устройства EEProm


i2c_write(0b10100000); НИЧЕМ НЕ ОТЛИЧАЕТСЯ ОТ i2c_write(0xA0);

Хотя, если тебе так проще, пользуйся хексом. Мне проще и понятнее работать с бином :)))


то что это одно и тоже это ПОНЯТНО!там не было указано что адресс блока выбирается как адрес устройства!!!А в данном случае проще работать с хексом,т.к. первый символ A а второй меняется(так удобней записывать и быстрее заметно к какому блоку идет адресация)

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 02, 2008 21:41:23 
Встал на лапы
Аватар пользователя

Зарегистрирован: Чт ноя 01, 2007 12:42:39
Сообщений: 114
Откуда: Москоу
Рейтинг сообщения: 0
И еще: diehard,наиболее удобно записывать цифры в 16-тиричной СС,ведь легче и понятнее 2 символа чем 8! А вот удобно вам это или нет зависит от опыта,ибо у меня при виде шеснадцатиричного числа мысленно сразу и мнгновенно рисуется двоично число!а это гораздо быстрее чем щитать 1 и 0!

_________________
С уважением,
Radio_Master.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 02, 2008 22:49:49 
Встал на лапы

Карма: 2
Рейтинг сообщений: -1
Зарегистрирован: Вт дек 05, 2006 23:17:02
Сообщений: 101
Откуда: Краснодарский край
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Преклоняюсь перед настоящим профессионалом, ибо всю жизнь пользуюсь калькулятором Windows в инженерном режиме (раньше в DN), так как перевeсти из одной системы исчисления в другую в уме не могу. Да и не стремлюсь к этому :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 10, 2008 00:18:20 
Родился

Зарегистрирован: Вс ноя 09, 2008 23:38:11
Сообщений: 3
Рейтинг сообщения: 0
Здравствуйте!
Недавно начал играть с i2c eeprom. Взял простенький пример в хелпе cvavr для 24с02 с одним байтом адресации. Вообщем прочитал, записал и... захотел уже читать-писать 24с64/24с512, но наткнулся на то, что для адресации им нужно уже 2 байта. Пример от cvavr это не поддерживает, в функции чтения-записи в качестве адреса данных передаются char`ы. В даташите на eeprom вычитал, что при указании адреса данных(в случае с двумя байтами) второй байт передается сразу же после первого. Не долго думая, взял пример из cvavr и сделал следующее(на примере ф-ии чтения eeprom):

/* read a byte from the EEPROM */
unsigned char eeprom_read(unsigned char address1, unsigned char address2) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address1);
i2c_write(address2);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

где:
address1 - первая часть адреса
address2 - вторая часть адреса

например, адрес такой: 0x68ef
тогда в address1 я передаю 68, а в address2 - ef

... жирным выделены мои изменения, т.е. я тупо взял и сразу же передал второй байт(address2) адреса данных. Решил проверить - успешно прочитал и записал 24с64 в начале, в середине и в конце, на других eeprom, меньших размером, не проверял. Недостаток заключается в том, что в функцию приходится передавать два байта РАЗДЕЛЬНО, а хотелось бы сразу, типом int (16 бит). В этом и заключается мой вопрос: как можно сделать так, чтобы передавать функции адрес в виде int, а внутри её разделить этот int на две части, одну половину присвоить address1, а вторую - address2? :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 10, 2008 11:43:36 
Мучитель микросхем

Зарегистрирован: Вт июл 22, 2008 08:10:54
Сообщений: 492
Рейтинг сообщения: 0
KeeLoq писал(а):
В этом и заключается мой вопрос: как можно сделать так, чтобы передавать функции адрес в виде int, а внутри её разделить этот int на две части, одну половину присвоить address1, а вторую - address2? :)


Легко.
Код:
/* read a byte from the EEPROM */
unsigned char eeprom_read(int Address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(Address>>8);
i2c_write(Address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}



Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 10, 2008 13:59:43 
Родился

Зарегистрирован: Вс ноя 09, 2008 23:38:11
Сообщений: 3
Рейтинг сообщения: 0
BerZerK-ku, спасибо! работает :)

я сам делал так:

/* read a byte from the EEPROM */
unsigned char eeprom_read(int address) {
unsigned char data;
unsigned char address1=address;
unsigned char address2=( address>>8 );

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address1);
i2c_write(address2);

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

...и не работало :(


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 58 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y