Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 30.03.2010, 09:08  
ilya_sh
Прописка
 
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
ilya_sh на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Зачем опрашивать каждый датчик через 1 сек?
Алгоритм намного проще: выдаете общую команду на замер температуры.
После поочередно считываете значения с датчиков.
Я делал так: таймер на 1 сек; в прерывании таймера сначала считывал значения с датчиков, потом выдавал общую команду на замер температуры (преобразование).
Считывание занчения занимает 1мс+(8+2)*0,2мс=3мс. Преобразование по ДШ длится 750мс. Итого (1000мс-750мс)/3мс=80 датчиков за интервал 1 сек!
Если хотите и достоверность проверять, то затратите на один датчик 1мс+(8+9)*0,2мс=4,4мс, и за время прерывания сможете 250/4,4=50 датчиков опросить!
Реклама:
ilya_sh вне форума  
Непрочитано 19.04.2010, 23:29  
SHIM1
Временная регистрация
 
Аватар для SHIM1
 
Регистрация: 19.04.2010
Сообщений: 92
Сказал спасибо: 30
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
SHIM1 на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Сообщение от ALEKSEY188 Посмотреть сообщение
А что просто умножить на десять дробное значение нельзя?
Например так:
ldi temp,0b00001000 ; Значения для преобразования (дробь)
andi temp,0b00001111 ; Обнуляем старшую тетраду (на всякий случай)
lsl temp
mov tmp,temp
lsl temp
lsl temp
add tmp,temp
mov temp,tmp
andi tmp,$f0
swap tmp ; первая дробная цифра в tmp
; оставшиеся дробные разряды в temp
; Если нужно больше дробных разрядов, выполняем этот участок большее число раз!!!
Специально зарегился, чтобы внести нужные на мой взгляд пояснения. Боюсь, что не всем понятно: а нафига автор умножает на 10, когда цена бита равна 0,0625 град С? На самом деле дробное значение у Вас умножается не на 10, а на 0,625 (10/16). Т.е. на 0,0625х10. И соответственно Вы получаете первую цифру после запятой. Если по порядку: 1) х10, 2) отброс мусора (andi tmp,$f0), 3) деление на 16 (swap tmp) и. Может кому интересно, а то лепит народ бездумно чужие библиотеки из СИ .
SHIM1 вне форума  
Непрочитано 20.04.2010, 04:46  
ALEKSEY188
Заблокирован
 
Регистрация: 14.04.2008
Адрес: Украина, совсем рядом от террористов!
Сообщений: 388
Сказал спасибо: 32
Сказали Спасибо 85 раз(а) в 62 сообщении(ях)
ALEKSEY188 на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Сообщение от SHIM1 Посмотреть сообщение
Специально зарегился, чтобы внести нужные на мой взгляд пояснения. Боюсь, что не всем понятно: а нафига автор умножает на 10, когда цена бита равна 0,0625 град С? На самом деле дробное значение у Вас умножается не на 10, а на 0,625 (10/16). Т.е. на 0,0625х10. И соответственно Вы получаете первую цифру после запятой. Если по порядку: 1) х10, 2) отброс мусора (andi tmp,$f0), 3) деление на 16 (swap tmp) и. Может кому интересно, а то лепит народ бездумно чужие библиотеки из СИ .
DS18B20 результат измерения два байта, 12бит целое число градусов и 4 бита двоичная дробь, в градусах Цельсия, а это означает что нужно только преобразовать из двоичной системы в десятичную и на экран. Для того чтобы преобразовать число из одной позиционной системы в другую в нашем случае из двоичной в десятичную, нужно двоичную дробь умножить на основание системы в которую переводим. Вообще стоит почитать очень интересная наука дискретная математика, проиграйтесь с бумажкой переводите туда сюда из двоичной в десятичную и обратно. Приведенный мною код не бездумная библиотека на С а вполне осознаваемый алгоритм, эффективнее которого я не видел, если Вы знаете способ сделать лучше очень хотелось бы взглянуть, только не на рассуждения а на рабочий участок!!!
ALEKSEY188 вне форума  
Непрочитано 20.04.2010, 11:27  
SHIM1
Временная регистрация
 
Аватар для SHIM1
 
Регистрация: 19.04.2010
Сообщений: 92
Сказал спасибо: 30
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
SHIM1 на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Сообщение от ALEKSEY188 Посмотреть сообщение
DS18B20 результат измерения два байта, 12бит целое число градусов и 4 бита двоичная дробь, в градусах Цельсия, а это означает что нужно только преобразовать из двоичной системы в десятичную и на экран. Для того чтобы преобразовать число из одной позиционной системы в другую в нашем случае из двоичной в десятичную, нужно двоичную дробь умножить на основание системы в которую переводим. Вообще стоит почитать очень интересная наука дискретная математика, проиграйтесь с бумажкой переводите туда сюда из двоичной в десятичную и обратно. Приведенный мною код не бездумная библиотека на С а вполне осознаваемый алгоритм, эффективнее которого я не видел, если Вы знаете способ сделать лучше очень хотелось бы взглянуть, только не на рассуждения а на рабочий участок!!!
Я так и думал... Не подскажете ли, уважаемый, где можно почитать о преобразовании двоичных чисел в десятичные методом умножения? А еще лучше "проиграйтесь с бумажкой" и убедитесь в полной чуши сего "вполне осознаваемый алгоритм". Кстати, а что говорит "интересная наука" о числе 0,0625 и как так оно само собой у Вас получается? И еще, на закуску: целую часть Вы также осознанно умножаете?
SHIM1 вне форума  
Непрочитано 20.04.2010, 15:28  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Сообщение от SHIM1 Посмотреть сообщение
А еще лучше "проиграйтесь с бумажкой" и убедитесь в полной чуши сего "вполне осознаваемый алгоритм".
А что - это типа какой то хак?
Имеем число Fixed Point - 80,5 - это и есть значение температуры. Младшие 4 бита - дробная часть. Т.е число выглядит так - 0x0508 или в двоичной 0х0000010100001000 Нам это в принципе неважно для осознания алгоритма, мы работаем со значением. Для выделения десятых долей надо умножить наше число на 10 - получим 805,0. Дробная часть осталась на своем месте, только тоже выросла в 10 раз и один ДЕСЯТИЧНЫЙ разряд перешел в целую часть. До этого момента нам было не важно как представлено число, сколько разрядов в нем дробная часть, а сколько целая. Мы работали с ним как с целым. Дальше просто - нам надо отбросить эту ненужную дробную часть. Так как она занимает младшие 4 бита - сдвигаем наше число вправо на 4 разряда. Все - имеем значение 805. Остается преобразовать его в десятичное представление и можно выводить на экран/в терминал, не забыв отделить последний разряд запятой. А пояснения типа "умножаем на самом деле на 0,625" только запутать способны. Потому как алгоритм звучит - умножаем на 10 и отбрасываем дробную часть. И сразу понятна физика процесса Причем если дробная часть будет не в 4 битах, а в 6 это нас не запутает - алгоритм будет тот же - умножение и отбрасывание. Или Вы нам предложите умножать на 0,15625?

Последний раз редактировалось kison; 20.04.2010 в 15:38.
kison вне форума  
Непрочитано 20.04.2010, 15:35  
ALEKSEY188
Заблокирован
 
Регистрация: 14.04.2008
Адрес: Украина, совсем рядом от террористов!
Сообщений: 388
Сказал спасибо: 32
Сказали Спасибо 85 раз(а) в 62 сообщении(ях)
ALEKSEY188 на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Сообщение от SHIM1 Посмотреть сообщение
Не подскажете ли, уважаемый, где можно почитать о преобразовании двоичных чисел в десятичные методом умножения?
Вот почитайте!
Вложения:
ALEKSEY188 вне форума  
Непрочитано 20.04.2010, 16:03  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Термометр на ds18b20

http://www.remexpert.com/ipb/topic1285.html
0.625 - это 5/8 - для получения сдвигаем вправо на 1 разряд - получаем 4/8 и сдвигаем вправо на 3 разряда - получаем 1/8, их складываем.
__________________
warez
urry вне форума  
Сказали "Спасибо" urry
SHIM1 (20.04.2010)
Непрочитано 20.04.2010, 18:34  
ALEKSEY188
Заблокирован
 
Регистрация: 14.04.2008
Адрес: Украина, совсем рядом от террористов!
Сообщений: 388
Сказал спасибо: 32
Сказали Спасибо 85 раз(а) в 62 сообщении(ях)
ALEKSEY188 на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Алгоритм конкретно к датчику DS.
1)Определяем знак, инвертируем, если нужно, отделяем целую часть от дробной, вызываем подпрограмму BCD и вывод на экран, все как обычно. Ставим после целого запятую.
2)Дробную часть умножаем на 10 пример 0.1*10=1.0, все просто как топор. Помещаем 4 битную дробь в регистр, младшие четыре бита дробь, за ним условная запятая, старшие равны нулю, умножаем на 10, все, что за условной запятой это двоично-десятичный эквивалент двоичной дроби, в нашем случае число десяток, готовое к выводу на экран. Если обнулить старшие 4 бита и еще раз умножить на 10 то получим число соток и т.д.

Проще всего умножение 10 организовать как 10=8+2. х- множимое, можно преобразовать х*10= х*2+х*8, в итоге алгоритм умножения сводится к трем сдвигам и одному сложению: сдвигаем x на один разряд в лево(умножаем на 2), запоминаем x в y, сдвигаем х на два разряда в лево (умножаем на 8 ) следуем x+y. В итоге преобразование выполняется за 5 машинных циклов (для AVR), это быстрее чем аппаратный умножитель!!!
Сообщение от urry Посмотреть сообщение
http://www.remexpert.com/ipb/topic1285.html
0.625 - это 5/8 - для получения сдвигаем вправо на 1 разряд - получаем 4/8 и сдвигаем вправо на 3 разряда - получаем 1/8, их складываем.
Не сомневаюсь, что это работает, но назвать это эффективным и элегантным способом трудно!!! Лично для меня это способ сэкономить рубль, потратив два!!!

Последний раз редактировалось ALEKSEY188; 20.04.2010 в 18:38.
ALEKSEY188 вне форума  
Непрочитано 20.04.2010, 18:57  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Сообщение от ALEKSEY188 Посмотреть сообщение
Не сомневаюсь, что это работает, но назвать это эффективным и элегантным способом трудно!!!
ФЛАГ В РУКИ, БАРАБАН НА ГРУДЬ, простите...
Чего экономим ?
Не вижу смысла в дальнейшем разговоре.
Удачи типа.
__________________
warez
urry вне форума  
Непрочитано 20.04.2010, 19:21  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Термометр на ds18b20

Вообще действительно забавно - чтение с датчика несколько тысяч тактов, проверка CRC сотни, а затем экономим десяток тактов. Как бы овчинка выделки не стоит. Я метод со сдвигами использовал с tiny, потому как там умножителя нет. А с мегой мне пофигу - я УМНОЖАЮ на 10, ну займет это лишних 10-20 тактов, да и черт с ним На фоне считывания это незаметно. Зато если умножение еще где используется, то место экономится
kison вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Atmega8 термометр Gizmors Микроконтроллеры, АЦП, память и т.д 77 13.12.2014 15:33
DS18B20 спонтанно греется, глюк или брак ? lukrom Коллекция глюков 32 21.10.2013 10:59
Китайский цифровой термометр СТ-2 Jack36 Делимся опытом 0 27.02.2010 16:55


Часовой пояс GMT +4, время: 07:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot