Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TWI интерфейс
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
KIG
Здравствуйте!
Пытаюсь реализовать связь между МК Atmega164P и микросхемой PCF8535 c помощью TWI интерфейса. На ножке часов A0 высокий уровень. Не могу прочитать байты из часов. Что не так? Текст проги следующий:

TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWSTA)|(1<<TWEA); (add_sl-байт адреса часов (равен 1), add-адрес читаемого байта в часах)
while (!(TWCR&(1<<TWINT)));

TWDR=(add_sl<<1);
TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA);
while (!(TWCR&(1<<TWINT)));

TWDR=add;
TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA);
while (!(TWCR&(1<<TWINT)));
TWDR=(add_sl<<1)|1;

TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA);
while (!(TWCR&(1<<TWINT)));

TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA);
while (!(TWCR&(1<<TWINT)));

time=TWDR;
TWCR=(1<<TWEN)|(1<<TWINT);
while (!(TWCR&(1<<TWINT)));

TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWSTO)|(1<<TWEA);

Заранее спасибо
KIG
Неужели никто не работал с TWI?
DpInRock
А с чего в этой микросхеме должны быть часы?
Сергей Борщ
Цитата(KIG @ Jan 3 2009, 13:18) *
Неужели никто не работал с TWI?
С TWI - нет, а с I2C приходилось. В вашей программе нет анализа ACK, поэтому вообще непонятно, что она будет делать если ведомое устройство отсутствует или занято.
Цитата
(add_sl-байт адреса часов (равен 1)
Адрес состоит из 7 или 10 битов. Адресная нога задает один из них, остальные фиксированы для данного типа ведомого и не равны нулю - читайте документацию внимательнее.
KIG
Спасибо, разобрался. Действительно проблема была с адресом (старшая тетрада фиксирована). Также необходимо было добавить стартовое событие после ввода адреса читаемого байта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.