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

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

Добавлено: Сб окт 01, 2011 00:41:22
myx
Статья тут http://radiokot.ru/konkurs/21/

Температуру отображает вроде нормально. Но не корректно показывает влажность. До 68% показывает как попало, а потом при повышении влажности начинает показывать в обратную сторону.
С датчиком все в порядке - проверено. Проблема в программе.

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

Добавлено: Сб окт 01, 2011 09:03:12
NickNI
myx писал(а):Статья тут http://radiokot.ru/konkurs/21/

С датчиком все в порядке - проверено. Проблема в программе.
Может датчик надо подержать "в бане", как описано здесь:
http://we.easyelectronics.ru/part/datch ... sht21.html :dont_know:

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

Добавлено: Сб окт 01, 2011 09:07:26
11VETAL
Если есть желание могу выложить свой переделанный код, но под ЖКИ. В бане не выдерживал, но показывает правильно.
В исходнике ошибки.

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

Добавлено: Сб окт 01, 2011 09:16:44
NickNI
Да уж... Честно отдал за эту работу пять лап... :( А не начал собирать, т.к. "халява" не пришла. :(

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

Добавлено: Сб окт 01, 2011 11:37:46
myx
NickNI писал(а):
myx писал(а):Статья тут http://radiokot.ru/konkurs/21/

С датчиком все в порядке - проверено. Проблема в программе.
Может датчик надо подержать "в бане", как описано здесь:
http://we.easyelectronics.ru/part/datch ... sht21.html :dont_know:
Дело не в выдерживании. Если не подождать некоторое время, то датчик незначительно брешет, что проходит через несколько часов.
Я датчик отключаю от этого проекта и сразу подключаю к другому, в котором все нормально показывает.
С железом все в порядке. Проблема в прошивке!

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

Добавлено: Сб окт 01, 2011 11:39:40
myx
11VETAL писал(а):Если есть желание могу выложить свой переделанный код, но под ЖКИ. В бане не выдерживал, но показывает правильно.
В исходнике ошибки.
Может этот немного исправить?

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

Добавлено: Сб окт 01, 2011 12:01:23
11VETAL
тогда разбирайся сам. Вот моя функция измерения влажности:


void humm(void)
{ unsigned int h_1;
float h;

char rh=0;
char drob_rh=0;


i2c_start();
i2c_write(0x80); //команда записи
i2c_write(0xE5); //режим HOLD для влажности
i2c_start();
i2c_write(0x81); //команда чтения
delay_ms(40);

h_1=i2c_read(1); // read msb
h_1=h_1<<8; //сдвигаем считаный байт на 8 бит
h_1|=i2c_read(0); // read lsb и выполняем побитное или со значением h_1
//присваиваем полученное значение h_1
i2c_stop();

h_1&= ~0x0003; //очищаем последние 2 бита

h= (-6+(h_1/524.288));

rh=abs(h);
drob_rh=abs((h-rh)*10);

sprintf(lcd_buffer,"RH=%+2u.%u%% ",rh,drob_rh); //записуемв масив для экрана
lcd_gotoxy (0,1);
__print_lcd(lcd_buffer); //выводим масив на LCD

}

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

Добавлено: Вс окт 09, 2011 23:06:45
myx
Кроме проекта с сайта we.easyelectronics.ru/part/datchik-temperatury-i-vlazhnosti-sht21.html (вариант подключения к компу) к сожалению, не видел еще нормально работающего проекта на SHT21.

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

Добавлено: Вс окт 09, 2011 23:24:41
11VETAL
myx писал(а):Кроме проекта с сайта we.easyelectronics.ru/part/datchik-temperatury-i-vlazhnosti-sht21.html (вариант подключения к компу) к сожалению, не видел еще нормально работающего проекта на SHT21.
Кто мешает. Сделай сам. :)) Я же предлагал свой вариант. Тебе не нужен. :?

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

Добавлено: Пн окт 24, 2011 08:52:33
Rombor
Собрал, работает. Температуру врет на +3 градуса, влажность на -20%.
Просьба к автору ввести кнопочку коррекции

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

Добавлено: Пн окт 24, 2011 12:49:03
Tugarin
А эту схемку измерителя на SHT21 - http://radiokot.ru/konkurs/11/ никто не собирал?
Как-то странно что оказалось очень похожих две одинаковые работы может их нужно было объединить в одну?

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

Добавлено: Пт ноя 18, 2011 20:53:02
ewgeny7
Что-то не сложилось у меня до сих пор заглянуть сюда.
Отвечаю сразу всем:
У меня показывает нормально и температуру, и влажность. Благо, работаю на фармацевтике и приборов там достаточно.
Я сравнил формулу рачета влажности свою и 11VETAL, разницы НИКАКОЙ, что нетрудно увидеть по исходникам.
Касательно температуры - я не сразу допёр, почему у меня показывал завышенную температуру. Оказалось, не стОит ставить стабилизатор на ту же платку, где и SHT21 чалится. Убрал стаб в корпус, показания стали много лучше. Но, еще одно НО. Для точных показаний датчик не должен быть в "стоячем" воздухе, он, гад такой, все равно нагревается (хоть и на доли градуса). Разместив свой девайс неподалеку от вентиляционной вытяжки, я таки увидел точные показания температуры. Сравнивал с промышленным термометром и термометром на 18В20.
Вот такая ботва.
Возможно, хорошим решением будет подавать на датчик не 3,3, а несколько меньшее напряжение. Например, 3.0. Надо пробовать.

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

Добавлено: Чт дек 08, 2011 23:27:04
foxit
11VETAL писал(а):Если есть желание могу выложить свой переделанный код, но под ЖКИ. В бане не выдерживал, но показывает правильно.
Выложите исходник если не можно.

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

Добавлено: Вс фев 12, 2012 08:57:47
nkrk
Уважаемые пожалуйста подскажите как проверить работоспособность датчика sht21
Пишу код на ATmega8 под winavr

пример кода >>

Код: Выделить всё

    unsigned char ret1 = 0, ret2 = 0;

    s = i2c_start(0x80);       // set device address and write mode
    if ( s ) {
        /* failed to issue start condition, possibly no device found */
        i2c_stop();
    }else {
        /* issuing start condition ok, device accessible */
        i2c_write(0xF5);                       // получить влажность
        i2c_stop();                            // set stop conditon = release bus
        s = i2c_start( 0x81 );       // set device address and read mode
        
	_delay_ms(100);
		                                                                  
        i2c_rep_start( 0x81 );       // set device address and read mode
        ret1 = i2c_readAck();                    // read one byte
        ret2 = i2c_readAck();                    // read one byte
        i2c_readNak();                    // read one byte
        i2c_stop();
        
        ret = ret1;
    }
    
    return ret;
в итоге с датчика ничего не возвращается даже если пытаюсь прочитать регистр настроек