Например TDA7294

Форум РадиоКот • Просмотр темы - Sht21 Не корректное отображение влажности
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт апр 19, 2024 00:15:48

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Чт апр 16, 2020 10:12:16 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Здравствуйте.Я Начинающий.Цель - изготовить ТермоГигроСтат с десятыми долями на семисегменте с применением датчика SHT21.Собрал схему в протеусе 7.10.Температуру отображает коректно(в некоторых диапазонах погрешность 0.1). Влажность отстает на 1 %... Без десятых долей это еще приемлемо. С десятыми долями это ужасно. На датчике 51.8 на семисегментах 51.1 Затем на датчике 51.9 на семисег сразу 52.6. Сделал ЛСД для отлатки. На нем такой же скачек. В некоторых диапазонах погрещность менше . Как с этим бороться? Искал решение,с бубном плясал.
Составлять таблицу Погрешностей ? Может есть другой метод?
Спасибо.Код Фото протеуса во вложении .
I2cstart
I2cwbyte &H80 'адрес микросхемы-датчика SHT21
I2cwbyte &HE5 'выбор измерения влажности в нормальном режиме
Waitms 100 'измерение
I2cstart
I2cwbyte &H81 'чтение результата измерения
I2crbyte Data1 , Ack 'прием старшего байта, ждем слудующий байт
I2crbyte Data2 , Ack 'прием младшего байта
I2crbyte Crc , Nack 'прием байта контрольной суммы (можно на него забить)
I2cstop 'конец общения
' C Даташита
Dataw = Data1
Shift Dataw , Left , 10
Dataw = Dataw + Data2
H = Dataw * 125
H = H / 65536
H = H - 6

T = T * 10 ' T Single Из Т=36,7ххххххх получаем Т=367,хххххх
Cb = Round(t) ' Cb Integer Получаем 367 ровно
Cifri(1) = Cb \ 100 ' Выводим на первую цифру (десятки) тройку Cifri(x)integer
Cifri(5) = cb mod 10 ' Выводим десятую часть Семерку (после точки)
t3 = Cifri(1)* 100 ' t3 integer получаем сотни 300 без 67
cb = cb - t3 ' получаем 67 без 300
Cifri(2) = Cb \ 10 ' Выводим еденици шестерку из 67
' Т выводит хорошо с Н, ниже проблема
H = H * 10
Cb = Round(h)
Cifri(3) = Cb \ 100
Cifri(6) = Cb mod 10
h3 = Cifri(3)* 100
cb = cb - h3

Cifri(4) = Cb \ 10
Cls 'LCD Для отладки
Locate 1 , 1
Lcd h
Wait 1


Вложения:
Sht21.png [21.19 KiB]
Скачиваний: 179
SHT21_Proteus.png [34.18 KiB]
Скачиваний: 187

_________________
Господь дает трудный путь тому, кого наделяет талантом.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 10:37:20 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Доброго времени суток.Думаю, что Bascom при таких вычислениях глючит. Интерпретатор он и в Африке интерпретатор.Придется юзать СИ. Нашел проект с SHT21, часами , датчиком давления и матричным дисплеем. Попробую выдернуть нужные фрагменты кода имея поверхностные знания Си и АСМа. Тяжело будет.Более простого проекта не нашел.

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 10:48:33 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 1
Честно говоря, ничего не понял. Датчик выдает уже готовый результат по и2ц, какие там погрешности при обработке?
Что значит "а датчике 51.8 на семисегментах 51.1 Затем на датчике 51.9 на семисег сразу 52.6" как получено на датчике?
Или это обсуждается сферический протеус, а железа нету?

И кстати, типовая погрешность влажности 2% у этого датчика, а может быть и поболее.

_________________
Меня здесь больше нет


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 11:45:41 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Что значит "а датчике 51.8 на семисегментах 51.1 Затем на датчике 51.9 на семисег сразу 52.6" как получено на датчике?
Или это обсуждается сферический протеус, а железа нету?

И кстати, типовая погрешность влажности 2% у этого датчика, а может быть и поболее.

Да, Железа нет. На Датчике прибавляешь 0.1 на семисегметах (ЛСД) прибавляется сразу 1.5. Нет значений 51.2, 51.3 , 51.4. итд . Про погрешность знаю. Дело в Выводе скачками.Пусть бы с погрешностью ,но без скачков. Или Это глюк Протеуса? Температуру же Выводит. Спасибо

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 11:56:26 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
гдето теряешь точность при вычислениях
например, при умножении или делении на дробь нужнг сначала умножать, а затем делить (и нужно позаботиться об недопущении переполнения регистров, хранящих промежуточные результаты)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 12:06:36 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 1
H = H / 65536
это деление на 2^16? замените сдвигом вправо 16

И ещё, может, явно указать Н тип long? (не знаю этого языка, можно так или нет).

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 12:58:59 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Лонг Выдал ошбку Error : 63 Line : 85 Integer or Long expected for ABS() .Может С какими то переменными
не дружит я потом по эксперементирую.
Сдвинул на 16 .
Dataw = Data1
Shift Dataw , Left ,10'
Dataw = Dataw + Data2
H = Dataw * 125
''''''H = H / 65536
Shift H, right ,16
H = H - 6 Погрешность и скачки увеличились.
Двигал на 12 13 14 15 17 на всякий случай Влево двигал То же на всякий случай. Сделать железо, а как потом 0.1 проверить.

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 13:07:06 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
если после сдвига погрешности-скачки изменились - ну, значит тут что-то не так, и скорее всего, в железе будет нормально.
влево а так же на разное кол-во двигать не надо...
сдвиг вправо - эквивалент делению на 2. соответственно, два сдвига - деление на 4, а 4 - это 2² и т.д. в даташите сказано 2^16, значит сдвиг вправо 16 раз.
сдвиг влево - противоположная операция, т.е. умножение.
При делении/умножении на степени двойки сдвиг предпочтительнее.
Цитата:
а как потом 0.1 проверить
Очень просто. Вместо опроса по и2ц подставите два байта результата, как будто они пришли по шине. Возможно, это получится сразу в дебаггере

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 13:55:52 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Спасибо за исчерпывающий ответ.С битовой арифметикой в какой то степени я знаком, но придется углубить знания. Что от сдвига меняется я давно заметил(двигал в другом месте) ,только пока знатоки не пнут не решался на железо.
Я имел в виду изготовил железо, ""дыхнул"" на датчик, О влажность показывает.Эталон конечно есть (Повереный, Госреестер), но я же не смогу ""дышать "" с шагом 0.1, чтобы проверить скачки.
За Вашу Фразу (Очень просто. Вместо опроса по и2ц подставите два байта результата, как будто они пришли по шине. Возможно, это получится сразу в дебаггере) я зацеплюсь и буду изучать. Хотя с Басиком навряд ли это получиться. Басик из за отсутствия времени и если честно не глубоких знаний. Построил Сушилку с регулятором на ДТШ 22 он врет аж на 12%. В общем это другая тема.

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 14:35:25 
Собутыльник Кота

Карма: 36
Рейтинг сообщений: 808
Зарегистрирован: Ср ноя 29, 2017 06:58:50
Сообщений: 2906
Рейтинг сообщения: 0
Это получится с любым языком. Разница лишь в сложности отладки, что уже может зависеть от языка/средств.
То есть, Вам либо придется делать так:
перед
Dataw = Data1
Shift Dataw , Left , 10
Dataw = Dataw + Data2

выполнить присвоение
Data1 = 12
Data2 = 13
скомпилировать-прошить-посмотреть, затем
Data1 = 12
Data2 = 14 (ну или что там, чтоб 0.1 вышло)
снова скомпилировать-прошить-посмотреть
Это в худшем случае.
Либо, в лучшем случае, Вы эти значения поменяете в режиме отладки, на лету, и пошагово просмотрите, где что и как считается.

_________________
Меня здесь больше нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Сб апр 18, 2020 15:34:57 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Все доходчиво и ясно. в чип и дип SHT21 300р

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Вт апр 21, 2020 07:21:43 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Изображение
Доброго времени суток. Пока нет железяк, промниторил в протеусе считывание Младшего и Старшего байтов Влажности. Как видно все дело в них. Дата2 это и есть десятые и никакой последовательности,то 12 прибавляет, то 16, потом переполняется .Как я понимаю при 50.0 Дата 2 должно быть 00000000.

Это все таки (имхо) глюк протеуса или басика. Попробую И2С и сшт21 написать на си и промониторить.
Вообще я так и не нашел проекта с данным датчиком ,где отображались бы десятые части.Может производитель и заявляет погрешность 2%.Это погрешность не физическая ,т. е . самого измерительного элемента , А погрешность Цифровая.

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Ср апр 29, 2020 22:09:52 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 87
Зарегистрирован: Чт июл 24, 2014 23:09:23
Сообщений: 354
Откуда: Киев
Рейтинг сообщения: 1
Посмотрите как это сделано в библиотеке там все просто и понятно. Сам ей уже давно пользуюсь, все прекрасно работает.
Естественно функции нужно будет переписать под ваше железо.
https://github.com/Csatacsibe/Si7021_dr ... ter/driver


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Чт апр 30, 2020 11:54:10 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Доьрого времени суток.
Посмотрите как это сделано в библиотеке там все просто и понятно. Сам ей уже давно пользуюсь, все прекрасно работает.
Естественно функции нужно будет переписать под ваше железо.
https://github.com/Csatacsibe/Si7021_dr ... ter/driver

Спасибо
Железа пока все еще нет.
Написал ТВИ(И2С) на си. Пока,что Протеус. На шину повесил часы(ds1307) и SHT21.Часы идут,значит протокол работает.SHT21 не считывает данные. Протеус выдает Message ,естественно бесконечно. [SHTX] Command hot implemented or reserved(команда не реализована или зарезервирована)Все вроде по даташиту.
Изображение
Я где то рядом , а догнать не могу.

    Ds1307_Sht21.c
    while(1)
    {
    //DS1307
    I2C_StartCondition();//START
    I2C_SendByte(0b11010000); // Отправим в шину адрес устройства + бит записи 0
    I2C_SendByte(0);// Отправим байт данных, где расположен самый первый регистр
    I2C_StopCondition();//STOP
    _delay_ms(300);
    I2C_StartCondition(); //START
    I2C_SendByte(0b11010001); //Отправим в шину адрес устройства + бит чтения 1
    sec = I2C_ReadByte();//ask
    min = I2C_ReadByte();
    hour = I2C_ReadByte();
    day = I2C_ReadByte();
    date = I2C_ReadByte();
    month = I2C_ReadByte();
    year = I2C_ReadLastByte();//nask
    I2C_StopCondition(); //STOP
    // SHT21
    I2C_StartCondition();//START
    I2C_SendByte(0x80); // Отправим в шину адрес устройства + бит записи 0
    I2C_SendByte(0xE3); // выбор измерения T в нормальном режиме
    _delay_ms (300);
    I2C_StartCondition();// START
    I2C_SendByte(0x81); //Отправим в шину адрес устройства + бит чтения 1
    _delay_ms(300);
    Data1 = I2C_ReadByte();//ask
    Data2 = I2C_ReadByte();
    crc = I2C_ReadLastByte();//nask контрольная сумма
    I2C_StopCondition();//STOP
    //Вывод LCD
    sec = RTC_ConvertFromDec(sec);
    и так далее...


Twi.c
    #include "twi.h"

    void I2C_Init (void) // инициализ.тви
    {
    TWSR = 0;
    TWBR = 0x20;//при 8 мгц получактся 100 кгц
    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);

    }


    void I2C_StartCondition(void)// старт
    {
    TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    while (!(TWCR & (1<<TWINT)));// подождем пока установится TWIN
    }

    void I2C_StopCondition(void)//стоп
    {
    TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
    }

    void I2C_SendByte(unsigned char c) // передача
    {
    TWDR = c;//записываем байт в регистр данных
    TWCR = (1<<TWINT)|(1<<TWEN);//включаем передачу байта
    while (!(TWCR & (1<<TWINT)));//подождем пока установится TWIN
    }

    unsigned char I2C_ReadByte(void)// чтение ask
    {
    TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA);
    while (!(TWCR & (1<<TWINT)));//подождем пока установится TWIN
    return TWDR;//читаем данные
    }

    unsigned char I2C_ReadLastByte(void)//чтение nask
    {
    TWCR = (1<<TWINT)|(1<<TWEN);
    while (!(TWCR & (1<<TWINT)));//подождем пока установится TWIN
    return TWDR;//читаем данные
    }

Где же не доделал.Спасибо

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Sht21 Не корректное отображение влажности
СообщениеДобавлено: Пт май 08, 2020 16:31:25 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 29, 2019 11:28:49
Сообщений: 9
Откуда: Увельский
Рейтинг сообщения: 0
Доброго времени суток. Пока , что опять протеус. Код заработал только в режиме НЕприжатия к земле SCL на время замера.Не в Этом суть.Опять скачками выводится Влажность из за корявого считывания младшего байта датчика(Дата2). ВЫВОД. Язык программирования здесь ни при чем, или протеус или САМ ДАТЧИК.
Делаю железо. Попробую гнать по Усарт в комп живую влажность.Повторюсь, не представляю ,как я буду"дышать" на датчик с шагом 0.1. Ведь цель вывести влагу без скачков с шагом 0.1 .Спасибо

_________________
Господь дает трудный путь тому, кого наделяет талантом.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y