AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
24.06.2013, 11:14
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,034
Сказал спасибо: 60
Сказали Спасибо 3,947 раз(а) в 2,303 сообщении(ях)
|
Re: Софт-драйвер twi->at24c на си?
Повезло)))
|
|
|
|
30.08.2013, 00:21
|
#12
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Софт-драйвер twi->at24c на си?
Не, нифига не повезло )
Прошу помощи, бо за трое суток спал 6-8 часов в сумме наверно.. голова не понимает, где ошибко..
Цитата:
|
void ext_eeprom_write_byte(uint16_t _addr, uint8_t _val)
{
uint8_t ack = 0; //бит подтверждения для I2C
i2start(); //старт
i2write(0xA0); //выбираем AT24C16на линии I2C с признаком записи (1 в мзр)
ack |= i2ack(); //бит подтверждения
i2write(_addr); //записываем адрес
ack |= i2ack(); //бит подтверждения
i2write(_val); //записываем значение
ack |= i2ack(); //бит подтверждения
i2stop(); //стоп
_delay_ms(3);//переходные процессы
if(ack != 0) PORTC |= (1‹‹PC7); //если ack изменился (не ноль), высветим ошибку
}
uint8_t ext_eeprom_read_byte(uint16_t _addr)
{
uint8_t ack = 0;//обнуляем бит подтверждения
uint8_t _val = 0x00;
i2start(); //старт
i2write(0xA0); //выбираем AT24C16на линии I2C с признаком записи (1 в мзр)
ack |= i2ack();//контролируем бит потверждения
i2write(_addr);//пишем адрес чтения
ack |= i2ack();//бит подтверждения
i2start();//старт
i2write(0xA1);//адрес AT24C16 с признаком чтения в младшем разряде
ack |= i2ack();//бит подтверждения
_val = i2read(); //считываем значение
//i2mack();//бит подтверждения от микроконтроллера
i2nack();//конец считывания
i2stop();
_delay_ms(3);//стоп и пауза для переходных процессов
return _val;
}
|
где оно? )
|
|
|
|
30.08.2013, 00:37
|
#13
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Софт-драйвер twi->at24c на си?
что то смешались кони, люди.. открываю даташит, там страничная же запись
|
|
|
|
30.08.2013, 01:02
|
#14
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Софт-драйвер twi->at24c на си?
признак чтения в адресе не стоял и лишнего набежало.. и правда все смешалось ))
|
|
|
|
30.08.2013, 01:40
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Софт-драйвер twi->at24c на си?
и все равно чего то не хочет.. поциэнт - 24c16wp stm, который вроде с 8-ю банками..
к черту, спать..
Последний раз редактировалось whoim; 30.08.2013 в 01:57.
|
|
|
|
31.08.2013, 01:22
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,620
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
|
Re: Софт-драйвер twi->at24c на си?
чтение родного даташита
http://www.st.com/web/en/resource/te...DM00061111.pdf
привело к пониманию о 8-ми блоках по 256 байт каждый. Три бита задаются в адресе ведомого, остальные восемь - в байте записи.
Другими словами, блок для записи задается в адресе
Код:
|
#define EEPROM_BUS_ADDRESS 0xA0
i2write(EEPROM_BUS_ADDRESS | ((_addr››8)&0b00000111)‹‹1); ////адрес M24C16-WMN6TP |
а адрес вычисляется
Код:
|
i2write((uint8_t)_addr - ((_addr››8)‹‹8)); //пишем адрес записи |
остальные шаги по даташиту совпадают (насколько я вчитался). Но - не работает. Доставать анализатор пока неохота, на такой простой задаче то )
Поможет кто с поиском ошибки? Уверен - программная.
Последний раз редактировалось whoim; 31.08.2013 в 01:24.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:28.
|
|