Например TDA7294

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

Текущее время: Чт мар 12, 2026 06:27:16

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с датчиком HP303B
СообщениеДобавлено: Вс фев 15, 2026 21:14:32 
Прорезались зубы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Ср дек 31, 2008 01:55:19
Сообщений: 249
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Доброго времени суток.
Пытаюсь получить данные с датчика HP303B. Все делаю по даташиту, но, выходит лажа. Может там есть подводные камни?
Если у кого-нибудь есть пример работы с ним поделитесь плиз. Только без библиотек.

_________________
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.


Вернуться наверх
 
 Заголовок сообщения: Re: Проблема с датчиком HP303B
СообщениеДобавлено: Вс фев 15, 2026 21:34:23 
Вымогатель припоя
Аватар пользователя

Карма: 2
Рейтинг сообщений: 19
Зарегистрирован: Пн сен 15, 2025 08:43:23
Сообщений: 519
Откуда: Маленький СССР посреди шариатской республики
Рейтинг сообщения: 0
Какая именно лажа выходит? Можно начать отлаживать код, напрямую подключив датчик к компьютеру через переходник USB-I2C.
Конкретно с этим я не работал, но под всякие попсовые с алика утилитку написал. Накидал кучу датчиков на макетку, но не могу никак сравнить в широком диапазоне: дома работают, а удаленно какой-то гад начинает блокировать шину, и даже питание туда-сюда дергать не помогает. Паять надо…

_________________
Windows must die!


Вернуться наверх
 
 Заголовок сообщения: Re: Проблема с датчиком HP303B
СообщениеДобавлено: Вс фев 15, 2026 21:40:43 
Прорезались зубы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Ср дек 31, 2008 01:55:19
Сообщений: 249
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
При пересчёте по формуле не соответствуют с реальтой температой.

_________________
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.


Вернуться наверх
 
 Заголовок сообщения: Re: Проблема с датчиком HP303B
СообщениеДобавлено: Вс фев 15, 2026 21:45:40 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
При пересчёте по формуле не соответствуют с реальтой температой.
Выложите код, которым пересчитываете, и кто-нить поможет. Иначе - скорее всего придётся долго ждать.
Ссылку на даташит + формулу + код.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Проблема с датчиком HP303B
СообщениеДобавлено: Пн фев 16, 2026 15:40:56 
Прорезались зубы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Ср дек 31, 2008 01:55:19
Сообщений: 249
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
u8 Data_HP303_COEF[18]={0};
u32 Data_HP303_TMP[32]={0};
u32 Data_HP303_PRS[32]={0};

u8 TMP_COEF_SRCE=0;
float temper;

void HP303_Init (void)
{
u8 temp;// = 0x08;
u8 count;// = 1;
while(!(SPI1_ReadByte(0x08) & (1<<6))){};//инициализация датчика
while(!(SPI1_ReadByte(0x08) & (1<<7))){};//коэффициенты доступны (после старта датчика)

//читаем калибровочные данные с 0x10 до 0x21
temp = 0x10;
count = 18;
Data_HP303_Read(temp, count, &Data_HP303_COEF[0]);

//записываем конфигурацию в 0x06
temp = 0b00000010;//
SPI1_WreadByte(0x06, temp);
delay_ms(10);

temp = 0b00000010;
SPI1_WreadByte(0x07, temp);
delay_ms(10);

temp = 0b00000000;//выкл. FIFO
SPI1_WreadByte(0x09, temp);
delay_ms(10);

temp = 0x07;//Непрерывное преобразование
SPI1_WreadByte(0x08, temp);

delay_ms(230);
data_Temp_Davl();
}

void data_Temp_Davl(void)
{
TMP_Bx();
temper = HP303_Convert_Temperature(&Data_HP303_TMP[0], &Data_HP303_COEF[0]);
}
//Чтение температуры
void TMP_Bx (void)
{
u8 i=0;
u8 reg_addr = 0x00;
Data_HP303_PRS[i] = (uint32_t)SPI1_ReadByte(reg_addr)<<16;
Data_HP303_PRS[i] |= (uint32_t)SPI1_ReadByte(reg_addr+1)<<8;
Data_HP303_PRS[i] |= (uint32_t)SPI1_ReadByte(reg_addr+2);
reg_addr = 0x03;
Data_HP303_TMP[i] = (uint32_t)SPI1_ReadByte(reg_addr)<<16;
Data_HP303_TMP[i] |= (uint32_t)SPI1_ReadByte(reg_addr+1)<<8;
Data_HP303_TMP[i] |= (uint32_t)SPI1_ReadByte(reg_addr+2);
}

//Чтение
void Data_HP303_Read(u8 reg_addr, u8 count, u8 * Data)
{
for (u8 i=0; i<count; i++)
{
Data[i]=SPI1_ReadByte(reg_addr+i);
}
}

//Запись
void Data_HP303_Wread(u8 reg, u8 data)
{
SPI1_WreadByte(reg, data);
}

float HP303_Convert_Temperature(u32 *HP_303_TMP, u8 *Data_HP303_COEF)
{
int32_t temp_raw=0;
int32_t temp_raw1=0;
float tem;
temp_raw1 = (int32_t)HP_303_TMP[0];
tem = (float)temp_raw1/3670016.0f;//524288;
int16_t cof0=(int16_t)(((Data_HP303_COEF[0] &0xFF) <<4)|
((Data_HP303_COEF[1] & 0xF0)>>4));
int16_t cof1 = (int16_t)(((Data_HP303_COEF[1]&0x0F)<<8) |
(Data_HP303_COEF[2] & 0xFF));
return ((float)cof0*0.5f+(float)cof1*tem);//temperature
}

Добавлено after 18 minutes 40 seconds:
DataSheet
Cof0-0x0112
Cof1-0x0EE4
4times - 3670016
У меня температура получается 16,6грС. А должна быть в районе 22


Вложения:
HP303B.pdf [1.8 MiB]
Скачиваний: 13

_________________
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.
Вернуться наверх
 
 Заголовок сообщения: Re: Проблема с датчиком HP303B
СообщениеДобавлено: Вт фев 17, 2026 08:02:36 
Мудрый кот

Карма: -8
Рейтинг сообщений: 196
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1717
Рейтинг сообщения: 0
Написано очень "грязно" и неоптимально, но на первый взгляд не видно явных ошибок в пересчёте.
Единственные вопросы:
Где синхронизация с процессом измерения (ожидание готовности данных, определения количества готовых данных, типа считываемых данных, обработка случая переполнения, ...)? В даташите указано про наличие FIFO, в которое пишутся результаты измерения температуры+давления, почему не используете (и при этом запускаете "непрерывное преобразование" вместо "преобразования по запросу")?
Почему делаете '|=' со старыми данными в "Data_HP303_PRS[i] |= (uint32_t)SPI1_ReadByte"?
Что делает SPI1_ReadByte()? И где управление CS?

PS: И оформляйте посты корректно - по правилам форума код должен быть обрамлён соответствующим тэгом. В вашем неряшливо оформленном коде даже нет желания разбираться.


Вернуться наверх
 
 Заголовок сообщения: Re: Проблема с датчиком HP303B
СообщениеДобавлено: Вт фев 17, 2026 09:22:00 
Прорезались зубы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Ср дек 31, 2008 01:55:19
Сообщений: 249
Откуда: Санкт-Петербург
Рейтинг сообщения: 0
Добрый день. Извините за неряшливость. Управление CS происходит в другой функции. Data_HP303_PRS[i] |= (uint32_t)SPI1_ReadByte" - преобразование трех 8ми битных значений в 32бита т. к. данные поступают отдельно.
Fifo пока не использую, работаю с одними данными. Запросы данных по времени.

_________________
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили "Титаник".
Я всегда делаю то, что не умею, иначе как я научусь?! Когда Муза приходит ко мне, то застает меня за работой! - Пикассо.


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

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


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

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


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