Заголовок сообщения: Re: ds18b20 и atmega8 вывод температуры с десятичным знаком
Добавлено: Пн май 23, 2011 17:18:18
Открыл глаза
Зарегистрирован: Пн май 23, 2011 11:23:39 Сообщений: 78
Рейтинг сообщения:0
я получаю число например 24 его и вывожу. дело в том что функция опроса датчика выдаёт на выходе тип float, а я ставлю int. и вот вопрос как сделать чтобы вывести целую часть и потом знать дробную.
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Датчик выдает 16 битный код тоесть максимальное значение равно 65536 по этому температурная переменная будет иметь значение int Чтобы расчитать реальную минусовую температуру необходимо от максимального значения отнять значение которое принял МК тоесть temperature=65536-temperature;
далее создаем две переменных int temp, Temp;
вычислим целое число temp=temperature>>4; сдвигаем temperature на 4 бита вправо узнаем десятки Temp=temperature&0x000F переменной Temp присваивается только 4 младших бита которые сдвинали в предыдущем вычислении вычисляем десятки unsigned char temp_min = ((Temp * 10) / 16);
Остается только преобразовать tem в DEC и поставить точку перед младшим - 4-м разрядом индикатора
из которого значащими в являются только 12 бит максимум. Поэтому ИМХО для уменьшения расчетов проще хранить целую и дробную часть раздельно (как два байта). Дробную часть легче и быстрее выводить с помощью табличной подстановки.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения