Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
08.09.2007, 23:49
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Проблема с записью в 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
|
|
|
|
09.09.2007, 06:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
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!
|
|
|
|
09.09.2007, 11:17
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Используйте кнопку code для своих примеров!!!
|
|
|
|
09.09.2007, 16:56
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
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.
Попробуйте сравнить даташиты этих чипов, посмотреть чем они отличаются...
|
|
|
|
09.09.2007, 20:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Тему можно было закрыть после первого поста - он 3 раза подряд писал адрес.
|
|
|
|
09.09.2007, 20:36
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Сообщение от urry
|
Тему можно было закрыть после первого поста - он 3 раза подряд писал адрес.
|
Он не писал адресс 3 раза:
Код:
|
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address››8);
i2c_write(address & 0x00FF); |
В первой строчке отправлял адресс памяти, а в двух следующих - старший и младший байт адресса...
|
|
|
|
09.09.2007, 21:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от dimonbest
|
В первой строчке отправлял адресс памяти, а в двух следующих - старший и младший байт адресса...
|
А зачем? 24c16 - это как 8 независимых EEPROMm адрес страницы входит в i2c адрес ПЗУ-хи. Я не зря написал RTFM
Прилагаю картинку, по ней поятен принцип адресации...
-- Прилагается рисунок: --
|
|
|
|
09.09.2007, 21:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
хм...
Одновременно возмутились
-- Прилагается рисунок: --
|
|
|
|
09.09.2007, 22:10
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Я написал что то, что не соответствует действительности???
urry писал, что автор топика три раза писал адресс устройства, но это же не так...
Или это я уже на простешем глючу?
kison, что означает RTFM?
|
|
|
|
09.09.2007, 22:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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 03:43 |
проблема с записью в EEPROM
|
Zero |
Микроконтроллеры, АЦП, память и т.д |
0 |
26.04.2004 14:23 |
Часовой пояс GMT +4, время: 00:55.
|
|