Применение семпла SHT21
-
11VETAL
- Нашел транзистор. Понюхал.
- Сообщения: 191
- Зарегистрирован: Вт авг 30, 2011 09:59:12
- Откуда: ХАРЬКОВ
Применение семпла SHT21
Тема 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?
Посмотрел на исходник возникла пара вопросов
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
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
Извини, я этого не знал?
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
на самом то деле автор то тут не причем и он не общался еще по теме.
пусть модераторы снесут тогда мою тему
пусть модераторы снесут тогда мою тему
- Реклама
-
B.E.S.
- Прорезались зубы
- Сообщения: 245
- Зарегистрирован: Ср апр 07, 2010 08:05:58
- Откуда: Россия,г.Муравленко
Re: Применение семпла SHT21
Ага, а в конце статьи написано "Все вопросы в Форум."...
-
11VETAL
- Нашел транзистор. Понюхал.
- Сообщения: 191
- Зарегистрирован: Вт авг 30, 2011 09:59:12
- Откуда: ХАРЬКОВ
Re: Применение семпла SHT21
Ото-ж. Не понимаю и я. 
-
takei
- Нашел транзистор. Понюхал.
- Сообщения: 181
- Зарегистрирован: Пн янв 14, 2013 15:06:57
- Откуда: Д.Вс.
Re: Применение семпла SHT21
11VETAL как решил проблему?, а то у меня аналогичный вопрос.
-
11VETAL
- Нашел транзистор. Понюхал.
- Сообщения: 191
- Зарегистрирован: Вт авг 30, 2011 09:59:12
- Откуда: ХАРЬКОВ
Re: Применение семпла SHT21
Вот кусок из работающей программы. Давно уже было.
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("С ");
}
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("С ");
}


