Перейти к содержанию

Разобрать Данные Ds18B20 И Вывести На 7 Сегментов


Рекомендуемые сообщения

Всем привет. Не могу найти пример, как вывести температуру с датчика ds18b20 на 7 сегментов, работаю с cvavr.

Использую библиотеку ds18b20 и функцию с плавающей точкой.

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


temps = (unsigned int) ds18b20_temperature(&ds18b20_rom_codes[j][0]);


celie_tmp = temp >> 4; // целая часть числа                                                                          //Это вообще что то не понятное
drob_tmp = temp & 0x000F; // дробная часть числа с точностью 1/16 градуса

drob = (unsigned char) ((drob_tmp * 10) / 16); // преобразование дробной части в формате "1/16 градуса"
// в десятичный формат с точностью 0,1 градуса

buf0=15; // переменные разрядов 7сегментника
buf1=drob;
buf2=temps%10;//единицы целого числа
buf3=temps/10; //Десятки целого числа

buf4=temps/100;

Изменено пользователем Дмитрий Т87
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

В коком виде эта дробная часть не понятно, и как её укоротить тоже не понятно. С дробно частью, показания более плавные, а у меня как то резко увеличиваются показания дробной части.

Ссылка на комментарий
Поделиться на другие сайты

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В коком виде эта дробная часть

Даташит.

В программе вы пишете

unsigned int

Однако библиотека возвращает, насколько я помню, signed int.

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В коком виде эта дробная часть

Даташит.

В программе вы пишете

unsigned int

Однако библиотека возвращает, насколько я помню, signed int.

Если вы не знаете - то лучше не давайте советов. Я прошу помощи у тех кто знает.

Если бы все было так просто в мире, то не было обучающих заведений, курсов - взял так даташит прочел, и все понял.

У меня температура выводится так: 21,3 - 22,4 - 23,7 - 24,8- 25,9. То есть не плавно.

Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Только неделю назад сделал термометр на ATtiny2313A и DS18B20. Тоже нужна была точность 0,1 градуса. После изучения даташита и экспериментов выяснилось:

1. По умолчанию датчик настроен на точность 9 бит, это 0,5 градуса. Поэтому сначала нужно подать такие команды, чтобы включить точность 12 бит (0,0625 градуса):

1wwrite &HCC 'Команда пропуска ROM, чтобы не обращаться по адресу (только для единственного датчика!)

1wwrite &H4E 'Команда записи следующих трёх байтов в RAM

1wwrite &HA0 'Регистр TH

1wwrite &HFF 'Регистр TL

1wwrite &H7F 'Регистр конфигурации, именно здесь задаётся точность преобразования

Waitms 100 'Ждём 100 миллисекунд. Можно меньше, минимум не проверял

1wwrite &HCC 'Команда пропуска ROM

1wwrite &H48 'Команда копировать RAM в ROM. Иначе после отключения питания (или при фантомном питании) датчик вернётся к точности 9 бит

Это пример на BASCOM, команда 1wwrite посылает один байт датчику. В TH TL можно писать от балды, если не использовать встроенную

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

Это нужно только при первом включении датчика. В начале программы можно сделать проверку, прочитав RAM (команда &HBE), если третий байт не

равен &H7F, то подать вышеуказанные команды.

2. Нужно ещё и правильно перевести два байта, прочитанных с датчика, в температуру.

Readtemp: 'Подпрограмма чтения температуры из датчика

1wreset ' Инициализация 1-wire

1wwrite &HCC 'Команда пропуска ROM

1wwrite &HBE ' Команда чтения ОЗУ датчика

Byte0 = 1wread() 'читаем Нулевой Байт

Byte1 = 1wread() 'Читаем Первый Байт

If Byte1 >= 248 Then ' Проверка на отрицательность температуры

Byte0 = &HFF - Byte0 'Если отрицательная, то превращаем в положительное число

Byte1 = &HFF - Byte1 'Аналогично второй байт

'Здесь у меня ещё ставится признак минусовой температуры, выкинул, для простоты

End If

Temper1 = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)

Temper = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)

Temper1 = Temper1 + Temper ' Формируем результат, это целые градусы, без десятых!

Temper = Byte0 And &B00001111 'Берём последний ниббл, в котором и хранятся доли градуса

Temper = Temper * 10

Temper = Temper / 16 'А вот в Temper у нас теперь десятые доли градуса

Return

Переменные Byte0 и Byte1 имеют размерность байт, а Temper и Temper1 - два байта (integer беззнаковое целое).

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...