Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Проблема с записью в EEPROM 24С16А по адресам свыше 255

Непрочитано 08.09.2007, 23:49  
Zemlyanov
Гражданин KAZUS.RUN
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию Проблема с записью в EEPROM 24С16А по адресам свыше 255

Проблема с записью EEPROM 24С16А по адресам свыше 255. Код, приведенный ниже, работает без проблем. Но здесь возможна запись с максимальным адресом 255.

Код:
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;
}

void eeprom_write(unsigned char address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();
delay_ms(10);
}
А вот этот код, который позволяет записывать в EEPROM в адреса свыше 255 работать не хочет, контроллер виснет. В чем проблема и как ее решить?

Код:
unsigned char eeprom_read(unsigned int address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address››8);
i2c_write(address & 0x00FF);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

void eeprom_write(unsigned int address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address››8);
i2c_write(address & 0x00FF);
i2c_write(data);
i2c_stop();
delay_ms(10); 
}
Компилятор CodeVision
Реклама:
Zemlyanov вне форума  
Непрочитано 09.09.2007, 06:56  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Проблема с записью в EEPROM 24С16А по адресам свыше 255

Сообщение от Zemlyanov
Проблема с записью EEPROM 24С16А по адресам свыше 255.
Код:
void eeprom_write(unsigned int address, unsigned char data) { 

i2c_start(); 
i2c_write( 0xA0 |(unsigned char)((address››7)&0x0E); 
i2c_write((unsigned char)address); 
i2c_write(data); 
i2c_stop(); 
delay_ms(10); 
}
Кактотак. RTFM!
kison вне форума  
Непрочитано 09.09.2007, 11:17  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Используйте кнопку code для своих примеров!!!
dosikus вне форума  
Непрочитано 09.09.2007, 16:56  
dimonbest
Гражданин KAZUS.RUN
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию Re: Проблема с записью в EEPROM 24С16А по адресам свыше 255

Сообщение от Zemlyanov
А вот этот код, который позволяет записывать в EEPROM в адреса свыше 255 работать не хочет, контроллер виснет. В чем проблема и как ее решить?

Код:
unsigned char eeprom_read(unsigned int address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address››8);
i2c_write(address & 0x00FF);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

void eeprom_write(unsigned int address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address››8);
i2c_write(address & 0x00FF);
i2c_write(data);
i2c_stop();
delay_ms(10); 
}
Этот код рабочий, во всяяком случае с памятью AT24C512.
Попробуйте сравнить даташиты этих чипов, посмотреть чем они отличаются...
dimonbest вне форума  
Непрочитано 09.09.2007, 20:01  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Тему можно было закрыть после первого поста - он 3 раза подряд писал адрес.
urry вне форума  
Непрочитано 09.09.2007, 20:36  
dimonbest
Гражданин KAZUS.RUN
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от urry
Тему можно было закрыть после первого поста - он 3 раза подряд писал адрес.
Он не писал адресс 3 раза:
Код:
i2c_write(EEPROM_BUS_ADDRESS); 
i2c_write(address››8); 
i2c_write(address & 0x00FF);
В первой строчке отправлял адресс памяти, а в двух следующих - старший и младший байт адресса...
dimonbest вне форума  
Непрочитано 09.09.2007, 21:30  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию

Сообщение от dimonbest
В первой строчке отправлял адресс памяти, а в двух следующих - старший и младший байт адресса...
А зачем? 24c16 - это как 8 независимых EEPROMm адрес страницы входит в i2c адрес ПЗУ-хи. Я не зря написал RTFM
Прилагаю картинку, по ней поятен принцип адресации...

-- Прилагается рисунок: --
kison вне форума  
Непрочитано 09.09.2007, 21:30  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

хм...
Одновременно возмутились

-- Прилагается рисунок: --

urry вне форума  
Непрочитано 09.09.2007, 22:10  
dimonbest
Гражданин KAZUS.RUN
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Я написал что то, что не соответствует действительности???
urry писал, что автор топика три раза писал адресс устройства, но это же не так...
Или это я уже на простешем глючу?
kison, что означает RTFM?
dimonbest вне форума  
Непрочитано 09.09.2007, 22:21  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Код:
что означает RTFM?
Read The Fucking Manual
urry вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью на микроконтроллер Vitalminator Микроконтроллеры, АЦП, память и т.д 0 10.05.2008 22:03
Использовать один EEPROM 24С16А двумя МК.Как состыковать? Zemlyanov Микроконтроллеры, АЦП, память и т.д 12 21.09.2007 22:17
Проблема с записью в EEPROM PIC Tujman Микроконтроллеры, АЦП, память и т.д 4 02.05.2007 22:32
PIC16F84A проблема с записью в ПЗУ данных Jerry86 Микроконтроллеры, АЦП, память и т.д 2 23.12.2004 02:43
проблема с записью в EEPROM Zero Микроконтроллеры, АЦП, память и т.д 0 26.04.2004 15:23


Часовой пояс GMT +4, время: 07:45.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.