Например TDA7294

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





Текущее время: Пт июн 27, 2025 14:37:23

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


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



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Датчик температуры и влажности SHTC3
СообщениеДобавлено: Сб фев 12, 2022 23:43:05 
Родился

Зарегистрирован: Сб фев 12, 2022 23:20:56
Сообщений: 1
Рейтинг сообщения: 0
Не нашел темы про датчик температуры и влажности SHTC3. Может кому пригодится функция активации и чтения влажности и температуры. Все читается при условии исправности датчика. Использовал программный I2C на частоту 200 кгц.

PINB.0 SCL
PINB.1 SDA
// Глобальные переменные
float RH;
float T;
unsigned char block[6];

// SHTC3 CRC Проверка
unsigned char SHTC3_CRC_CHECK(unsigned int DAT, unsigned char CRC_DAT)
{
unsigned char i,t,temp;
unsigned char CRC_BYTE;
CRC_BYTE=0xFF;
temp=(DAT>>8)&0xFF;
for(t=0;t<2;t++)
{
CRC_BYTE^=temp;
for(i=0;i<8;i++)
{
if(CRC_BYTE&0x80)
{
CRC_BYTE<<=1;
CRC_BYTE^=0x31;
}
else
{
CRC_BYTE<<=1;
}
}
if(t==0)
{
temp=DAT&0xFF;
}
}
if(CRC_BYTE==CRC_DAT)
{
temp=1;
}
else
{
temp=0;
}
return temp;
}

// чтение данных
void i2c_read_block(unsigned char i)
{
unsigned char a;
for(a=0;a<i;a++)
{
block[a]=i2c_read(1);
}
}
// Пробуждение, преобразование, чтение данных, сон
void SHTC_read(void)
{
unsigned char tmp;
unsigned int T_temp,RH_temp,CRC_T_temp,CRC_RH_temp;

i2c_start();
i2c_write(0xE0); // Адрес микросхемы и устанавливаем запись
i2c_write(0x35); // Старший байт пробуждения
i2c_write(0x17); // младший байт пробуждения
i2c_stop(); // stop

delay_us(300); // пауза на пробуждение
i2c_start(); // отсылка стартовой последовательности (делаем restart)
i2c_write(0xE0); // Адрес микросхемы и устанавливаем запись
i2c_write(0x5C); // Старший байт начала преобразования (0x7C если читать сначала температуру, а потом влажность
i2c_write(0x24); // младший байт начала преобразования (0xA2
i2c_stop();

tmp=DDRB; // переводим В0 и В1 (предварительно сохраняя) в режим входов, т.к. аппаратный I2C держит на В0 и В1 (SCL и SDA)
DDRB|=0b11111100; // высокий уровень, а SHTC3 на шине SCL будет держать "0" до конца преобразования
while(PINB.0==0); // ждем пока SCL=0
DDRB=tmp; // восстанавливаем DDRB

i2c_start();
i2c_write(0xE1); // Адрес микросхемы и устанавливаем чтение
i2c_read_block(6); // функция чтения влажности и температуры
i2c_stop();

i2c_start(); // отсылка стартовой последовательности
i2c_write(0xE0); // Адрес микросхемы и устанавливаем запись
i2c_write(0xB0); // старший байт команды SLEEP
i2c_write(0x98); // младший байт
i2c_stop(); // stop

RH_temp=block[0]; // читаем старший байт влажности из буфера
RH_temp=RH_temp<<8; // сдвиг на 8 разрядов влево
RH_temp|=block[1]; // читаем младший байт
CRC_RH_temp=block[2]; //читаем CRC

T_temp=block[3]; // читаем старший байт температуры из буфера
T_temp=T_temp<<8; // сдвиг на 8 разрядов влево
T_temp|=block[4]; // читаем младший байт
CRC_T_temp=block[5]; //читаем CRC
// проверить данные
if(SHTC3_CRC_CHECK(RH_temp,CRC_RH_temp))
{
RH=(float)(RH_temp)*100/65536; // Расчитать влажность
}
if(SHTC3_CRC_CHECK(T_temp,CRC_T_temp))
{
T=(float)(T_temp)*175/65536-45; // Рассчитать температуру
}
}

Может что упустил, или что не понятно-отвечу


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

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


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

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


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

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


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