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

Что мерить, чем мерить, как мерить. И, естественно - зачем мерить...

При поддержке компании ПРИСТ


Ответить
11VETAL
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт авг 30, 2011 09:59:12
Откуда: ХАРЬКОВ

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

Сообщение 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?
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

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

Сообщение МитяРа »

11VETAL, а ничего, что ты оказываешь автору этой статьм "мышино-медвежью услугу"?
В правилах конкурса написано, цитирую: "Любое общение авторов с читателями запрещено до завершения голосования. За нарушение статьи будут сниматься с голосования."..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
11VETAL
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт авг 30, 2011 09:59:12
Откуда: ХАРЬКОВ

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

Сообщение 11VETAL »

Извини, я этого не знал?
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

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

Сообщение МитяРа »

Перед автором потом извинишься..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Эиком - электронные компоненты и радиодетали
11VETAL
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт авг 30, 2011 09:59:12
Откуда: ХАРЬКОВ

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

Сообщение 11VETAL »

на самом то деле автор то тут не причем и он не общался еще по теме.
пусть модераторы снесут тогда мою тему
Реклама
B.E.S.
Прорезались зубы
Сообщения: 245
Зарегистрирован: Ср апр 07, 2010 08:05:58
Откуда: Россия,г.Муравленко

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

Сообщение B.E.S. »

Ага, а в конце статьи написано "Все вопросы в Форум."...
Реклама
11VETAL
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт авг 30, 2011 09:59:12
Откуда: ХАРЬКОВ

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

Сообщение 11VETAL »

Ото-ж. Не понимаю и я. :(
takei
Нашел транзистор. Понюхал.
Сообщения: 181
Зарегистрирован: Пн янв 14, 2013 15:06:57
Откуда: Д.Вс.

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

Сообщение takei »

11VETAL как решил проблему?, а то у меня аналогичный вопрос.
11VETAL
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт авг 30, 2011 09:59:12
Откуда: ХАРЬКОВ

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

Сообщение 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("С ");
}
Ответить

Вернуться в «Измерения»