Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

В принципе, изредко, помогает SoftReset, но в большинстве случаев толку мало, да и он подогрев отключает...ResetConnetction в 9 циклов на SCK с поднятой DATA PIN ничего не приносит :(

Отправлено Paul1 04 июля 2008 г. 13:53
В ответ на: Ответ: отправлено <font color=gray>3m</font> 04 июля 2008 г. 13:20

Вот мой вариант:

void I2C_WriteByte(unsigned char j)
{
register unsigned char i;

for(i=0x80;i;i>>=1)
{
__delay_cycles( T2_TWI );
if(j&i) SDA_PORT|=SDA_MASK;
else SDA_PORT&=~SDA_MASK;
__delay_cycles( T2_TWI );
SCL_PORT|=SCL_MASK;
__delay_cycles( T4_TWI );
SCL_PORT&=~SCL_MASK;
}

SDA_DDR&=~SDA_MASK;
SDA_PORT|=SDA_MASK;
__delay_cycles( T4_TWI );
SCL_PORT|=SCL_MASK;
__delay_cycles( T4_TWI );
}

#define I2C_IsAck (!(SDA_PIN&SDA_MASK))
#define SHT75_DataReady I2C_IsAck

unsigned char I2C_ReadByte(void)
{
register unsigned char i, data=0;

for(i=0;i<8;i++)
{
__delay_cycles( T4_TWI );
SCL_PORT|=SCL_MASK;
__delay_cycles( T4_TWI );
data<<=1;
if(SDA_PIN&SDA_MASK) data|=0x01;
SCL_PORT&=~SCL_MASK;
}


return data;
}

void I2C_Ack(void)
{
SDA_PORT&=~SDA_MASK;
SDA_DDR|=SDA_MASK;
__delay_cycles( T4_TWI );
SCL_PORT|=SCL_MASK;
__delay_cycles( T4_TWI );
SCL_PORT&=~SCL_MASK;
SDA_PORT|=SDA_MASK;
SDA_DDR&=~SDA_MASK;
__delay_cycles( T4_TWI );
}


void SHT75_StartCondition(void)
{
SDA_PORT|=SDA_MASK;
SCL_PORT&=~SCL_MASK;
__delay_cycles( T4_TWI );
SCL_PORT|=SCL_MASK;
__delay_cycles( T4_TWI );
SDA_PORT&=~SDA_MASK;
__delay_cycles( T4_TWI );
SCL_PORT&=~SCL_MASK;
__delay_cycles( T4_TWI );
SCL_PORT|=SCL_MASK;
__delay_cycles( T4_TWI );
SDA_PORT|=SDA_MASK;
__delay_cycles( T4_TWI );
SCL_PORT&=~SCL_MASK;
}


void SHT75_ConnectionReset(void)
{
register unsigned char i;
SDA_DDR|=SDA_MASK;
SDA_PORT|=SDA_MASK;
SCL_PORT&=~SCL_MASK;
__delay_cycles( T4_TWI );
for(i=0;i<9;i++)
{
SCL_PORT|=SCL_MASK;
__delay_cycles( T4_TWI );
SCL_PORT&=~SCL_MASK;
}
SHT75_StartCondition();
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 12:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru