Посмотрел на исходник возникла пара вопросов
void temp(void)
{
float t;
tmp=0;
while (tmp==0) tmp=i2c_start();
i2c_write(0x80);
i2c_write(0xF3); i2c_stop();
delay_ms(100);
i2c_start();
i2c_write(0x81);
tmp=i2c_read(1);
tmp1=i2c_read(1);
i2c_read(0);
i2c_stop();
#pragma warn-
t=(tmp*256)+tmp1;
t=(t/65536)*175.72-46.85;
#pragma warn+
tmp=abs(t);
drob=abs((t-tmp)*10);
}
возникла пара вопросов для чего после команды i2c_write(0xF3); посылать i2c_stop();
в описании на SHT21 такого нет.
как я понял работа идет в режиме NO HOLD MASTER MODE?
11VETAL, а ничего, что ты оказываешь автору этой статьм "мышино-медвежью услугу"?
В правилах конкурса написано, цитирую: "Любое общение авторов с читателями запрещено до завершения голосования. За нарушение статьи будут сниматься с голосования."..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Вот кусок из работающей программы. Давно уже было.
void Start_temp(void)
{
i2c__start();
if ((TWSR & 0xF8) != START) //если были пробемы с передачей старта
{i2c__error=1;} //то признак ошибки
i2c__tx_addr (ADR_WRITE_SHT21); //команда записи
if((TWSR != MTX_ADR_ACK)&&(TWSR != MRX_ADR_ACK))//If NACK received return
{i2c__error=1;} //то признак ошибки
i2c__tx (TRIG_T_HOLD); //режим HOLD для температуры
if(TWSR != MTX_DATA_ACK) //если нет подтверждения от приемника, то
{i2c__error=1;} //признак ошибки
i2c__rep_start();
if ((TWSR & 0xF8) != REP_START) //если были пробемы с передачей поторного старта
{i2c__error=1;} //то признак ошибки
i2c__tx_addr (ADR_READ_SHT21); //команда записи
if((TWSR != MTX_ADR_ACK)&&(TWSR != MRX_ADR_ACK))//If NACK received return
{i2c__error=1;} //то признак ошибки
if (i2c__error==1)
{
return; //Выходим если Ошибка
}
delay_ms(100); //Ждем когда пройдет преобразование
}
void temp(void)
{
unsigned int t1;
float t;
t1=i2c__rx(1); // read msb
t1=t1<<8; //сдвигаем считаный байт на 8 бит
t1|=i2c__rx(0); // read lsb и выполняем побитное или со значением t1
//присваиваем полученное значение t1
i2c__stop();
if(i2c__error==1)
{
return; //Выходим если Ошибка
}