Нужна помощь

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

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

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

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

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

001#include <UTFT.h>                                      // подключаем библиотеку UTFT
002#include <Wire.h> 
003#include <DS1307.h>
004#include <iarduino_RTC.h>
005#include <OneWire.h>
006#include <DallasTemperature.h>
007//#include <PCF8574.h>
008#include "DHT.h"
009#include <RH_ASK.h>
010//#include <SPI.h>
011 
012RH_ASK driver;
013// структура должна быть в точности одинакова для передатчика и для приемника!
014struct SEND_DATA_STRUCTURE{
015  uint8_t tempWater;
016  uint8_t ounces;
017  uint8_t result;
018  uint8_t sensorValue;
019};
020SEND_DATA_STRUCTURE mydata;
021byte tx_buf[sizeof(mydata)] = {};
022 
023 
024#define DHTPIN 13                                       // номер пина, к которому подсоединен датчик температуры и влажности
025DHT dht(DHTPIN, DHT11);                                 // Инициируем датчик
026 
027iarduino_RTC time(RTC_DS3231);                          //Запуск часов реального времени
028DS1307 rtc(SDA, SCL);                                     //Инициализируем входы
029extern uint8_t SmallFont[];                            // подключаем маленький шрифт
030extern uint8_t BigFont[];                              // подключаем большой шрифт
031extern uint8_t DotMatrix_M[];                           //Подключаем шрифт DotMatrix_M
032UTFT myGLCD(TFT28UNO,    A2,A1,A3,A4,A0);           // тип дисплея 2,8  UNO  (320x240 chip ILI9341)
033   
034 OneWire oneWire(10);                                  // вход датчиков 18b20 датчики температуры
035 DallasTemperature ds(&oneWire);                       //Запуск датчиков
036 
037DeviceAddress Temp_Out = {0x28, 0xFF, 0x60, 0x1, 0xA7, 0x16, 0x3, 0xFE};    //Адреса датчиков температуры
038DeviceAddress Temp_Cool = {0x28, 0xFF, 0x3, 0xD0, 0xA6, 0x16, 0x5, 0x59};
039   
040 
041//PCF8574 expander;                                 //Включение расширителя портов
042 
043void setup()
044{
045  myGLCD.InitLCD();                               // инициируем дисплей (в качестве параметра данной функции можно указать ориентацию дисплея: PORTRAIT или LANDSCAPE), по умолчанию LANDSCAPE - горизонтальная ориентация
046  time.begin();                                   //Запускаем часы   
047  myGLCD.fillScr(0, 0, 0);                        //Закрашиваем дисплей черным цветом
048  dht.begin();                                    //Запуск часов
049  ds.begin();                                     //Запуск датчиков температуры
050  pinMode(12, OUTPUT);
051//  expander.begin(0x3A);                           //Запуск расширителя   
052//  expander.pinMode(0, OUTPUT);                    //Используемый пин 
053  Serial.begin(9600); // Скорость передачиданных
054    if (!driver.init())
055    Serial.println("init failed"); 
056     
057   
058}
059uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
060uint8_t buflen = sizeof(buf); 
061 
062void loop()
063 
064{
065myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
066myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
067myGLCD.print("WATER", LEFT, 70);                   // выводим текст на дисплей
068myGLCD.print("GAZ", RIGHT, 70);                     //Вывод текста уровня воды
069myGLCD.print("TEMP IN", CENTER, 70);               //Выводим текст температуру внутри
070myGLCD.setFont(SmallFont);                            // устанавливаем маленький шрифт
071myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
072myGLCD.print("TEMP WATER", LEFT, 150);                   // выводим текст на дисплей
073myGLCD.print("TEMP COOL", RIGHT, 150);                   // выводим текст на дисплей
074myGLCD.print("TEMP OUT", CENTER, 150);                 // выводим текст на дисплей
075   
076  if (driver.recv(buf,&buflen)) // Non-blocking
077   {
078     
079    memcpy(&mydata, buf, sizeof(mydata));
080 
081 
082 
083        uint8_t result=(int)round(mydata.result);
084         uint8_t sensorValue=(int)round(mydata.sensorValue);
085          uint8_t tempWater=(int)round(mydata.tempWater);
086            uint8_t ounces=(int)round(mydata.ounces);
087 
088myGLCD.setFont(DotMatrix_M);                     // устанавливаем цифровой шрифт
089myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
090myGLCD.print(time.gettime("d-m-Y H:i:s"), CENTER, 10);                   // выводим время на дисплей
091         
092myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
093myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
094//myGLCD.print("   %", LEFT, 90);
095myGLCD.printNumI(result, LEFT, 90);              //Выводим переменную уровень воды
096//myGLCD.print("   %", RIGHT, 90);
097myGLCD.printNumI(sensorValue, 260, 90);                //Выводим переменную уровень газа
098   
099  //Ввыводим температуру внутри
100int Temp_IN = dht.readTemperature();
101//myGLCD.print("     `C", 110, 90);
102myGLCD.printNumI(Temp_IN, CENTER, 90);             //Выводим переменную температура внутри
103 
104myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
105 
106 
107ds.requestTemperatures();                             // считываем температуру с датчиков
108 
109//myGLCD.print("     `C", 110, 170);
110myGLCD.printNumI(ds.getTempC(Temp_Out), CENTER, 170);  //Выводим переменную температура
111//myGLCD.print("    `C", LEFT, 170);
112myGLCD.printNumI(tempWater, LEFT, 170);                //Выводим переменную температура воды
113//myGLCD.print("   `C", RIGHT, 170);
114myGLCD.printNumI(ds.getTempC(Temp_Cool), 220, 170);  //Выводим переменную температура
115 
116    Serial.print("Температура ");
117    Serial.print( tempWater );
118    Serial.println("C");
119    Serial.print("Уровень газа "); 
120    Serial.print( sensorValue ); 
121    Serial.println("%");
122    Serial.print("Уровень воды "); 
123    Serial.print( result ); 
124    Serial.println("%");
125 
126  }
127 
128 
129}

Библиотеку 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

001#include <UTFT.h>                                      // подключаем библиотеку UTFT
002#include <Wire.h> 
003#include <iarduino_RTC.h>
004#include <OneWire.h>
005#include <DallasTemperature.h>
006//#include <PCF8574.h>
007#include "DHT.h"
008#include <RH_ASK.h>
009//#include <SPI.h>
010 
011RH_ASK driver;
012// структура должна быть в точности одинакова для передатчика и для приемника!
013struct SEND_DATA_STRUCTURE{
014  uint8_t tempWater;
015  uint8_t ounces;
016  uint8_t result;
017  uint8_t sensorValue;
018};
019SEND_DATA_STRUCTURE mydata;
020byte tx_buf[sizeof(mydata)] = {};
021 
022 
023#define DHTPIN 13                                       // номер пина, к которому подсоединен датчик температуры и влажности
024DHT dht(DHTPIN, DHT11);                                 // Инициируем датчик
025 
026iarduino_RTC time(RTC_DS3231);                          //Запуск часов реального времени
027extern uint8_t SmallFont[];                            // подключаем маленький шрифт
028extern uint8_t BigFont[];                              // подключаем большой шрифт
029extern uint8_t DotMatrix_M[];                           //Подключаем шрифт DotMatrix_M
030UTFT myGLCD(TFT28UNO,    A2,A1,A3,A4,A0);           // тип дисплея 2,8  UNO  (320x240 chip ILI9341)
031   
032 OneWire oneWire(10);                                  // вход датчиков 18b20 датчики температуры
033 DallasTemperature ds(&oneWire);                       //Запуск датчиков
034 
035DeviceAddress Temp_Out = {0x28, 0xFF, 0x60, 0x1, 0xA7, 0x16, 0x3, 0xFE};    //Адреса датчиков температуры
036DeviceAddress Temp_Cool = {0x28, 0xFF, 0x3, 0xD0, 0xA6, 0x16, 0x5, 0x59};
037   
038 
039//PCF8574 expander;                                 //Включение расширителя портов
040 
041void setup()
042{
043  myGLCD.InitLCD();                               // инициируем дисплей (в качестве параметра данной функции можно указать ориентацию дисплея: PORTRAIT или LANDSCAPE), по умолчанию LANDSCAPE - горизонтальная ориентация
044  time.begin();                                   //Запускаем часы   
045  myGLCD.fillScr(0, 0, 0);                        //Закрашиваем дисплей черным цветом
046  dht.begin();                                    //Запуск часов
047  ds.begin();                                     //Запуск датчиков температуры
048  pinMode(12, OUTPUT);
049//  expander.begin(0x3A);                           //Запуск расширителя   
050//  expander.pinMode(0, OUTPUT);                    //Используемый пин 
051  Serial.begin(9600); // Скорость передачиданных
052    if (!driver.init())
053    Serial.println("init failed"); 
054     
055   
056}
057uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
058uint8_t buflen = sizeof(buf); 
059 
060void loop()
061 
062{
063myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
064myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
065myGLCD.print("WATER", LEFT, 70);                   // выводим текст на дисплей
066myGLCD.print("GAZ", RIGHT, 70);                     //Вывод текста уровня воды
067myGLCD.print("TEMP IN", CENTER, 70);               //Выводим текст температуру внутри
068myGLCD.setFont(SmallFont);                            // устанавливаем маленький шрифт
069myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
070myGLCD.print("TEMP WATER", LEFT, 150);                   // выводим текст на дисплей
071myGLCD.print("TEMP COOL", RIGHT, 150);                   // выводим текст на дисплей
072myGLCD.print("TEMP OUT", CENTER, 150);                 // выводим текст на дисплей
073   
074  if (driver.recv(buf,&buflen)) // Non-blocking
075   {
076     
077    memcpy(&mydata, buf, sizeof(mydata));
078 
079 
080 
081        uint8_t result=(int)round(mydata.result);
082         uint8_t sensorValue=(int)round(mydata.sensorValue);
083          uint8_t tempWater=(int)round(mydata.tempWater);
084            uint8_t ounces=(int)round(mydata.ounces);
085 
086myGLCD.setFont(DotMatrix_M);                     // устанавливаем цифровой шрифт
087myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
088myGLCD.print(time.gettime("d-m-Y H:i:s"), CENTER, 10);                   // выводим время на дисплей
089         
090myGLCD.setFont(BigFont);                           // устанавливаем большой шрифт
091myGLCD.setColor(VGA_WHITE);                          // устанавливаем цвет текста
092//myGLCD.print("   %", LEFT, 90);
093myGLCD.printNumI(result, LEFT, 90);              //Выводим переменную уровень воды
094//myGLCD.print("   %", RIGHT, 90);
095myGLCD.printNumI(sensorValue, 260, 90);                //Выводим переменную уровень газа
096   
097  //Ввыводим температуру внутри
098int Temp_IN = dht.readTemperature();
099//myGLCD.print("     `C", 110, 90);
100myGLCD.printNumI(Temp_IN, CENTER, 90);             //Выводим переменную температура внутри
101 
102myGLCD.setColor(VGA_FUCHSIA);                        // устанавливаем цвет текста
103 
104 
105ds.requestTemperatures();                             // считываем температуру с датчиков
106 
107//myGLCD.print("     `C", 110, 170);
108myGLCD.printNumI(ds.getTempC(Temp_Out), CENTER, 170);  //Выводим переменную температура
109//myGLCD.print("    `C", LEFT, 170);
110myGLCD.printNumI(tempWater, LEFT, 170);                //Выводим переменную температура воды
111//myGLCD.print("   `C", RIGHT, 170);
112myGLCD.printNumI(ds.getTempC(Temp_Cool), 220, 170);  //Выводим переменную температура
113 
114    Serial.print("Температура ");
115    Serial.print( tempWater );
116    Serial.println("C");
117    Serial.print("Уровень газа "); 
118    Serial.print( sensorValue ); 
119    Serial.println("%");
120    Serial.print("Уровень воды "); 
121    Serial.print( result ); 
122    Serial.println("%");
123 
124  }
125 
126 
127}
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 и заменяете в ней все вычисления с плавающей точкой на целочисленные. Например, строку 

1return (float)rawTemperature * 0.0625;

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

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

строку 

1return (float)(rawTemperature >> 1) * 0.125;
2 
3// заменяем на
4 
5return (int16_t)
6               (((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.

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