addi II 0 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба Здравствуйте! Подскажите пожалуйста как на Си можно правильно преобразовать данные для вывода их на матричный индикатор У меня пока получается + 10 градусов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба Считайте температуру в int16_t. Это будет температура со знаком, умноженная на 10. Другими словами, вы ситали +255 градусов. На самом деле это будет +25.5. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба 10 часов назад, addi II сказал: Подскажите пожалуйста как на Си можно правильно преобразовать данные для вывода Еще есть большая разница между DS1820 и DS18B20. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Droid 77 0 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба В чем отличие? Вопрос возник т. к. DS1820 не встречал, не приходилось использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 1 4 октября, 2019 Опубликовано 4 октября, 2019 · Жалоба 19 часов назад, Droid 77 сказал: В чем отличие? Если в двух словах, то это - два разных датчика. Другой формат данных. Другие регистры. И т.д. (подробности можно посмотреть в ДШ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Droid 77 0 6 октября, 2019 Опубликовано 6 октября, 2019 (изменено) · Жалоба В 03.09.2019 в 17:28, haker_fox сказал: На самом деле это будет +25.5 Выходит у автора стабильно отображается +1.0 градус Изменено 6 октября, 2019 пользователем Droid 77 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RedHeadIvan 0 7 октября, 2019 Опубликовано 7 октября, 2019 · Жалоба Проблема именно с температурой? Или в принципе с 1-Wire? Возможно, найдете что-то полезное в аппноуте по интерфейсу http://www.gaw.ru/html.cgi/txt/app/micros/avr/avr318.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 9 октября, 2019 Опубликовано 9 октября, 2019 (изменено) · Жалоба Вот вам пример работы с DS18 на STM8, а здесь - для STM32. На "железную" реализацию не смотрите - она у меня с косяками (надо было на полноценном КА делать, а у меня черт-те что). Ничего сложного там нет. Получили данные, преобразовали. Вот так проще всего: int32_t gettemp(uint8_t *scratchpad){ // detect DS18S20 int32_t t = 0; uint8_t l,m; int8_t v; if(scratchpad[7] == 0xff) // 0xff can be only if there's no such device or some other error return ERR_TEMP_VAL; m = scratchpad[1]; l = scratchpad[0]; if(scratchpad[4] == 0xff){ // DS18S20 v = l >> 1 | (m & 0x80); // take signum from MSB t = ((int32_t)v) * 10L; if(l&1) t += 5L; // decimal 0.5 }else{ // DS18B20 v = l>>4 | ((m & 7)<<4) | (m & 0x80); t = ((int32_t)v) * 10L; m = (l & 0x0f) >> 1; // add decimal // 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 -> // 0 1 1 2 3 3 4 4 5 6 6 7 8 8 9 9 t += (int32_t)m; // t = v*10 + l*0.625 -> convert if(m) ++t; // 1->1, 2->3, 3->4, 4->5, 5->6 if(m > 5) ++t; // 6->8, 7->9 } return t; } Изменено 9 октября, 2019 пользователем Eddy_Em Какой идиот писал движок этого сайта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться