Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32 ds18b20

Вт июн 14, 2022 00:13:15

Не 0.5% погрешность, а ±0.5°C Accuracy from -10°C to +85°C. А калибровать датчик лично ничего не хочу: покупаю, пишу цифры, и работает.
Последний раз редактировалось veso74 Вт июн 14, 2022 00:16:45, всего редактировалось 1 раз.

Re: stm32 ds18b20

Вт июн 14, 2022 00:15:44

Ваша правда.
Думал одно, напечаталось другое.
Но, от этого, недостатки DS18B20 не менее значимы.

Re: stm32 ds18b20

Вт июн 14, 2022 00:17:08

... недостатки DS18B20 не менее значимы.

Приведите пример, я нахожу только плюсы :).
Кто-то до меня сделал датчик, калибровал, я просто включаю его и пользуюсь ...
Ну относительно, на первое приближение конечно ...
Последний раз редактировалось veso74 Вт июн 14, 2022 00:20:10, всего редактировалось 1 раз.

Re: stm32 ds18b20

Вт июн 14, 2022 00:19:48

Так, я же написал.
Низкая точность.
Очень медленная реакция.
В некоторых применениях, крупный корпус.
Последний раз редактировалось Карбофос Вт июн 14, 2022 00:21:02, всего редактировалось 1 раз.

Re: stm32 ds18b20

Вт июн 14, 2022 00:20:26

Код:
... Очень медленная реакция.

Странное заявление. Для тепловой времеконстант, которая больше похожа на интегрирование из-за массы.
И почему мы так спешим за измерение температурой? :) рассчитайте беглло времяконстант изменения P * массы нагревателя-нагрузки?
Последний раз редактировалось veso74 Вт июн 14, 2022 01:15:16, всего редактировалось 2 раз(а).

Re: stm32 ds18b20

Вт июн 14, 2022 00:23:12

Странный вопрос.
Надо знать температуру здесь и сейчас.
Спасибо за внимание.

Re: stm32 ds18b20

Вт июн 14, 2022 00:25:32

Можете измерить в 750 мс для 12 бит. если медленное, может быть, меньше бит.
Ето медленно для датчика вес 3,00 грамма? Нагрев или охлаждение с окружающими металлами не будет быстрее.

Re: stm32 ds18b20

Вт июн 14, 2022 00:32:02

main.c

ntc.c


analog.c

4 канала ADC * 18 usec/канал * 128 измерений = 9.216 msec

Re: stm32 ds18b20

Вт июн 14, 2022 00:53:10

MF52 Time Constant of ≤7 seconds in still air

Если хтите измерить в MHz, ничего не изменит.
Код:
Available tolerances: ±1%, ±2%, ±3% and ±5%

и беспокоит таблица, какие изменения будут происходить без отдельный выбор датчика.
Напр. настаиваю на 43.0 градусах, сколько изменится при случайным датчиком из пакета с датчиками.
Последний раз редактировалось veso74 Вт июн 14, 2022 01:14:24, всего редактировалось 3 раз(а).

Re: stm32 ds18b20

Вт июн 14, 2022 00:55:36

Это-же фильтр, среднее берётся.
И, откуда ты эти 7 секунд взял? Придумал?
Или, в сферическом вакууме?
Последний раз редактировалось Карбофос Вт июн 14, 2022 00:58:08, всего редактировалось 1 раз.

Re: stm32 ds18b20

Вт июн 14, 2022 00:57:49

из пдф-а MF52

Re: stm32 ds18b20

Вт июн 14, 2022 00:58:50

В static air? ))
А для DS18B20 в static air какая константа?

Всё, досвидос.
Последний раз редактировалось Карбофос Вт июн 14, 2022 01:00:14, всего редактировалось 1 раз.

Re: stm32 ds18b20

Вт июн 14, 2022 01:00:10

В воздухе, в покое, без обдува.
---
Более - весит больше в граммах. Тепловая времяконстанта, интегратор. Вот почему и писание "датчик - медленный" не имеет смысла для датчика температуры, потому что скорость физическое изменение температуры массы больше, чем максимуме (750 мс) для одного измерения.

info ds18x

Вт июн 14, 2022 01:20:51

к сведению...

разрешение:
ds1821 = 0,01
для всего остального = 0,0625

т.к. датчик медный - то точность см. медный датчик..
т.к. корпус пластик, то приход к измеряемой температуре - около 5 минут...

----------
ну и скажу крамолу....
разогрев датчика = около ДЕСЯТЫХ градуса...

Re: stm32 ds18b20

Вт июн 14, 2022 01:33:02

Да, самонагрев не высокий. При 3 сек подготовки/3 сек снятия данных зимой (около 11-13 градусов), при вкл. первые минуты увеличивается примерно с 0,2-0,3 оC. 5V, 4,7 kOm.

Re: stm32 ds18b20

Вт июн 14, 2022 16:42:07


Хорошо у меня есть переменная int tt=int16_t curr_temp;А вторая переменная это массив?и почему экстерн.?И как всё это вывести на lcd7

Потому что в сообщении выше я сказал, что массив используется другим файлом исходника (ds18b20.c), который в него СЧИТЫВАЕТ Scratch Pad из датчика. Была у меня такая потребность в процессе разработки. Потом файл перетёк в этот проект. Просто потому что работает и позволяет делать интересные вещи асинхронно.

Так покажите полную картину вывода на экран LCD?.А то кусочек секса не интересно.

На какой LCD? На графический? Давайте лучше возьму пример для платы с экраном e-ink, на котором у меня метео-прогноз дёргается из интернетов.
Код:
   snprintf(txt,  sizeof(txt),  "%d.%d°", curr_temp/10, curr_temp % 10); // Форматируем строку из примера выше. Число 77 станет "7.7°"
   get_text_bounds((G_FONT_t *)&Tahoma16, txt, &x, &y, &l1, &h); // Вычисляем габариты строки (сколько она займёт места на экране). Значения размеров будут помещены в переменные l1 и h
   write_string((G_FONT_t *)&Tahoma16, txt,  &l1, &cy, framebuffer); // Вызываем функцию отрисовки полученой выше строки в экранный буфер framebuffer.
// И где-то сильно позже будет вызвана функция отправки данных на дисплей.

   // Процесс вывода из буфера на экран.
   epd_init();
   // ESP_LOGI("Renderer", "EPD Power ON");
   epd_poweron();
   // ESP_LOGI("Renderer", "EPD CLS");
   epd_clear();
   // ESP_LOGI("Renderer", "EPD Draw");
   epd_draw_grayscale_image(epd_full_screen(), framebuffer);
   // ESP_LOGI("Renderer", "EPD Power OFF");
   epd_poweroff_all();

Как работает ВАШ дисплей - я не знаю, и предлагаю разобраться с выводом в него уже самостоятельно.

Вы уже БУКВАЛЬНО просите за вас доделать проект.
Всё разжёвано и разложено по полочкам. (Фу, я это представил >_<), осталось только собрать код воедино.

1. Каким угодно способом отправляете датчику команду 0xCC, 0x44 (Skip ROM + Convert Temp)
2. Ждёте, пока датчик не сконвертирует температуру, либо время от времени читаете одиночный тайм-слот. Если датчик подтягивает его в состояние "0" - всё ещё происходит преобразование температуры. Если перестал - датчик готов к чтению данных.
3. Читаете температуру. В моём случае, она оказывается в массиве ow_Answ[] со всеми остальными данными из Scratch Pad'а. (Я проверял CRC)
Изображение
4. Собираем два байта в кучу (uint8_t | uint8_t) -> (int16_t). По вкусу: Выделяем целое, приводим дробное... изголяемся как хотим, в общем.
5. Выводим куда угодно.

Опять же, в случае с моим кодом, я выводил на управляемую светодиодную ленту, потому участок кода выглядит подобным образом:


https://chipenable.ru/index.php/program ... 18b20.html - Вот сайт, с которого я взял картинку.

Re: stm32 ds18b20

Чт июн 16, 2022 19:50:12

Вообщем как то так вышло правда взял проект на Stm32 и посмотрел .Ну в протеусе получилось

Я не знаю как это вышло.Нужно всё проанализировать.Тут больше эксперемент.Спасибо.Попробую 2 3 датчика .Хотелось бы влажность измерять.

Re: stm32 ds18b20

Пт июн 17, 2022 07:09:15

У Вас код для AVR в примере.
И всё же, смотрите:
У Вас функция "int dt_check(void)" уже возвращает знаковое число, а вы его пишете в беззнаковую переменную:
Код:
unsigned int temper_tt;
temper_tt=dt_check();

1. Замените "unsigned int temper_tt;" на "int temper_tt;"
2. Проверяйте знак самой переменной:
Код:
char ds18b20_GetSign(unsigned int dt)
{
  //Проверим 11-й бит
  if (dt&(1<<11)) return 1;
  else return 0;
}

char ds18b20_GetSign(int dt)
{
  if (dt < 0) return 1;
  else return 0;
}

3. Раз переменная стала знаковой - используйте деление (да, это медленнее, но даёт надёжный результат).
Код:
//преобразование температуры в единицы
char converttemp (unsigned int tt)
{
   char t = tt>>4;//сдвиг и отсечение части старшего байта
   return t;
}

char converttemp (int tt)
{
   char t = tt / 16;
   return t;
}


И раз уж на то пошло....
Код:
char text_array[5];
// Работает со значениями -55~127 градусов
// [-55n ] n = NULL-терминатор строки
// [-18n ]
// [ 0n  ]
// [ 22n ]
// [ 127n]
void temp_to_text(int temp, chat *text) {
   int temp_value = temp;
   if (temp_value < 0) {
      text[0] = '-';
      temp_value = -temp_value;
   } else {
      text[0] = ' ';
   }
   // Здесь temp_value всегда имеет положительное значение.
   if (temp_value < 10) {
      // Значения 0..9
      text[1] = '0' + temp_value;
      text[2] = 0;
   } else if (temp_value < 100) {
      // Значения 10..99
      text[1] = '0' + (temp_value / 10);
      text[2] = '0' + (temp_value % 10);
      text[3] = 0;
   } else {
      // Значения 100..127
      text[1] = '1'; // Потому что не больше 127
      temp_value = temp_value % 100;
      text[2] = '0' + (temp_value / 10);
      text[3] = '0' + (temp_value % 10);
      text[4] = 0;
   };
}

Функция заменяет на входе ваш sprintf(bufer0,"t=%c%2d *C\n\r",S,temper);

temp_to_text(-5, text_array); - в результате в объявленной переменной text_array будет содержаться "-5n??". n = нулевой байт (является признаком конца строки), "?" - байт, который не менялся функцией и сохраняет предыдущее значение, либо мусор.
temp_to_text(0, text_array); -> " 0n??"
temp_to_text(-58, text_array); -> "-58n?"
temp_to_text(199, text_array); -> " 199n"
Если нужен другой вариант окончания строки - нужно соответственно изменить фукнцию, либо копировать результат из переменной в другое место.

Re: stm32 ds18b20

Пт июн 17, 2022 07:21:06

Я заменил на uint16_t эту переменную.Спасибо за информацию я ценю людей которые больше меня знают.Наверное главное научится думать анализировать и эксперементировать.Я правда так машину разбил.Не умел ездить.Если боишься не садись.Наверное так и здесь.Сначала теория потом практика.А насчёт библиотеки.Да есть варианты.В stm32 i2c я вообще без функций обошёлся голые регистры и заработало.Но 1-wire сложнее на порядок.

Re: stm32 ds18b20

Пт июн 17, 2022 07:48:37

1-wire не сложнее, он требует точных таймингов.
Самое смешное, что я сначала смог разобраться с работой как раз этого протокола, а уже потом заставил работать I2C на ATMega. Были там у меня какие-то странные заморочки.
На STM32 i2c... интересный. На новых чипах он удобнее, а вот на F103 - ну... там он требует больше телодвижений.
Ответить