Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2c+ЦАП
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
KIG
Здравствуйте.
При создании стартового события:
TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWSTA)
(TWSR&252) возвращает 0x08, а TWINT в единицу не устанавливается. Подскажите, пожалуйста, что не так?
OlegH
Цитата(KIG @ Jun 9 2009, 18:20) *
Здравствуйте.
При создании стартового события:
TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWSTA)
(TWSR&252) возвращает 0x08, а TWINT в единицу не устанавливается. Подскажите, пожалуйста, что не так?


Еще нужно (1<<TWEA).

Прилагаю файл своей библиотечки i2c - думаю должна помочь.

Ее использование выглядит примерно так:

// посылка команды в DS1621
BYTE DS1621_SendCommand(BYTE Cmd)
{
I2C_ErrCode err;
err = sI2C_StartMasterTx(DS1621_ADDR);
if (err>=I2C_UnknownStatus) return 1;
if (err==I2C_NotACK) { sI2C_Stop(); return 0xFF; }
// посылаем код команды
err = sI2C_MasterSend(Cmd); if (err) return 2;
return 0;
}

// чтение байта статуса
BYTE DS1621_GetStatus(BYTE *pStatus)
{
BYTE e = DS1621_SendCommand(0xAC); if (e) return e;
I2C_ErrCode err;
// делаем повторный старт - чтение
err = sI2C_StartMasterRx(DS1621_ADDR, 0); // Not Ack на ожидаемый байт данных
if (err) return 3;
// читаем байт
err = sI2C_MasterRead(pStatus, 0); if (err!=I2C_NotACK) return 4;
sI2C_Stop();
return 0;
}
defunct
Цитата(Олег Хохлов @ Jun 10 2009, 06:26) *
Еще нужно (1<<TWEA).

Зачем?! TWEA в master mode для START condition не нужен.
TWEA нужно устанавливать в "1" в Master режиме только для Master Receiver перед приемом НЕ ПОСЛЕДНЕГО байта данных.


Цитата(KIG @ Jun 9 2009, 18:20) *
TWINT в единицу не устанавливается. Подскажите, пожалуйста, что не так?

Вы его где-то сбрасываете.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.