Прошу помощи с функцией

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

Дим-мычъ пишет:

Да , но делил по другому - терял гораздо больше.

блин, ну сколько можно чушь нести? Попробуй уже понять, как это работает, а не набивать код с завязанными глазами. Подумай. почему происходит потеря десятых и сотых? Как это связно с лонгом??

Гриша
Offline
Зарегистрирован: 27.04.2014

b707 пишет:

блин, ну сколько можно чушь нести?

думаю, это еще на долго....

пока не поймет простой вещи, так делать просто глупо!!!!

unsigned long dd = (unsigned long) chislo_h % 100000ul; // остаток от деления
 a[1] = (byte)(dd / 10000ul);// значение для среднего разряда

взять стотысячную!!!! а потом поделить на десять тысяч!!! чтобы получить цифру, которая должна быть просто сотой... таскать вагон нулей не вписываясь в размер переменной....

не, ну затупы у всех бывают... но это просто финиш....

UPD... и это ведь даже не относиться к программированию, это простая логика, обычная рациональность... 

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

Гриша пишет:

взять стотысячную!!!! а потом поделить на десять тысяч!!! чтобы получить цифру, которая должна быть просто сотой...

удивительно, что ему лонга хвтает :) Надо было uint64_t брать

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Да... почитал высказывания почтенных...

Жаль конечно, что мало конструктива в дискуссии))

За 53 поста только два действительно полезных сообщения от b707 #6  и #23.

И Гриша пытался помочь в посте #19 но безуспешно.

Просто написать 5ть строчек кода для специалистов видимо труднее, чем постить 50 постов)))

 

Однако не унываю, ведь всё работает. И будет работать лучше - это 100%!

Ещё по поводу загрузки МК интересный факт. Мой скетч занимает

7% памяти устройства и глобальные переменные 3% дин.памяти

А скетч из примера в ардуино с таким же датчиком в  17% и 19% соответственно.

Думаю пока не всё ещё потеряно...))

 

 

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

Дим-мычъ пишет:

Просто написать 5ть строчек кода для специалистов видимо труднее, чем постить 50 постов)))

просто западло

примеры кода я пишу только тем, кто и сам бы этот код написал - когда мы обсуждаем не сам код, а что-то другое.

если же видно, что у человека проблемы именно с кодом - готового примера он не получит. должен дойти сам, иначе никакого эффекта от обучения не останется.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

b707 пишет:

Дим-мычъ пишет:

Просто написать 5ть строчек кода для специалистов видимо труднее, чем постить 50 постов)))

просто западло

примеры кода я пишу только тем, кто и сам бы этот код написал - когда мы обсуждаем не сам код, а что-то другое.

если же видно, что у человека проблемы именно с кодом - готового примера он не получит. должен дойти сам, иначе никакого эффекта от обучения не останется.

Однако два полезных замечания сделали - и на том спасибо.

Вообще-то очень сильно мне ответ и не нужен, люблю сам больше доходить.

Просто в моей среде обитания не с кем и близко поговорить на подобные темы, как бы вакуум))

Вот и зашёл на форум "почесать языком"))

Morroc
Offline
Зарегистрирован: 24.10.2016

Дим-мычъ пишет:

Думаю пока не всё ещё потеряно...))

Пишите заново, прапорщик был прав - нечего думать, трясти надо )

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

3 полезных (на ваш взгляд) сообщения на 54 total (включая кучу ваших) - неплохой результат. Небольшое количество из старожилов не глупее вас оказалось

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

Дим-мычъ пишет:

Просто в моей среде обитания не с кем и близко поговорить на подобные темы, как бы вакуум))

вы не поверите, в моей тоже. Но есть гугль и книги - это, вообще-то, все что нужно для изучения почти любого предмета

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

Дим-мычъ пишет:

Да... почитал высказывания почтенных...

Жаль конечно, что мало конструктива в дискуссии))

За 53 поста только два действительно полезных сообщения от b707 #6  и #23.

И Гриша пытался помочь в посте #19 но безуспешно.

Просто написать 5ть строчек кода для специалистов видимо труднее, чем постить 50 постов)))

ты не поверишь, всё что надо, чтоб получить температуру из далласа, всё здесь

int8_t temp = (FDallasMemory[1] << 4) | (FDallasMemory[0] >> 4);

 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

DetSimen пишет:

ты не поверишь, всё что надо, чтоб получить температуру из далласа, всё здесь

int8_t temp = (FDallasMemory[1] << 4) | (FDallasMemory[0] >> 4);

 

Да но с каким разрешением? 1С? Или я совсем отупел???

Мне нужны все биты! Все 11+ 1 знак.)))

И я их уже получил, но надо мною смеются, что мол числа большие...Но мы ещё посмотрим...с

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

Дим-мычъ пишет:

Жаль конечно, что мало конструктива в дискуссии))

За 53 поста только два действительно полезных сообщения от b707 #6  и #23.

Ну, да. Сложить два числа я не могу. Зато могу давать весьма квалифицированную оценку словам и действиям других.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

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

Дим-мычъ пишет:

Жаль конечно, что мало конструктива в дискуссии))

За 53 поста только два действительно полезных сообщения от b707 #6  и #23.

Ну, да. Сложить два числа я не могу. Зато могу давать весьма квалифицированную оценку словам и действиям других.

Это был лишь ответ на язвительные высказывания. Не больше

P.S. тем более что всё у меня заработало и "два числа" сложились см#35

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

Дим-мычъ пишет:

у меня заработало и "два числа" сложились см#35

Да, я уж смотрел. Рад за Вас :-)

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Так что пока более продвинутого решения, чем  в посте #35 найти не смог.

Пока получается только хуже. У

 if(chislo >= 1599) // ограничиваем до значение темп-ры 100С
     chislo = 1599;
      
     // меняем разрешение на 0.25 и умножаем на 100 
    int chislo_h = chislo / 4 * 25; 
    a[0] = (byte)(chislo_h / 1000);
    int dec_1 = chislo_h % 1000;
    a[1] = (byte) (dec_1 / 100);
    int dec_2 = dec_1 % 100;
    a[2] = (byte)(dec_2 / 10);

же думаю или его не существует, или оно недоступно уму такого начинающего ардуинщика

как я ))).  Но, если будет время, конечно буду искать дальше.

Для сравнения привожу код для разрешения 0.25С.

Насколько проще! Я уж молчу про 0.5С и, тем более 1С  - это вообще задачки для детского садика...

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

1599 - это 100C? В каком измерении нашей Вселенной?

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

sadman41 пишет:
1599 - это 100C? В каком измерении нашей Вселенной?

Ну я же не написал "включительно".

Можно написать до 99.75 включительно

Гриша
Offline
Зарегистрирован: 27.04.2014

sadman41 пишет:
1599 - это 100C? В каком измерении нашей Вселенной?

батенька да вы отстали от жизни, ничего про анизотропное программирование не слышали? Это когда в кучу кидаешь все подряд, а оно как-то работает - иногда примерно правильно... Вот чтобы поправить "примерно " до просто правильно этот форум и существует :))))))))))))))))))))))

ну еще и FLProg к примеру, но с ним не все просто - там тензорная анизотропия, Вы лучше в это не вникайте - мозг можно сломать, он подходит для тех, кто его дома оставляет, чтоб не поломался.... (это не касается детей, им можно и FLProg... ну так, чтоб интерес появился)

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Гриша пишет:

Вот чтобы поправить "примерно " до просто правильно этот форум и существует :))))))))))))))))))))))

Вот такой тон мне уже нравится!

Гриша
Offline
Зарегистрирован: 27.04.2014

Дим-мычъ пишет:

Гриша пишет:

Вот чтобы поправить "примерно " до просто правильно этот форум и существует :))))))))))))))))))))))

Вот такой тон мне уже нравится!

69 постов пытались помочь с базовыми знаниями - пока результат никакой. Если думаете, что не пытались, а смеялись и издевались - бросайте это дело (программирование). Или срочно перечитывайте весь топик до просветления, а потом еще пару раз.

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

Дим-мычъ - вы правда такой идиот или прикидываетесь?

Умножте свое chislo на 0.625 - и не нужны никакие тысячи.

 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

b707 пишет:

Дим-мычъ - вы правда такой идиот или прикидываетесь?

Умножте свое chislo на 0.625 - и не нужны никакие тысячи.

1599 х 0.625 = 999, 375 . Я это уже не раз делал.

Но не знаю как взять дробный остаток

 P.S.Вернее знаю, но этот вариант хуже

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

Дим-мычъ пишет:

1599 х 0.625 = 999, 375 . Я это уже не раз делал.

точно идиот.  Учу считать правильно = 1599 х 0.625 = 999

 

Цитата:
Но не знаю как взять дробный остаток

 P.S.Вернее знаю, но этот вариант хуже

нет никакого "дробного остатка". И, главное - он нахер не нужен

 

Гриша
Offline
Зарегистрирован: 27.04.2014

хосподи.... это уже не смешно - это уже на жирного тролля похоже... я все... выхожу из обсуждения...

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

Гриша пишет:

хосподи.... это уже не смешно - это уже на жирного тролля похоже... я все... выхожу из обсуждения...

погоди, надо его дожать, чтобы признал. что он идиот с IQ  =  0

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

b707 пишет:

Дим-мычъ пишет:

1599 х 0.625 = 999, 375 . Я это уже не раз делал.

точно идиот.  Учу считать правильно = 1599 х 0.625 = 999

 

Цитата:
Но не знаю как взять дробный остаток

 P.S.Вернее знаю, но этот вариант хуже

нет никакого "дробного остатка". И, главное - он нахер не нужен

 

Так посчитать и я бы смог. А куда остальное?

Как получить полное преобразование ?

Я же ясно написал - нужны все биты!

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

Дим-мычъ пишет:

Я же ясно написал - нужны все биты!

ты и получишь все биты, дубина

В твоем расчете с тысячами ты получаешь точность 0,0625 градуса с выводом температуры на монитор с точностью в 0.1

В моем тоже самое - можешь проверить.

 

Ты в школе что, двоешником был?

Ты не понимаешь, что  (X * 625)/1000 и X * 0.625 - это одно и то же?

Гриша
Offline
Зарегистрирован: 27.04.2014

Дим-мычъ пишет:

Я же ясно написал - нужны все биты!

у вас коробок спичек стоит 10000 рублей в государстве случилась деноминация, а вы так его за 10тр и покупаете...  богатый...

UPD

покупаете 1коробок за 10тр и при этом думаете, что на 1рубль вам 10 коробков дадут...

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

Дим-мычъ - признай что идиот и разойдемся.

Твоя репутация на форуме уже порушена, терять тебе нечего.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

b707 пишет:

Дим-мычъ пишет:

Я же ясно написал - нужны все биты!

ты и получишь все биты, дубина

В твоем расчете с тысячами ты получаешь точность 0,0625 градуса с выводом температуры на монитор с точностью в 0.1

В моем тоже самое - можешь проверить.

 

Ты в школе что, двоешником был?

Ты не понимаешь, что  (X * 625)/1000 и X * 0.625 - это одно и то же?

Не правда. У меня ещё сотые учитываются. Я их округляю, т.к. нет разряда. Но захочу и могу сделать вывести.  Трудность задачи именно в том и была, чтобы ничего не терять

 

Гриша
Offline
Зарегистрирован: 27.04.2014

Дим-мычъ пишет:

  Трудность задачи именно в том и была, чтобы ничего не терять

броня 100мм не прошиваемая....

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

b707 пишет:

Дим-мычъ - признай что идиот и разойдемся.

Твоя репутация на форуме уже порушена, терять тебе нечего.

Оценка специалистов-халтурщиков для меня равна нулю)))

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

Дим-мычъ пишет:

Не правда. У меня ещё сотые учитываются. Я их округляю, т.к. нет разряда. Но захочу и могу сделать вывести. 

редкостный дебил.

Когда появится разряд для сотых - увеличишь кофэффициент в 10 раз, и все. В ДЕСЯТЬ, А НЕ В ТЫСЯЧУ,

Цитата:
Трудность задачи именно в том и была, чтобы ничего не терять

именно поэтому я и пишу, что идиот. Только идиоты сначала создают себе проблему на пустом месте, а потом героически ее решают.

И не обманывай себя - в тоем расчете ты тоже теряешь точность. Пятый знак после запятой у тебя теряется.

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

Дим-мычъ пишет:

Оценка специалистов-халтурщиков для меня равна нулю)))

если не признаешь, что ступил - можешь больше сюда ничего не писать

Гриша
Offline
Зарегистрирован: 27.04.2014

этот топик уходит в копилку к этому  - пост 90 (по теме)

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

Это просто в мемориз.

Датчик с точностью 0.5 градуса, табло с показом 1 цифры после запятой. но человек упорно озабочен точностью вычисления десятитысячных долей и всех прочих называет "халтурщиками".

Димыч, измерь школьной линейкой расстояние от Москвы до Саратова и требуй занесения во все справочники цифры с точностью до миллиметра...

Димыч, это тебе

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

b707 пишет:

Дим-мычъ пишет:

Не правда. У меня ещё сотые учитываются. Я их округляю, т.к. нет разряда. Но захочу и могу сделать вывести. 

редкостный дебил.

Когда появится разряд для сотых - увеличишь кофэффициент в 10 раз, и все. В ДЕСЯТЬ, А НЕ В ТЫСЯЧУ,

Цитата:
Трудность задачи именно в том и была, чтобы ничего не терять

именно поэтому я и пишу, что идиот. Только идиоты сначала создают себе проблему на пустом месте, а потом героически ее решают.

И не обманывай себя - в тоем расчете ты тоже теряешь точность. Пятый знак после запятой у тебя теряется.

Да , пятый знак сейчас теряется, просто не стал продолжать в том же духе пока. Ещё ведь не закончил поиск! Ведь писал, что в процессе!

Но такого  халтурного решения мне и даром  не надо.

 

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

Дим-мычъ пишет:

Но такого  халтурного решения мне и даром  не надо.

Админы, предлагаю на этом закрыть ветку.

 

 

Гриша
Offline
Зарегистрирован: 27.04.2014

+1 Закрыть ветку,

не банить... он ведь не грубил, а остальное - все люди разные...

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

Гриша пишет:

не банить... он ведь не грубил, а остальное - все люди разные...

если он продолжит в том же духе - он и так тут долго не задержится

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Всё что делал - исключительно с учебной целью. В данном случае - сделать полное преобразование.

Не понял, зачем такие истерики. Я ведь НЕ ПРИНУЖДАЮ ВАС К ОБЩЕНИЮ

Столько постов ПОНТОВ, а на выходе просто НИЧЕГО, то, что я И ТАК ЗНАЛ. Жаль даром потраченного на вас обоих времени.

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

Дим-мычъ пишет:

Жаль даром потраченного на вас обоих времени.

сделай правильный вывод - свали с форума.

А то так и будешь постоянно на меня натыкатся - это я могу тебе обещать.

 

А если рассуждать спокойно - обрати внимания, что я один из немногих, что давал тебе дельные ответы. Знаешь почему? - потому что я дурак. Думал что это имеет смысл. Остальные в этой ветке раскусили твой заскок значительно раньше меня и просто не относились к тебе серьезно.

Сделай из этого выводы.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

b707 пишет:

Дим-мычъ пишет:

Жаль даром потраченного на вас обоих времени.

сделай правильный вывод - свали с форума.

А то так и будешь постоянно на меня натыкатся - это я могу тебе обещать.

 

На ноль наткнуться невозможно)))

А на форуме есть и нормальные люди, я в этом уверен

 

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

На, тупень. 

float GetTemperature(const uint8_t ADallasMemory[]) { // на входе указатель на scratchpad Далласа
	
	float Result = float((ADallasMemory[0] << 4) | (ADallasMemory[1] >> 4));  // берем целую часть
	
	float value = 0.5;
	
	for (uint8_t mask = 0b1000; mask > 0; mask >>= 1) { // и тупо добавляем дробную часть
		if (ADallasMemory[1] & mask) Result += value;
		value /= 2.0;
	}
	
	return Result;
}

Нету больше для тебя на форуме нормальных людей, не сможем мы уже это развидеть. 

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

И всё же завершу тему. Пробовал с  float. Не этот код ,немного другой. Выглядит компактней, но больше жрёт ресурса

ардуины. На больших компах конечно же должен работать лучше. А у меня даже на пяти разрядах память устройств возросла до 10%.

При моём коде 7%.

Поэтому привожу окончательный вариант полного преобразования .  Топорно выглядит, но зато работает.

Для первого скетча норм)))

Если кто-то спросит зачем? Спросите у DALLAS, зачем они делают такие датчики.

// полное преобразование 11 разрядного(без знака) значения датчика DS18B20
// в десятичные разряды для вывода на индикатор

  unsigned long chislo_x = 0;
  chislo_x = (unsigned long) chislo; // переводим значения датчика в  unsigned long

  unsigned long chislo_h =  chislo_x * 625ul;// получаем десятичное значение без дроби 
   //с макс.знач. 1 279 375 (7-мь разрядов)
   
   
  a[0] = (byte)( chislo_h / 1000000ul); // значение старшего разряда                                                                           
  unsigned long ff = (unsigned long) (chislo_h % 1000000ul); // остаток от деления

  a[1] = (byte)( ff / 100000ul); // значение второго разряда                                                                           
  unsigned long dd = (unsigned long) ( ff % 100000ul); // остаток от деления
  
  a[2] = (byte)(dd / 10000ul);// значение третьего разряда
  unsigned long cc = (unsigned long) (dd % 10000ul); //остаток
  
  a[3] = (byte)(cc / 1000ul) ;// значение четвёртого разряда
  unsigned long vv = (unsigned long)( cc % 1000ul); // остаток

  a[4] = (byte)(vv / 100ul); // значение пятого разряда
  unsigned long gg = (unsigned long)( vv % 100ul);//остаток

  a[5] = (byte)(gg / 10ul); // значение шестого разряда
  a[6] = (byte)( gg % 10ul);// значение седьмого разряда

 

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

А что с flоat`ом не так? 

ЗЫ: сертификат куда-то пропал. В Сафари дома был, а на работе в Еже исчез))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Rumata пишет:

ЗЫ: сертификат куда-то пропал. В Сафари дома был, а на работе в Еже исчез))

Получен адресатом ))

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

Rumata пишет:

сертификат куда-то пропал.

Админы лютые. 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Отозван?)))

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

не, сертификат я ему правильно прописал (с моей точки зрения).  Но, видимо, главный админ с моим мнением не согласен.