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

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

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

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

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

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

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

 
Опции темы
Непрочитано 17.12.2007, 15:06  
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

to alkl
не переживайте, понял )

Действительно, была объявлена как unsigned
Но потом появились еще баги, которые были успешно побороты )))

Теперь колдую над стандартными библиотеками cvavr для ds18b20 так как из-за универсальности функции слишком перегружены - убираю ненужное.

Остался последний вопрос:
что означает эта строчка
Код:
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
Первый раз вижу указатель непонятно на что
Код:
(int *)
, да и это
Код:
*((int *) &__ds18b20_scratch_pad.temp_lsb)
[/code]
Реклама:
day177 вне форума  
Непрочитано 17.12.2007, 18:09  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от day177
Первый раз вижу указатель непонятно на что
Код:
(int *)
, ...
Если сказано "(int *)", то это указатель не "непонятно на что", а на int. Как это ни парадоксально - что написано, то и есть.

Сообщение от day177
...да и это
Код:
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;
Да и тут ничего сложного, идем внутрь определения и читаем на обратном пути следующее:
1. взять адрес элемента temp_lsb структуры __ds18b20_scratch_pad
2. привести его к типу указателя на int
3. получить целое (со знаком), находящееся по этому адресу (автоматически из пары Least Significant Byte и Most Significant Byte получается двухбайтовая целая величина)
4. взять битовую маску из массива масок по индексу resolution (то есть, для каждого разрешения - своя маска)
5. отмаскировать полученной маской полученное ранее целое
6. умножить полученный винегрет на 0.0625 (хм, я бы сдвинул на 4 вправо и не жужжал )

И всего-то...
tempora вне форума  
Непрочитано 17.12.2007, 18:40  
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

to tempora
большое спасибо, то что надо ) сижу врубаюсь

sasareccer
а нет ли случаем той самой баблиотечки (ds18b20.h+ds18b20.lib), а то качать новый кодвижен из-за этих библиотек дорого (платный трафик )
day177 вне форума  
Непрочитано 17.12.2007, 19:21  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от day177
а нет ли случаем той самой баблиотечки (ds18b20.h+ds18b20.lib), а то качать новый кодвижен из-за этих библиотек дорого (платный трафик )
dimonbest вне форума  
Непрочитано 17.12.2007, 19:22  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

Сообщение от day177
to tempora
большое спасибо, то что надо ) сижу врубаюсь

sasareccer
а нет ли случаем той самой баблиотечки (ds18b20.h+ds18b20.lib), а то качать новый кодвижен из-за этих библиотек дорого (платный трафик )
Прикрепленный файл: 5371510.rar
dimonbest вне форума  
Непрочитано 17.12.2007, 23:40  
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

to dimonbest
пасиба, поглядел функции, никаких отличий, видимо проблема была в самом CVAVR (юзаю 1.2.5.2)

Выкладываю проект (202Кб): два датчика с паразитным питанием, поочередно выводятся значения каждого (на время примерно от 100 до 200 мс (зависит от количества выводимых символов)).

Осталось победить последний трабл - при первом выводе температуры показывает ошибку. Кто найдет в чем дело - буду сильно благодарен

Прикрепленный файл: 9314623.rar
day177 вне форума  
Непрочитано 18.12.2007, 10:09  
sasareccer
Частый гость
 
Аватар для sasareccer
 
Регистрация: 20.07.2006
Сообщений: 37
Сказал спасибо: 2
Сказали Спасибо 7 раз(а) в 4 сообщении(ях)
sasareccer на пути к лучшему
По умолчанию

Сообщение от day177
to dimonbest
пасиба, поглядел функции, никаких отличий, видимо проблема была в самом CVAVR (юзаю 1.2.5.2)
Заглянул в архив от dimonbest
Там три файлика:
ds18b20.lib
ds1820.lib
ds1820.h
А четвертого нет: ds18b20.h
Вот его, четвёртый файл, посылаю.
(Хотя, в общем-то речь шла о ds18b20, а не про ds1820.)
Если не трудно, напиши потом где же всё-таки была проблемма.

Прикрепленный файл: 161805.rar
sasareccer вне форума  
Непрочитано 18.12.2007, 11:45  
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

грабля с крякозябрами при выводе отрицательных чисел была в процедуре получения-преобразования значения температуры. Чуть подправил кодвиженовскую процедуру и все заработало.

В файлах *.h обычно хранятся прототипы функций, а сами функции находятся в *.lib
day177 вне форума  
Непрочитано 18.12.2007, 21:01  
SergSPio
Прохожий
 
Регистрация: 01.11.2007
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
SergSPio на пути к лучшему
По умолчанию

[quote="day177"]to dimonbest
пасиба, поглядел функции, никаких отличий, видимо проблема была в самом CVAVR (юзаю 1.2.5.2)

попробуйте так
return (((int)__ds18b20_scratch_pad.temp_msb‹‹|
__ds18b20_scratch_pad.temp_lsb)*0.0625;
переделка с ds1820, вроде работало

Прикрепленный файл: 9314623.rar
SergSPio вне форума  
Непрочитано 28.01.2008, 01:56  
day177
Прописка
 
Регистрация: 12.11.2006
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
day177 на пути к лучшему
По умолчанию

опять торможу
Что (какое значение и в каком виде) возвратит выражение:

Код:
return (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])››4;
если измеренное значение будет например 24.5? Сама функция float, возвращаемое значение int (т.е. без запятой)..... Задача в том чтобы получить число после запятой (в данном примере 5) В общем помогите пожалуйста
day177 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Большие отрицательные числа и АВР ua_gruzin Микроконтроллеры, АЦП, память и т.д 7 31.01.2009 11:41
Ввод/вывод дробного (десятичного) числа на семисегментник nigvil TTL и CMOS логика 27 03.01.2009 22:23
32-разрядные числа в 8-битном PIC dimmich Микроконтроллеры, АЦП, память и т.д 17 28.10.2007 04:27
преобразование числа для занесения его в регистр на PIC16F84 CERGEI1982 Микроконтроллеры, АЦП, память и т.д 9 11.01.2007 17:47
Числа с плавающей запятой 32бит Tcom Микроконтроллеры, АЦП, память и т.д 1 01.03.2006 17:37


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


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