Нужна помощь

speidg
Offline
Зарегистрирован: 11.03.2019

Здравствуйте

Возникла проблема. Делал я свой маленький проект и столкнулс с тем что скетч не помещается на ардуино.

А хотелось еще некоторые вещи добавить

может может кто подсказать в каком направлении копать?

#include <UTFT.h>                                      // подключаем библиотеку UTFT
#include <Wire.h>  
#include <DS1307.h>
#include <iarduino_RTC.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//#include <PCF8574.h>
#include "DHT.h"
#include <RH_ASK.h>
//#include <SPI.h>

RH_ASK driver;
// структура должна быть в точности одинакова для передатчика и для приемника!
struct SEND_DATA_STRUCTURE{
  uint8_t tempWater;
  uint8_t ounces;
  uint8_t result;
  uint8_t sensorValue;
};
SEND_DATA_STRUCTURE mydata;
byte tx_buf[sizeof(mydata)] = {};


#define DHTPIN 13                                       // номер пина, к которому подсоединен датчик температуры и влажности
DHT dht(DHTPIN, DHT11);                                 // Инициируем датчик

iarduino_RTC time(RTC_DS3231);                          //Запуск часов реального времени
DS1307 rtc(SDA, SCL);                                     //Инициализируем входы
extern uint8_t SmallFont[];                            // подключаем маленький шрифт
extern uint8_t BigFont[];                              // подключаем большой шрифт
extern uint8_t DotMatrix_M[];                           //Подключаем шрифт DotMatrix_M
UTFT myGLCD(TFT28UNO,    A2,A1,A3,A4,A0);           // тип дисплея 2,8  UNO  (320x240 chip ILI9341)
  
 OneWire oneWire(10);                                  // вход датчиков 18b20 датчики температуры
 DallasTemperature ds(&oneWire);                       //Запуск датчиков

DeviceAddress Temp_Out = {0x28, 0xFF, 0x60, 0x1, 0xA7, 0x16, 0x3, 0xFE};    //Адреса датчиков температуры
DeviceAddress Temp_Cool = {0x28, 0xFF, 0x3, 0xD0, 0xA6, 0x16, 0x5, 0x59};
  

//PCF8574 expander;                                 //Включение расширителя портов

void setup()
{
  myGLCD.InitLCD();                               // инициируем дисплей (в качестве параметра данной функции можно указать ориентацию дисплея: PORTRAIT или LANDSCAPE), по умолчанию LANDSCAPE - горизонтальная ориентация
  time.begin();                                   //Запускаем часы    
  myGLCD.fillScr(0, 0, 0);                        //Закрашиваем дисплей черным цветом
  dht.begin();                                    //Запуск часов
  ds.begin();                                     //Запуск датчиков температуры
  pinMode(12, OUTPUT); 
//  expander.begin(0x3A);                           //Запуск расширителя    
//  expander.pinMode(0, OUTPUT);                    //Используемый пин  
  Serial.begin(9600); // Скорость передачиданных
    if (!driver.init())
    Serial.println("init failed");  
    
  
}
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
uint8_t buflen = sizeof(buf);  

void loop()

{
myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
myGLCD.print("WATER", LEFT, 70);                   // выводим текст на дисплей
myGLCD.print("GAZ", RIGHT, 70);                     //Вывод текста уровня воды
myGLCD.print("TEMP IN", CENTER, 70);               //Выводим текст температуру внутри
myGLCD.setFont(SmallFont);                            // устанавливаем маленький шрифт
myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
myGLCD.print("TEMP WATER", LEFT, 150);                   // выводим текст на дисплей
myGLCD.print("TEMP COOL", RIGHT, 150);                   // выводим текст на дисплей
myGLCD.print("TEMP OUT", CENTER, 150);                 // выводим текст на дисплей 
  
  if (driver.recv(buf,&buflen)) // Non-blocking
   {
    
    memcpy(&mydata, buf, sizeof(mydata));



        uint8_t result=(int)round(mydata.result);
         uint8_t sensorValue=(int)round(mydata.sensorValue);
          uint8_t tempWater=(int)round(mydata.tempWater);
            uint8_t ounces=(int)round(mydata.ounces);

myGLCD.setFont(DotMatrix_M);                     // устанавливаем цифровой шрифт
myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
myGLCD.print(time.gettime("d-m-Y H:i:s"), CENTER, 10);                   // выводим время на дисплей
        
myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
//myGLCD.print("   %", LEFT, 90); 
myGLCD.printNumI(result, LEFT, 90);              //Выводим переменную уровень воды
//myGLCD.print("   %", RIGHT, 90);
myGLCD.printNumI(sensorValue, 260, 90);                //Выводим переменную уровень газа
  
  //Ввыводим температуру внутри
int Temp_IN = dht.readTemperature(); 
//myGLCD.print("     `C", 110, 90);
myGLCD.printNumI(Temp_IN, CENTER, 90);             //Выводим переменную температура внутри 

myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста


ds.requestTemperatures();                             // считываем температуру с датчиков

//myGLCD.print("     `C", 110, 170);
myGLCD.printNumI(ds.getTempC(Temp_Out), CENTER, 170);  //Выводим переменную температура
//myGLCD.print("    `C", LEFT, 170);
myGLCD.printNumI(tempWater, LEFT, 170);                //Выводим переменную температура воды 
//myGLCD.print("   `C", RIGHT, 170);
myGLCD.printNumI(ds.getTempC(Temp_Cool), 220, 170);  //Выводим переменную температура

    Serial.print("Температура ");
    Serial.print( tempWater );
    Serial.println("C"); 
    Serial.print("Уровень газа ");  
    Serial.print( sensorValue );  
    Serial.println("%");
    Serial.print("Уровень воды ");  
    Serial.print( result );  
    Serial.println("%");

  }


}

Библиотеку UTFT настроил только на свой экран.

может можно остальные библиотеки сократить или без них сделать?

b707
Offline
Зарегистрирован: 26.05.2017

а что не помещается - программа во флеш или данные в ОЗУ ?

Что пишет компилятор после сборки скетча?

speidg
Offline
Зарегистрирован: 11.03.2019

размер 32238 байт и если убрать закоментированые строки размер становится больше 32256 и компилятор не загружает скетч.

А если еще включить библиотеку расширителя портов то еще несколько Кбайт добовляется.

Просто думал что уже закончил уже собрал все в корпус, а памяти не хватает.

sadman41
Offline
Зарегистрирован: 19.10.2016

Самое простое - не использовать Serial: 

// Serial.begin(9600); 

и т.д.

speidg
Offline
Зарегистрирован: 11.03.2019

Serial нужен

выводится на сотовый через модуль bluetooth

speidg
Offline
Зарегистрирован: 11.03.2019
Sketch uses 32638 bytes (101%) of program storage space. Maximum is 32256 bytes.
Global variables use 1405 bytes (68%) of dynamic memory, leaving 643 bytes for local variables. Maximum is 2048 bytes.
Сообщение компилятора
b707
Offline
Зарегистрирован: 26.05.2017

у вас стоит библиотека UTFT от каких-то продавцов. Попробуйте скачать нормальную с гитхаба - может будет меньше места занимать. Не должна библиотека дисплея быть такой огромной.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

speidg пишет:
маленький проект и столкнулс с тем что скетч не помещается на ардуино.
Хрена-се, маленький!

Ну, смотрите, у Вас же всё свалено в кучу. Что у Вас делают одновременно библиотеки в строках №№ 3 и 4. Более того, через одну Вы описываете часы 3231, а через другую - 1307. У Вас двое часов? Или зачем Вы их оба описали?

Зачем описана переменная rtc в строке 28, если она нигде никогда не используется? Для чего она? Чтобы оправдать включение соответсвующей библиотеки?

Далее, Вы не используете плавающую точку (если я не проглядел), но два килобайта библиотеки float Вы честно притянули (т.к. её притягивает DallasTemperature). Вот одно это (отказ от этой библиотеки или небольшая её модификация) позволило бы решить проблему.

Кстати, Вы вроде используете А4 для дисплея. А часы как подключены? 

speidg
Offline
Зарегистрирован: 11.03.2019

Скачал отсюда https://github.com/amperka/UTFT

не сильно помогло

Sketch uses 32226 bytes (99%) of program storage space. Maximum is 32256 bytes.
Global variables use 1404 bytes (68%) of dynamic memory, leaving 644 bytes for local variables. Maximum is 2048 bytes.
 
нужно еще как минимум еще 800 байт освободить
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Думаю, что DHT library тоже внутре точки сплавляет. Так что одним далласом тут не отделаешься. Всю систему надо менять (TM).

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, значит, и её чуток подправить. В далласе то там это точно не нужно - можно смело заменить на целые (с умом, конечно). При точности датчика в полградуса, считать температуру а "десятых долях градуса" целыми числами - ничего не потеряем.

speidg
Offline
Зарегистрирован: 11.03.2019

ЕвгенийП пишет:

speidg пишет:
маленький проект и столкнулс с тем что скетч не помещается на ардуино.
Хрена-се, маленький!

Ну, смотрите, у Вас же всё свалено в кучу. Что у Вас делают одновременно библиотеки в строках №№ 3 и 4. Более того, через одну Вы описываете часы 3231, а через другую - 1307. У Вас двое часов? Или зачем Вы их оба описали?

Часы одни я чтото даже не заметил

Зачем описана переменная rtc в строке 28, если она нигде никогда не используется? Для чего она? Чтобы оправдать включение соответсвующей библиотеки?

переменную убрал

Далее, Вы не используете плавающую точку (если я не проглядел), но два килобайта библиотеки float Вы честно притянули (т.к. её притягивает DallasTemperature). Вот одно это (отказ от этой библиотеки или небольшая её модификация) позволило бы решить проблему.

вот тут если не трудно немного поподробней куда  и что модифицировать?

Кстати, Вы вроде используете А4 для дисплея. А часы как подключены? 

часы подключены на SDA и SCL

#include <UTFT.h>                                      // подключаем библиотеку UTFT
#include <Wire.h>  
#include <iarduino_RTC.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//#include <PCF8574.h>
#include "DHT.h"
#include <RH_ASK.h>
//#include <SPI.h>

RH_ASK driver;
// структура должна быть в точности одинакова для передатчика и для приемника!
struct SEND_DATA_STRUCTURE{
  uint8_t tempWater;
  uint8_t ounces;
  uint8_t result;
  uint8_t sensorValue;
};
SEND_DATA_STRUCTURE mydata;
byte tx_buf[sizeof(mydata)] = {};


#define DHTPIN 13                                       // номер пина, к которому подсоединен датчик температуры и влажности
DHT dht(DHTPIN, DHT11);                                 // Инициируем датчик

iarduino_RTC time(RTC_DS3231);                          //Запуск часов реального времени
extern uint8_t SmallFont[];                            // подключаем маленький шрифт
extern uint8_t BigFont[];                              // подключаем большой шрифт
extern uint8_t DotMatrix_M[];                           //Подключаем шрифт DotMatrix_M
UTFT myGLCD(TFT28UNO,    A2,A1,A3,A4,A0);           // тип дисплея 2,8  UNO  (320x240 chip ILI9341)
  
 OneWire oneWire(10);                                  // вход датчиков 18b20 датчики температуры
 DallasTemperature ds(&oneWire);                       //Запуск датчиков

DeviceAddress Temp_Out = {0x28, 0xFF, 0x60, 0x1, 0xA7, 0x16, 0x3, 0xFE};    //Адреса датчиков температуры
DeviceAddress Temp_Cool = {0x28, 0xFF, 0x3, 0xD0, 0xA6, 0x16, 0x5, 0x59};
  

//PCF8574 expander;                                 //Включение расширителя портов

void setup()
{
  myGLCD.InitLCD();                               // инициируем дисплей (в качестве параметра данной функции можно указать ориентацию дисплея: PORTRAIT или LANDSCAPE), по умолчанию LANDSCAPE - горизонтальная ориентация
  time.begin();                                   //Запускаем часы    
  myGLCD.fillScr(0, 0, 0);                        //Закрашиваем дисплей черным цветом
  dht.begin();                                    //Запуск часов
  ds.begin();                                     //Запуск датчиков температуры
  pinMode(12, OUTPUT); 
//  expander.begin(0x3A);                           //Запуск расширителя    
//  expander.pinMode(0, OUTPUT);                    //Используемый пин  
  Serial.begin(9600); // Скорость передачиданных
    if (!driver.init())
    Serial.println("init failed");  
    
  
}
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
uint8_t buflen = sizeof(buf);  

void loop()

{
myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
myGLCD.print("WATER", LEFT, 70);                   // выводим текст на дисплей
myGLCD.print("GAZ", RIGHT, 70);                     //Вывод текста уровня воды
myGLCD.print("TEMP IN", CENTER, 70);               //Выводим текст температуру внутри
myGLCD.setFont(SmallFont);                            // устанавливаем маленький шрифт
myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
myGLCD.print("TEMP WATER", LEFT, 150);                   // выводим текст на дисплей
myGLCD.print("TEMP COOL", RIGHT, 150);                   // выводим текст на дисплей
myGLCD.print("TEMP OUT", CENTER, 150);                 // выводим текст на дисплей 
  
  if (driver.recv(buf,&buflen)) // Non-blocking
   {
    
    memcpy(&mydata, buf, sizeof(mydata));



        uint8_t result=(int)round(mydata.result);
         uint8_t sensorValue=(int)round(mydata.sensorValue);
          uint8_t tempWater=(int)round(mydata.tempWater);
            uint8_t ounces=(int)round(mydata.ounces);

myGLCD.setFont(DotMatrix_M);                     // устанавливаем цифровой шрифт
myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
myGLCD.print(time.gettime("d-m-Y H:i:s"), CENTER, 10);                   // выводим время на дисплей
        
myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
//myGLCD.print("   %", LEFT, 90); 
myGLCD.printNumI(result, LEFT, 90);              //Выводим переменную уровень воды
//myGLCD.print("   %", RIGHT, 90);
myGLCD.printNumI(sensorValue, 260, 90);                //Выводим переменную уровень газа
  
  //Ввыводим температуру внутри
int Temp_IN = dht.readTemperature(); 
//myGLCD.print("     `C", 110, 90);
myGLCD.printNumI(Temp_IN, CENTER, 90);             //Выводим переменную температура внутри 

myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста


ds.requestTemperatures();                             // считываем температуру с датчиков

//myGLCD.print("     `C", 110, 170);
myGLCD.printNumI(ds.getTempC(Temp_Out), CENTER, 170);  //Выводим переменную температура
//myGLCD.print("    `C", LEFT, 170);
myGLCD.printNumI(tempWater, LEFT, 170);                //Выводим переменную температура воды 
//myGLCD.print("   `C", RIGHT, 170);
myGLCD.printNumI(ds.getTempC(Temp_Cool), 220, 170);  //Выводим переменную температура

    Serial.print("Температура ");
    Serial.print( tempWater );
    Serial.println("C"); 
    Serial.print("Уровень газа ");  
    Serial.print( sensorValue );  
    Serial.println("%");
    Serial.print("Уровень воды ");  
    Serial.print( result );  
    Serial.println("%");

  }


}

Sketch uses 32228 bytes (99%) of program storage space. Maximum is 32256 bytes.
Global variables use 1306 bytes (63%) of dynamic memory, leaving 742 bytes for local variables. Maximum is 2048 bytes.
 
теперь скетч влазит и даже работает
только еще не все реализовано
 
b707
Offline
Зарегистрирован: 26.05.2017

Файл memorysaver.h в библиотеке отредактировали? - там логика обратная. нужно закомментировать свой дисплей, а все прочие раскомментировать.

И еще - я не пойму, откуда вы берете фонт DotMatrix_M - в стандартных фонтах библиотеки такого нет

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

speidg пишет:

часы подключены на SDA и SCL

SDA это А4 - а Вы эту ногу ещё и для дисплея используете (см. строку №30 последнего скетча). Не подерутся?

speidg пишет:

вот тут если не трудно немного поподробней куда  и что модифицировать?

Ну, вот смотрите, откройте DallasTemperature.cpp и пощите поиском слово float. Оно там использется много раз, но реально вычисления с плавающей точкой проиходят только в трёх функциях: toFahrenheit, toCelsius и calculateTemperature.

Первые две можно смело выбросить (если они Вам вдруг нужны, то их тоже можно переделать по той же методике, что я опишу для calculateTemperature). Заодно, надо выбросить функцию getTempF, т.к. она не рботает без toFahrenheit.

При выбрасывании, не забываем выбрасывать и из DallasTemperature.h тоже.

После того, как выбросили, делаете глобальную замену float на int16_t.

Затем лезете в функцию calculateTemperature и заменяете в ней все вычисления с плавающей точкой на целочисленные. Например, строку 

 return (float)rawTemperature * 0.0625;

спокойно заменяете на 

 return (int16_t)
                 ((((int32_t)rawTemperature * 625L) + 500) / 1000);

строку 

return (float)(rawTemperature >> 1) * 0.125;

// заменяем на

return (int16_t)
               (((int32_t)(rawTemperature >> 1)   * 125 + 50) / 100);

и так далее.

В итоге у Вас в программе не должно остаться слова float и констант с точкой - ни одной.

Ваша функция теперь возвращает не градусы, а "десятые доли градусов" == "температуру, умножннную на 10", т.е. последнюю цифру Вам надо печатать после запятой.

Зато Вы избавились от плавающей точки.

Коллега тут писал, что надо также поступить и библиотекой DHT.h, но не знаю. В той версии DHT, что у меня, нет никаких float. Проверьте. Если у Вас они есть - выкорчёвывайте также, как это дедлали для далласа. Если Вы выкорчуете ВСЕ float, Вы освободите примерно два килобайта.

speidg
Offline
Зарегистрирован: 11.03.2019

b707 пишет:

Файл memorysaver.h в библиотеке отредактировали? - там логика обратная. нужно закомментировать свой дисплей, а все прочие раскомментировать.

да отредактировал

И еще - я не пойму, откуда вы берете фонт DotMatrix_M - в стандартных фонтах библиотеки такого нет

шрифт подключен дополнительно

понравилось отображение даты времени точками

b707
Offline
Зарегистрирован: 26.05.2017

Про фонт можете не отвечать - нашел.

У вас один только фонт DotMatrix занимает более 4к - при том что вы пользуетесь им всего в одном месте и реально вам нужны лишь цифры, двоеточие и тире. Либо откажитесь от этого фонта и выводите время фонтом BigFont. либо выкиньте из фонта DotMatrix лишние символы

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

Либо откажитесь от этого фонта и выводите время фонтом BigFont. либо выкиньте из фонта DotMatrix лишние символы

По мне так лучше отказаться. Но если

speidg пишет:

понравилось отображение даты времени точками

то сделайте, как говорит коллега - выбросьте лишние символы, а их там миниму 2/3 лишних.

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

b707 пишет:

Либо откажитесь от этого фонта и выводите время фонтом BigFont. либо выкиньте из фонта DotMatrix лишние символы

По мне так лучше отказаться. 

там в наборе фонтов есть DotMatrix_M_Num - в котором только цифры. В него всего-то надо добавить тире и двоеточие - экономия места составит, думаю, не менее 3к

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Тем более

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

При точности датчика в полградуса, ............

Недобрый Вы, Евгений Петрович, далласа маво, любимого, забижаете. А у него, только младший разряд бывает фулиганит. Нехорошос, на маленьких, наговаривать.(((

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я тоже не понимаю, нахрена знать температуру с точностью 0.0625?  

Кабутто, если на улице будет не -44, а -43.9375, то я сразу прям согреюсь.

Понаделают поделок, вместо обычного спиртового термометра,  потом сами и за точность плачуца.  Многая знания - многая пичалька. 

speidg
Offline
Зарегистрирован: 11.03.2019

b707 пишет:

ЕвгенийП пишет:

b707 пишет:

Либо откажитесь от этого фонта и выводите время фонтом BigFont. либо выкиньте из фонта DotMatrix лишние символы

По мне так лучше отказаться. 

там в наборе фонтов есть DotMatrix_M_Num - в котором только цифры. В него всего-то надо добавить тире и двоеточие - экономия места составит, думаю, не менее 3к

Проработал со шрифтом

размер существенно уменьшился спасибо большое

Sketch uses 29456 bytes (91%) of program storage space. Maximum is 32256 bytes.
Global variables use 1306 bytes (63%) of dynamic memory, leaving 742 bytes for local variables. Maximum is 2048 bytes.
 
теперь попробую отредактировань библиотеки
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:
далласа маво, любимого, забижаете.
Вот-те крест - не я! Это всё Maxim Integrated - вот так прямо и пишет:

speidg
Offline
Зарегистрирован: 11.03.2019

ЕвгенийП]</p> <p>[quote=speidg пишет:

часы подключены на SDA и SCL

SDA это А4 - а Вы эту ногу ещё и для дисплея используете (см. строку №30 последнего скетча). Не подерутся?

[quote]

А4 на экране освобожден (это сброс подключил к питанию)

bwn
Offline
Зарегистрирован: 25.08.2014

DetSimen пишет:

я тоже не понимаю, нахрена знать температуру с точностью 0.0625?  

Кабутто, если на улице будет не -44, а -43.9375, то я сразу прям согреюсь.

Понаделают поделок, вместо обычного спиртового термометра,  потом сами и за точность плачуца.  Многая знания - многая пичалька. 

От, чтобы сделать спиртовой термометр, надо получить спирит, а там такая разрядность и нужна, у него весь коридорчик 0,2гр.  А точность,  не требуется, там температура относительная.))))
А его, незаслуженно оскорбили, все прочитают и решат, что он только +-0,5гр умеет, а это не так. Я за справедливость.)))

speidg
Offline
Зарегистрирован: 11.03.2019

Всем спасибо за помощь

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

принято решение перейти на Mega 2560 pro

надеюсь там памяти хватит )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

:)

Хватит. До следующей хотелки :)

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

DetSimen пишет:

я тоже не понимаю, нахрена знать температуру с точностью 0.0625?  

Кабутто, если на улице будет не -44, а -43.9375, то я сразу прям согреюсь.

Понаделают поделок, вместо обычного спиртового термометра,  потом сами и за точность плачуца.  Многая знания - многая пичалька. 

Тут немного не о том речь: точность этой микросхемы-термометра составляет +/- 0,5 градуса. То есть, при температуре 50 градусов данные могут приходить в зависимости от экземпляра от 49,5 до 50,5 градусов. А указанные 0.0625 - это величина изменения температуры, на которую реагирует датчик.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Sonologist пишет:

DetSimen пишет:

я тоже не понимаю, нахрена знать температуру с точностью 0.0625?  

Кабутто, если на улице будет не -44, а -43.9375, то я сразу прям согреюсь.

Понаделают поделок, вместо обычного спиртового термометра,  потом сами и за точность плачуца.  Многая знания - многая пичалька. 

Тут немного не о том речь: точность этой микросхемы-термометра составляет +/- 0,5 градуса. То есть, при температуре 50 градусов данные могут приходить в зависимости от экземпляра от 49,5 до 50,5 градусов. А указанные 0.0625 - это величина изменения температуры, на которую реагирует датчик.

речь о том, что 9-битное преобразование температуры (достоверное с точностью до полградуса) делается за 80 мс, а никому нахрен ненужное уточнение с разрешающей способностью 12 бит (0.0625 гра), а с точностью ВСЁРАВНО полградуса длится 750 мс.  Вот и подумаешь, а так ли тебе в температуре нужны цифры после запятой. 

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

0.0625 - это дискретность изменения показаний при 12-битном АЦП.

Практическую точность можно существенно увеличить, если внести поправочные коэффициенты в формулу T =a +bt в нужном Вам диапазоне температур. 

Вот никогда не поверю, что кому то нужна точность измерения температуры 0,1*С во всём диапазоне датчика.

Спиртовикам - около 70...80 *С

Инкубаторщикам - около 40*С

Ну и так далее.

 

SLKH
Offline
Зарегистрирован: 17.08.2015

Муж_Долговой пишет:

0.0625 - это дискретность изменения показаний при 12-битном АЦП.

Практическую точность можно существенно увеличить, если внести поправочные коэффициенты в формулу T =a +bt в нужном Вам диапазоне температур. 

Вот никогда не поверю, что кому то нужна точность измерения температуры 0,1*С во всём диапазоне датчика.

Спиртовикам - около 70...80 *С

Инкубаторщикам - около 40*С

Ну и так далее.

 

Ну так наседка же всегда регулирует с точностью 0.0625.

bwn
Offline
Зарегистрирован: 25.08.2014

SLKH пишет:

Ну так наседка же всегда регулирует с точностью 0.0625.

Хм, у наседки, это профессия. Но Вас ведь не удивляет способность делать тоже самое.))))