Страница 1 из 1

Применение семпла SHT21

Добавлено: Пт сен 02, 2011 12:25:00
11VETAL
Тема http://radiokot.ru/konkurs/21/

Посмотрел на исходник возникла пара вопросов
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?

Re: Применение семпла SHT21

Добавлено: Пт сен 02, 2011 12:32:50
МитяРа
11VETAL, а ничего, что ты оказываешь автору этой статьм "мышино-медвежью услугу"?
В правилах конкурса написано, цитирую: "Любое общение авторов с читателями запрещено до завершения голосования. За нарушение статьи будут сниматься с голосования."..

Re: Применение семпла SHT21

Добавлено: Пт сен 02, 2011 12:36:52
11VETAL
Извини, я этого не знал?

Re: Применение семпла SHT21

Добавлено: Пт сен 02, 2011 12:38:18
МитяРа
Перед автором потом извинишься..

Re: Применение семпла SHT21

Добавлено: Пт сен 02, 2011 12:44:22
11VETAL
на самом то деле автор то тут не причем и он не общался еще по теме.
пусть модераторы снесут тогда мою тему

Re: Применение семпла SHT21

Добавлено: Вс сен 04, 2011 17:25:07
B.E.S.
Ага, а в конце статьи написано "Все вопросы в Форум."...

Re: Применение семпла SHT21

Добавлено: Вс сен 04, 2011 17:31:29
11VETAL
Ото-ж. Не понимаю и я. :(

Re: Применение семпла SHT21

Добавлено: Вт дек 24, 2013 00:40:55
takei
11VETAL как решил проблему?, а то у меня аналогичный вопрос.

Re: Применение семпла SHT21

Добавлено: Вт дек 24, 2013 01:16:33
11VETAL
Вот кусок из работающей программы. Давно уже было.

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; //Выходим если Ошибка
}

t1&= ~0x0003;
t= (-46.85 +((175.72 /65536) * t1));// вычисляем температуру

ftoa(t,1,tmp); //цифра означает кол-во знаков после запятой

lcd_gotoxy(0,0);
__print_lcd_fl("T=");
lcd_gotoxy(2,0);
__print_lcd(tmp) ;
//lcd_gotoxy(6,0);
__write_lcd(1, 0 ,1);//градус
//lcd_gotoxy (7,0);
__print_lcd_fl("С ");
}